Bug 1150527 - Remove error numbers from Marionette Python client; r?automatedtester
MozReview-Commit-ID: IGAdxItviaz
--- a/testing/marionette/client/marionette_driver/errors.py
+++ b/testing/marionette/client/marionette_driver/errors.py
@@ -8,17 +8,16 @@ import traceback
class InstallGeckoError(Exception):
pass
class MarionetteException(Exception):
"""Raised when a generic non-recoverable exception has occured."""
- code = (500,)
status = "webdriver error"
def __init__(self, message=None, cause=None, stacktrace=None):
"""Construct new MarionetteException instance.
:param message: An optional exception message.
:param cause: An optional tuple of three values giving
@@ -64,130 +63,107 @@ class InvalidArgumentException(Marionett
status = "invalid argument"
class InvalidSessionIdException(MarionetteException):
status = "invalid session id"
class TimeoutException(MarionetteException):
- code = (21,)
status = "timeout"
class JavascriptException(MarionetteException):
- code = (17,)
status = "javascript error"
class NoSuchElementException(MarionetteException):
- code = (7,)
status = "no such element"
class NoSuchWindowException(MarionetteException):
- code = (23,)
status = "no such window"
class StaleElementException(MarionetteException):
- code = (10,)
status = "stale element reference"
class ScriptTimeoutException(MarionetteException):
- code = (28,)
status = "script timeout"
class ElementNotVisibleException(MarionetteException):
- code = (11,)
status = "element not visible"
def __init__(self,
message="Element is not currently visible and may not be manipulated",
stacktrace=None, cause=None):
super(ElementNotVisibleException, self).__init__(
message, cause=cause, stacktrace=stacktrace)
class ElementNotAccessibleException(MarionetteException):
- code = (56,)
status = "element not accessible"
class NoSuchFrameException(MarionetteException):
- code = (8,)
status = "no such frame"
class InvalidElementStateException(MarionetteException):
- code = (12,)
status = "invalid element state"
class NoAlertPresentException(MarionetteException):
- code = (27,)
status = "no such alert"
class InvalidCookieDomainException(MarionetteException):
- code = (24,)
status = "invalid cookie domain"
class UnableToSetCookieException(MarionetteException):
- code = (25,)
status = "unable to set cookie"
class InvalidElementCoordinates(MarionetteException):
- code = (29,)
status = "invalid element coordinates"
class InvalidSelectorException(MarionetteException):
- code = (32, 51, 52)
status = "invalid selector"
class MoveTargetOutOfBoundsException(MarionetteException):
- code = (34,)
status = "move target out of bounds"
class SessionNotCreatedException(MarionetteException):
- code = (33, 71)
status = "session not created"
class UnexpectedAlertOpen(MarionetteException):
- code = (26,)
status = "unexpected alert open"
class UnknownCommandException(MarionetteException):
- code = (9,)
status = "unknown command"
class UnknownException(MarionetteException):
- code = (13,)
status = "unknown error"
class UnsupportedOperationException(MarionetteException):
- code = (405,)
status = "unsupported operation"
es_ = [e for e in locals().values() if type(e) == type and issubclass(e, MarionetteException)]
by_string = {e.status: e for e in es_}
-by_number = {c: e for e in es_ for c in e.code}
def lookup(identifier):
"""Finds error exception class by associated Selenium JSON wire
- protocol number code, or W3C WebDriver protocol string."""
- lookup = by_string
- if isinstance(identifier, int):
- lookup = by_number
- return lookup.get(identifier, MarionetteException)
+ protocol number code, or W3C WebDriver protocol string.
+
+ """
+ return by_string.get(identifier, MarionetteException)
--- a/testing/marionette/harness/marionette/tests/unit/test_errors.py
+++ b/testing/marionette/harness/marionette/tests/unit/test_errors.py
@@ -48,19 +48,16 @@ class TestErrors(marionette_test.Marione
def test_cause_tuple(self):
exc = errors.MarionetteException(cause=cause)
self.assertEqual(exc.cause, cause)
r = str(exc)
self.assertIn(", caused by {0!r}".format(cause[0]), r)
class TestLookup(marionette_test.MarionetteTestCase):
- def test_by_known_number(self):
- self.assertEqual(errors.NoSuchElementException, errors.lookup(7))
-
def test_by_unknown_number(self):
self.assertEqual(errors.MarionetteException, errors.lookup(123456))
def test_by_known_string(self):
self.assertEqual(errors.NoSuchElementException,
errors.lookup("no such element"))
def test_by_unknown_string(self):
@@ -69,13 +66,10 @@ class TestLookup(marionette_test.Marione
def test_by_known_unicode_string(self):
self.assertEqual(errors.NoSuchElementException,
errors.lookup(u"no such element"))
class TestAllErrors(marionette_test.MarionetteTestCase):
def test_properties(self):
for exc in errors.es_:
- self.assertTrue(hasattr(exc, "code"),
- "expected exception to have attribute `code'")
self.assertTrue(hasattr(exc, "status"),
"expected exception to have attribute `status'")
- self.assertIsInstance(exc.code, tuple)
--- a/testing/marionette/harness/marionette/tests/unit/test_marionette.py
+++ b/testing/marionette/harness/marionette/tests/unit/test_marionette.py
@@ -26,50 +26,16 @@ class TestMarionette(MarionetteTestCase)
"""Test that wait_for_port doesn't run into a timeout if instance is not running."""
self.marionette.quit()
self.assertIsNotNone(self.marionette.instance.runner.returncode)
start_time = time.time()
self.assertFalse(self.marionette.wait_for_port(timeout=5))
self.assertLess(time.time() - start_time, 5)
-class TestProtocol1Errors(MarionetteTestCase):
- def setUp(self):
- MarionetteTestCase.setUp(self)
- self.op = self.marionette.protocol
- self.marionette.protocol = 1
-
- def tearDown(self):
- self.marionette.protocol = self.op
- MarionetteTestCase.tearDown(self)
-
- def test_malformed_packet(self):
- for t in [{}, {"error": None}]:
- with self.assertRaisesRegexp(errors.MarionetteException, "Malformed packet"):
- self.marionette._handle_error(t)
-
- def test_known_error_code(self):
- with self.assertRaises(errors.NoSuchElementException):
- self.marionette._handle_error(
- {"error": {"status": errors.NoSuchElementException.code[0]}})
-
- def test_known_error_status(self):
- with self.assertRaises(errors.NoSuchElementException):
- self.marionette._handle_error(
- {"error": {"status": errors.NoSuchElementException.status}})
-
- def test_unknown_error_code(self):
- with self.assertRaises(errors.MarionetteException):
- self.marionette._handle_error({"error": {"status": 123456}})
-
- def test_unknown_error_status(self):
- with self.assertRaises(errors.MarionetteException):
- self.marionette._handle_error({"error": {"status": "barbera"}})
-
-
class TestProtocol2Errors(MarionetteTestCase):
def setUp(self):
MarionetteTestCase.setUp(self)
self.op = self.marionette.protocol
self.marionette.protocol = 2
def tearDown(self):
self.marionette.protocol = self.op
@@ -79,35 +45,21 @@ class TestProtocol2Errors(MarionetteTest
req = ["error", "message", "stacktrace"]
ps = []
for p in [p for i in range(0, len(req) + 1) for p in itertools.permutations(req, i)]:
ps.append(dict((x, None) for x in p))
for p in filter(lambda p: len(p) < 3, ps):
self.assertRaises(KeyError, self.marionette._handle_error, p)
- def test_known_error_code(self):
- with self.assertRaises(errors.NoSuchElementException):
- self.marionette._handle_error(
- {"error": errors.NoSuchElementException.code[0],
- "message": None,
- "stacktrace": None})
-
def test_known_error_status(self):
with self.assertRaises(errors.NoSuchElementException):
self.marionette._handle_error(
{"error": errors.NoSuchElementException.status,
"message": None,
"stacktrace": None})
- def test_unknown_error_code(self):
- with self.assertRaises(errors.MarionetteException):
- self.marionette._handle_error(
- {"error": 123456,
- "message": None,
- "stacktrace": None})
-
def test_unknown_error_status(self):
with self.assertRaises(errors.MarionetteException):
self.marionette._handle_error(
{"error": "barbera",
"message": None,
"stacktrace": None})