--enable-cpow-warnings can now be passed when running a mochitest to re-enable the warnings,
should one wish to do that.
--HG--
extra : rebase_source : 47b51bade91531269a77fec6c2c68fa1b3babf36
Only the httpd.js unit tests actually rely on this. I tried to make them use Cu.import but they also rely on poking a bunch of stuff in httpd.js that's not exported, so instead I just made the test manifest copy httpd.js to the test directory and had them load it from there.
--HG--
extra : rebase_source : 24b04d619891ec95e5df23a2eb7f3277dd3206b2
extra : amend_source : 72139cecdcd695171e2fd0ce8ea7be91c1eebd1a
Cleans up navigation tests to use assertion routines that give us better
feedback if tests were to fail.
Also adds a test for setting location through executeScript, and a test
for getCurrentUrl returning the URL of the top-level browsing context
when inside an iframe.
r=dburns
--HG--
extra : rebase_source : 1844c906cc436ef378f07342051a44689fedba58
Adds support for W3C WebDriver compatible file uploads, where additional
calls to sendKeys on <input type=file multiple> will append files,
rather than reset the field.
r=dburns
--HG--
extra : source : 93166201fca032157ecb88923a62e8b2e8f9529d
extra : amend_source : a27f709de201063cc510af2f234d45344e90193b
Brings Marionette closer to compliance with the W3C WebDriver standard
which prescribes that errors should be identified by a string rather
than a magic number.
r=dburns
--HG--
extra : rebase_source : 2bdb28f3c05e56b17cc13ceacbf3167dabe89fd0
extra : source : 2b691bf191db1a83ae489116649602a74e64007a
Adds string based statuses as defined by the W3C WebDriver protocol
to the Marionette Python client. Importantly, it does not remove the
ability to look up errors by their Selenium protocol number for backwards
compatibility reasons.
r=dburns
--HG--
extra : rebase_source : 792e85d01ed6513370f448762c1c5bf8f13842a4
There's a test for add_task() in selftest.py called ADD_TASK_MULTIPLE, which tests if
multiple add_task() tests are working. The test added in this commit does the exact same
except without run_test(). Since the original tests included this, I thought it would make
a good case for checking if the removal of run_test() is working as expected. Please remove
if this is unnecessary.
--HG--
extra : rebase_source : f6617259056db7ac7a658a89063694f51408b8ce
Since the simple test cases before this bug had cases for both passing and
failing, it would be a good idea to follow suit and add similar failing tests
for when run_test() is omitted.
Like the other simple tests defined in selftest.py, SIMPLE_FAILING_TEST,
ADD_TEST_FAILING, etc., it follows a similar pattern except these are done
without run_test() defined.
--HG--
extra : rebase_source : a1ef9a7b9e8274fe981864c5e021c80d2d66f7ec
Four new test cases have been added to testing/xpcshell/selftest.py.
These new tests check that tests where run_test() is not defined
work properly.
The test cases check the following cases:
1. when only add_test() is used.
2. when only add_task() is used.
3. when both add_task() and add_test() is used.
4. when a test file is empty, i.e. contains no add_test(), add_task() or
run_test().
Test bodies only consist of do_check_true(true) calls to make up a minimal
test without run_test() in the same vein as the other simple tests defined
previously.
Also, broke a comment up that was too long.
--HG--
extra : rebase_source : 48d055680ba8108816ecbe07008496c5281f46cc
As referenced in Bug 982852, this fix makes run_tests() optional.
Test cases can now consist of add_test() and add_task() calls
without the need to exclusively set up a run_test() just to call
run_next_test() inside it. If run_test() however is defined, it
will be called directly as usual, which should keep all older
tests working without breaking.
Since most run_test() calls right now are mostly boilerplate and
usually are of the form -- function run_test(){run_next_test();} --
this fix checks if run_test is defined by using the typeof operator
which should evaluate to "function" if it is defined. If defined,
it is called straight away, otherwise, run_next_test() is called,
which is what run_test() usually does when used as a set up to
call tests registered by add_test() and add_task().
--HG--
extra : rebase_source : 7cfbf30a67e3a8d088f8409edcdde8976f46b941
This is for aurora (dev edition) compatibility. In this channel, there is a
selected lightweight theme by default. Tests don't expect this to be the case
so this simply resets the relevant prefs for mochitests and xpcshell tests.
Rather than attempting to bind non-functions and catching the exception this
explicitly checks if it is a function. This helps reduce memory consumption
needed for the exception stack traces. Realistically that will go away when GC
is run, but it throws off memory measurments prior to that.
Fixes use of pinch() routine in gestures.py as part of Gaia UI tests.
Regressed as part of bug 1107706.
r=dburns
--HG--
extra : rebase_source : a22302712be7cf2eb8ac49fa2d221b8a2ea923f8
Back when mozpack.path was added, it was used as:
import mozpack.path
mozpack.path.func()
Nowadays, the common idiom is:
import mozpack.path as mozpath
mozpath.func()
because it's shorter.
$ git grep mozpath\\. | wc -l
423
$ git grep mozpack.path\\. | wc -l
123
This change was done with:
$ git grep -l mozpack.path\\. | xargs sed -i 's/mozpack\.path\./mozpath./g'
$ git grep -l 'import mozpack.path$' | xargs sed -i 's/import mozpack.path$/\0 as mozpath/'
$ (pat='import mozpack.path as mozpath'; git grep -l "$pat" | xargs sed -i "1,/$pat/b;/$pat/d")
Add a `tags` attribute to a test or DEFAULT section in a manifest:
[test_foo]
tags = foo
Then run all tests with a given tag by passing in `--tag foo` to a supported test harness. So far mochitest, xpcshell and marionette are supported.
--HG--
extra : rebase_source : 68a0931c6a8ee1df4f5c09d67c396490774aa856
Linting; no functional changes.
--HG--
extra : rebase_source : bf63a6d317af1cba44c6608437c0b0894e8231ce
extra : source : ec2b1317d3c6389826da0e8e8c12176ff2cf9eeb
It uses chrome context to test XUL related functionality that is not
necessary nor desirable to run on B2G.
--HG--
extra : rebase_source : bb82f0bd89d782b1427a872524a7c4fd0e0cdc66
extra : source : e3ddaf8aae394231f40db79ba38d7bd8e19f2d8c
Emulator callbacks are now created dynamically upon request, and uses
a nicer data structure in chrome context. Each emulator callback is
encapsulated in EmulatorCallback, and stored on Emulator.
Emulator is stored on Dispatcher (as opposed to in marionette-server.js)
which bypasses some of the problems with circumventing the Marionette
protocol in GeckoDriver because of CommandProcessor.
Emulator callbacks to the client should be considered transparent, hence
they do not use the ListenerProxy. They are explicitly meant _not_
to be blocking.
--HG--
extra : rebase_source : f9fa688f7ec2401dbe3b18713cef7a9c0a4ab0f5
extra : source : eeb3d39874b17e02888427afb9709f35abc95120
If special powers is imported using Components.utils.import on B2G which
has some special concepts around global scoping, a TypeError will be
raised unless the custom error is a prototypal Error.
An explanation can be found for a similar issue in bug 843892, which
states that toString is attached to the instances rather than the
prototype, and that this causes problems once the object goes through
Object.freeze. It was patched in bug 1014484.
This patch also renames SpecialPowersException to SpecialPowersError.
--HG--
extra : rebase_source : c2be428467e07ee476577a1c2a24a782bd6b52a3
extra : source : 69669d0e6ddcaa2b16d69f96750c50f694247271
The Marionette server handles requests separately with a global sense
of state which makes it hard to introduce generalised behaviour to many
commands. This effectively slows down protocol implementation because
each command request individually needs to do heavy lifting.
This patch introduces a series of abstractions that separates out the
WebDriver implementation to a new class, GeckoDriver. It also features
a new interface to mediate messages between the chrome- and content
processes.
This allows the code living in the chrome context to make direct calls
on the listener through a promise-based API:
let listener = new ListenerProxy(mm, sendCallback);
let res = yield listener.functionOnListener("arg1", "arg2");
The MarionetteServer class that used to live in marionette-server.js
has now been moved to server.js, while the WebDriver implementation
has moved to driver.js. By introducing more stringent separation,
MarionetteServer now properly encapsulates the server process allowing
us to unit tests for it in the future.
The patch is a refactor in the truest sense, in the meaning that no
input or output should have changed.
--HG--
extra : rebase_source : c94b8cd6b4e61addd3fe42c4b94a26ee987fc34a
extra : source : 7f506cdb77b88994ba9f5b13cc936a99a403f1fb
The dispatcher is analogous to the client socket connection, and handles
receiving packets and closing connections.
It also encompasses some of the functionality needed to establish the
devtools and Marionette connection, that previously used to live in
MarionetteServerConnection in marionette-server.js.
For each connection, recognised commands will be forwarded to the command
processor (command.js) unless a handler is defined in Dispatcher.requests.
--HG--
extra : rebase_source : 13cc697ba45addb6191df7d2f7ea1133194177ce
extra : source : 7abef4010b3094d3f276fc16cfbae43b55da7b0d
The command processor receives messages, processes them, and wraps the
execution of the command implementations. This allows commands to throw
errors without worrying about the side effects.
This patch also introduces a Response object which correspondingly wraps
the replies to the client. This shifts the responsibility of managing
the correctness of the packets from the commands to this.
--HG--
extra : rebase_source : 92e0ee1b3f7034a548a8a36705504b307906cf23
extra : source : b0d00faceef4e348cc99c020f01d59c7933677b7
Adds the ability to throw error objects for WebDriver statuses, and an
error module with convenience functions for manipulation of these and
for handling other error related operations.
--HG--
extra : rebase_source : 5ee047fd7a8e0ecea918e422cd12273b78a78153
extra : source : 0c074cdc434e3c8ba412db44aece7b1840198fe5
Linting; no functional changes.
--HG--
extra : rebase_source : 773765e663871a46f6b280510b92f71638aff170
extra : source : ec2b1317d3c6389826da0e8e8c12176ff2cf9eeb
It uses chrome context to test XUL related functionality that is not
necessary nor desirable to run on B2G.
--HG--
extra : rebase_source : f247c8b40325b682adaedea7b0812ede57438cf4
extra : source : e3ddaf8aae394231f40db79ba38d7bd8e19f2d8c
Emulator callbacks are now created dynamically upon request, and uses
a nicer data structure in chrome context. Each emulator callback is
encapsulated in EmulatorCallback, and stored on Emulator.
Emulator is stored on Dispatcher (as opposed to in marionette-server.js)
which bypasses some of the problems with circumventing the Marionette
protocol in GeckoDriver because of CommandProcessor.
Emulator callbacks to the client should be considered transparent, hence
they do not use the ListenerProxy. They are explicitly meant _not_
to be blocking.
--HG--
extra : rebase_source : 9e887526af99c02036575e5c7b6790629d5f917d
extra : source : eeb3d39874b17e02888427afb9709f35abc95120
If special powers is imported using Components.utils.import on B2G which
has some special concepts around global scoping, a TypeError will be
raised unless the custom error is a prototypal Error.
An explanation can be found for a similar issue in bug 843892, which
states that toString is attached to the instances rather than the
prototype, and that this causes problems once the object goes through
Object.freeze. It was patched in bug 1014484.
This patch also renames SpecialPowersException to SpecialPowersError.
--HG--
extra : rebase_source : 1d8858967fc83ab5082e55bafef58c83baf1cc80
extra : source : 69669d0e6ddcaa2b16d69f96750c50f694247271
The Marionette server handles requests separately with a global sense
of state which makes it hard to introduce generalised behaviour to many
commands. This effectively slows down protocol implementation because
each command request individually needs to do heavy lifting.
This patch introduces a series of abstractions that separates out the
WebDriver implementation to a new class, GeckoDriver. It also features
a new interface to mediate messages between the chrome- and content
processes.
This allows the code living in the chrome context to make direct calls
on the listener through a promise-based API:
let listener = new ListenerProxy(mm, sendCallback);
let res = yield listener.functionOnListener("arg1", "arg2");
The MarionetteServer class that used to live in marionette-server.js
has now been moved to server.js, while the WebDriver implementation
has moved to driver.js. By introducing more stringent separation,
MarionetteServer now properly encapsulates the server process allowing
us to unit tests for it in the future.
The patch is a refactor in the truest sense, in the meaning that no
input or output should have changed.
--HG--
extra : rebase_source : 72c68105df19dc1e328f78c6bfb2282b61d82c8d
extra : source : 7f506cdb77b88994ba9f5b13cc936a99a403f1fb
The dispatcher is analogous to the client socket connection, and handles
receiving packets and closing connections.
It also encompasses some of the functionality needed to establish the
devtools and Marionette connection, that previously used to live in
MarionetteServerConnection in marionette-server.js.
For each connection, recognised commands will be forwarded to the command
processor (command.js) unless a handler is defined in Dispatcher.requests.
--HG--
extra : rebase_source : a86a768323f9cf9450bc17a3b105265440e2c861
extra : source : 7abef4010b3094d3f276fc16cfbae43b55da7b0d
The command processor receives messages, processes them, and wraps the
execution of the command implementations. This allows commands to throw
errors without worrying about the side effects.
This patch also introduces a Response object which correspondingly wraps
the replies to the client. This shifts the responsibility of managing
the correctness of the packets from the commands to this.
--HG--
extra : rebase_source : 9e66199b7977528345680eb8170a082156286b8b
extra : source : b0d00faceef4e348cc99c020f01d59c7933677b7
Adds the ability to throw error objects for WebDriver statuses, and an
error module with convenience functions for manipulation of these and
for handling other error related operations.
--HG--
extra : rebase_source : 9b03a17a9568c98c79461effa39da5d42aaf4d26
extra : source : 0c074cdc434e3c8ba412db44aece7b1840198fe5
It uses chrome context to test XUL related functionality that is not
necessary nor desirable to run on B2G.
--HG--
extra : rebase_source : 64b32ff15ff2fce0ba0356b49736a404ec8e5c5d
Emulator callbacks are now created dynamically upon request, and uses
a nicer data structure in chrome context. Each emulator callback is
encapsulated in EmulatorCallback, and stored on Emulator.
Emulator is stored on Dispatcher (as opposed to in marionette-server.js)
which bypasses some of the problems with circumventing the Marionette
protocol in GeckoDriver because of CommandProcessor.
Emulator callbacks to the client should be considered transparent, hence
they do not use the ListenerProxy. They are explicitly meant _not_
to be blocking.
--HG--
extra : rebase_source : cc936f6556b666ac68f7cc5040c1772b74a0dd66
If special powers is imported using Components.utils.import on B2G which
has some special concepts around global scoping, a TypeError will be
raised unless the custom error is a prototypal Error.
An explanation can be found for a similar issue in bug 843892, which
states that toString is attached to the instances rather than the
prototype, and that this causes problems once the object goes through
Object.freeze. It was patched in bug 1014484.
This patch also renames SpecialPowersException to SpecialPowersError.
--HG--
extra : rebase_source : 042e32ad8fc50d7b81598f6f77ca4e6d86ef516d
The Marionette server handles requests separately with a global sense
of state which makes it hard to introduce generalised behaviour to many
commands. This effectively slows down protocol implementation because
each command request individually needs to do heavy lifting.
This patch introduces a series of abstractions that separates out the
WebDriver implementation to a new class, GeckoDriver. It also features
a new interface to mediate messages between the chrome- and content
processes.
This allows the code living in the chrome context to make direct calls
on the listener through a promise-based API:
let listener = new ListenerProxy(mm, sendCallback);
let res = yield listener.functionOnListener("arg1", "arg2");
The MarionetteServer class that used to live in marionette-server.js
has now been moved to server.js, while the WebDriver implementation
has moved to driver.js. By introducing more stringent separation,
MarionetteServer now properly encapsulates the server process allowing
us to unit tests for it in the future.
The patch is a refactor in the truest sense, in the meaning that no
input or output should have changed.
--HG--
extra : rebase_source : 2513f6e88b79b2420757e66890d5ca49d5266318
The dispatcher is analogous to the client socket connection, and handles
receiving packets and closing connections.
It also encompasses some of the functionality needed to establish the
devtools and Marionette connection, that previously used to live in
MarionetteServerConnection in marionette-server.js.
For each connection, recognised commands will be forwarded to the command
processor (command.js) unless a handler is defined in Dispatcher.requests.
--HG--
extra : rebase_source : 2cf2e3ab1ab8b1044aff798b461dfee9b08cf7a4
The command processor receives messages, processes them, and wraps the
execution of the command implementations. This allows commands to throw
errors without worrying about the side effects.
This patch also introduces a Response object which correspondingly wraps
the replies to the client. This shifts the responsibility of managing
the correctness of the packets from the commands to this.
--HG--
extra : rebase_source : cfab78a0919b0cc95db9dfdf47b2b5e29a15094b
Adds the ability to throw error objects for WebDriver statuses, and an
error module with convenience functions for manipulation of these and
for handling other error related operations.
--HG--
extra : rebase_source : 8095e97f974cdf157cb3100a4249a6ae1a6451dc
CLOSED TREE
Backed out changeset 9af9111e9c27 (bug 1126089)
Backed out changeset 288efd5e2ca0 (bug 1126089)
Backed out changeset 3bcebfd13538 (bug 1126089)