Bug 1150527 - Remove error numbers from Marionette Python client; r?automatedtester draft
authorAndreas Tolfsen <ato@mozilla.com>
Wed, 16 Nov 2016 16:21:06 +0000
changeset 441652 8943b92a0b9d98d12f7c020dbea6bb34371a9053
parent 441645 b7f895c1dc2e91530240efbf50ac063a0f8a9cb5
child 441653 6d7ec85b0282ad448ec7075a4dd6bb3f004b62af
push id36481
push userbmo:ato@mozilla.com
push dateSun, 20 Nov 2016 15:09:54 +0000
reviewersautomatedtester
bugs1150527
milestone53.0a1
Bug 1150527 - Remove error numbers from Marionette Python client; r?automatedtester MozReview-Commit-ID: IGAdxItviaz
testing/marionette/client/marionette_driver/errors.py
testing/marionette/harness/marionette/tests/unit/test_errors.py
testing/marionette/harness/marionette/tests/unit/test_marionette.py
--- 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})