test_transport.py (3549B)
1 # This Source Code Form is subject to the terms of the Mozilla Public 2 # License, v. 2.0. If a copy of the MPL was not distributed with this 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5 import json 6 7 from marionette_driver.transport import Command, Response 8 9 from marionette_harness import MarionetteTestCase 10 11 12 get_current_url = ("getCurrentUrl", None) 13 execute_script = ("executeScript", {"script": "return 42"}) 14 15 16 class TestMessageSequencing(MarionetteTestCase): 17 @property 18 def last_id(self): 19 return self.marionette.client.last_id 20 21 @last_id.setter 22 def last_id(self, new_id): 23 self.marionette.client.last_id = new_id 24 25 def send(self, name, params): 26 self.last_id = self.last_id + 1 27 cmd = Command(self.last_id, name, params) 28 self.marionette.client.send(cmd) 29 return self.last_id 30 31 32 class MessageTestCase(MarionetteTestCase): 33 def assert_attr(self, obj, attr): 34 self.assertTrue( 35 hasattr(obj, attr), "object does not have attribute {}".format(attr) 36 ) 37 38 39 class TestCommand(MessageTestCase): 40 def create(self, msgid="msgid", name="name", params="params"): 41 return Command(msgid, name, params) 42 43 def test_initialise(self): 44 cmd = self.create() 45 self.assert_attr(cmd, "id") 46 self.assert_attr(cmd, "name") 47 self.assert_attr(cmd, "params") 48 self.assertEqual("msgid", cmd.id) 49 self.assertEqual("name", cmd.name) 50 self.assertEqual("params", cmd.params) 51 52 def test_stringify(self): 53 cmd = self.create() 54 string = str(cmd) 55 self.assertIn("Command", string) 56 self.assertIn("id=msgid", string) 57 self.assertIn("name=name", string) 58 self.assertIn("params=params", string) 59 60 def test_to_msg(self): 61 cmd = self.create() 62 msg = json.loads(cmd.to_msg()) 63 self.assertEqual(msg[0], Command.TYPE) 64 self.assertEqual(msg[1], "msgid") 65 self.assertEqual(msg[2], "name") 66 self.assertEqual(msg[3], "params") 67 68 def test_from_msg(self): 69 msg = [Command.TYPE, "msgid", "name", "params"] 70 cmd = Command.from_msg(msg) 71 self.assertEqual(msg[1], cmd.id) 72 self.assertEqual(msg[2], cmd.name) 73 self.assertEqual(msg[3], cmd.params) 74 75 76 class TestResponse(MessageTestCase): 77 def create(self, msgid="msgid", error="error", result="result"): 78 return Response(msgid, error, result) 79 80 def test_initialise(self): 81 resp = self.create() 82 self.assert_attr(resp, "id") 83 self.assert_attr(resp, "error") 84 self.assert_attr(resp, "result") 85 self.assertEqual("msgid", resp.id) 86 self.assertEqual("error", resp.error) 87 self.assertEqual("result", resp.result) 88 89 def test_stringify(self): 90 resp = self.create() 91 string = str(resp) 92 self.assertIn("Response", string) 93 self.assertIn("id=msgid", string) 94 self.assertIn("error=error", string) 95 self.assertIn("result=result", string) 96 97 def test_to_msg(self): 98 resp = self.create() 99 msg = json.loads(resp.to_msg()) 100 self.assertEqual(msg[0], Response.TYPE) 101 self.assertEqual(msg[1], "msgid") 102 self.assertEqual(msg[2], "error") 103 self.assertEqual(msg[3], "result") 104 105 def test_from_msg(self): 106 msg = [Response.TYPE, "msgid", "error", "result"] 107 resp = Response.from_msg(msg) 108 self.assertEqual(msg[1], resp.id) 109 self.assertEqual(msg[2], resp.error) 110 self.assertEqual(msg[3], resp.result)