This adds support for Travis CI and SauceLabs
testing. Testing on SauceLabs in done via
the Karma test runner. Note that encrypted
Sauce username and access key values need
to be inserted into .travis.yml as global
environment variables. Additionally, the
local test runner (which is still useful
for debugging tests and code) was updated
to reflect that the 'node_modules' folder
now gets placed in the root directory.
File: ui.js
Tests Added: False
Changes:
- Fix JSHint errors
- add some curly braces to improve clarity
- move variable declarations to relevant locations instead of at the top
of methods
File: display.js
Tests Added: True (preliminary)
Changes:
- De-crockford-ified the file
NOTE: the tests included for display.js cover basic functionality, but
are by no means nearly as comprehensive as the ones presented for
rfb.js.
File: websock.js
Tests Added: True
Changes:
- Cleaned up JSHint errors
- Converted to normal JS constructor pattern with "private" fields and
methods now simply being prepended by underscores
- Added a "bind" polyfill for use in PhantomJS 1.x in util.js
- Added FakeWebSocket to fill in for actual WebSocket objects when
testing
- Made exception handler actually log exception name and message,
to console, in addition to stack trace
File: webutil.js
Tests Added: False
Changes:
- Fixed JSHint Errors (global "use strict", spaces)
- added some newline characters when appropriate for readability
- moved variable declarations to the places they were actually used
for readability
File: input.js
Tests Added: False (already present partially -- see below)
Changes:
- Fixed JSHint Errors
- Converted to normal non-Crockford constructors
NOTE: while there are tests for the actual key-detecting functionality,
the tests do not cover the actual Keyboard and Mouse objects
themselves.
File: util.js
Tests Added: True (partial -- for logging and array push methods)
Changes:
- Fixed JSHint Errors (indentation, semicolons, global "use strict")
- Made browser detection methods more readable
- added some newline characters when appropriate for readability
- throw Errors not strings!
- Removed conf_defaults, and added make_properties and set_defaults
instead (see below)
The removal of conf_defaults and switch to make_properties and
set_defaults is to facilitate the switch over to normal Javascript
constructors instead of Crockford-style constructors. Now, methods
are added to the objects prototype (and thus make properties is called
outside the constructor).
This is the first commit in a series of commits
which improve the readability of some of the code
and add tests.
File: base64.js
Tests Added: True
Changes:
- Improved indentation
- Fixed JSHint errors
- Moved loop variables to be declared in the loop for better readability
(N.B. Javascript does not have block scoping, so the variables are
still technically available outside the loop -- it just makes the code
clearer to place them inside the loop, since they are only used there)
Previously, if you did not specify a tests file,
you had to be in the 'tests' directory for the
"run all tests" functionality to work. Now it
will work in any directory.
Previously, there would be a case where if your tests took
too long to run, the casper test runner would only report
on certain tests. This has been fixed.
Now, 'error' events from the test runner are output to stderr.
Additionally, when debug is enabled, debug output is logged to
stderr instead of stdout (as was the case previously).
Now, the phrase `requires test modules: ` may be place in a comment
in a file to require modules local to the test directory, similarly
to the way the `require local modules: ` line may be used to inject
files in the 'include' directory. This is useful for when common
fakes need to be injected into a test.
When using the '-g' option with run_from_console.js, you can
now pass the '-o' option to automatically open the generated
HTML file in your default browser. This relies on the 'open'
NPM module.
Previously, Util.getPosition didn't deal with scrolling
particularly well. This fixes that by calculating the
scroll offset when dealing with getting mouse positions.
Credit to @erikgull and @emmar for the initial version of
the fix. Credit to Brian Huismanfor the initial code.
Closes#295
Relevant to #258
Fix keyboard handling for IE10 (issue #352)
* Keyboard events in IE10 do not provide any useful information on the properties 'which', 'char' or 'charCode'. Instead, it seems to store the char code in the keyCode property.
* This code works in Firefox on Android and on Chrome and Safari on iOS.
* It does not work in Chrome on Android, the enter key is labled "Go" and closes the on screen keyboard when pressed.
Apparently Firefox on Linux changed the value of navigator.appVersion,
causing our OS detection (used to determine how to interpret different
modifier keys) to fail.
Use navigator.platform instead, which should be more stable.
http://stackoverflow.com/a/19883965/33213
Previously we identified keys in keyboard events by the 'key' property
if it was set, and 'keyCode' otherwise.
This turns out to be problematic as Firefox no longer leaves 'key'
undefined (so we fall back to using 'keyCode'), but instead sets 'key'
to 'MozPrintableKey' for all printable keys.
This meant that when (printable) keys are released, we can't match it
against the corresponding keydown event, and instead just send a keyup
event for the last keydown received.
Now, if both 'key' and 'keyCode' are set, use the concatenation of both.
Otherwise prefer 'keyCode', as that is at least unique for every key.
This should let us release the right keys on keyup events.