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 5from __future__ import absolute_import 6 7from six.moves.urllib.parse import quote 8 9from marionette_driver.by import By 10from marionette_driver.keys import Keys 11from marionette_harness import MarionetteTestCase, WindowManagerMixin 12 13 14def inline(doc): 15 return "data:text/html;charset=utf-8,{}".format(quote(doc)) 16 17 18class TestKeyActions(WindowManagerMixin, MarionetteTestCase): 19 def setUp(self): 20 super(TestKeyActions, self).setUp() 21 self.key_chain = self.marionette.actions.sequence("key", "keyboard_id") 22 23 if self.marionette.session_capabilities["platformName"] == "mac": 24 self.mod_key = Keys.META 25 else: 26 self.mod_key = Keys.CONTROL 27 28 test_html = self.marionette.absolute_url("keyboard.html") 29 self.marionette.navigate(test_html) 30 self.reporter_element = self.marionette.find_element(By.ID, "keyReporter") 31 self.reporter_element.click() 32 33 def tearDown(self): 34 self.marionette.actions.release() 35 36 super(TestKeyActions, self).tearDown() 37 38 @property 39 def key_reporter_value(self): 40 return self.reporter_element.get_property("value") 41 42 def test_basic_input(self): 43 self.key_chain.key_down("a").key_down("b").key_down("c").perform() 44 self.assertEqual(self.key_reporter_value, "abc") 45 46 def test_upcase_input(self): 47 self.key_chain.key_down(Keys.SHIFT).key_down("a").key_up(Keys.SHIFT).key_down( 48 "b" 49 ).key_down("c").perform() 50 self.assertEqual(self.key_reporter_value, "Abc") 51 52 def test_replace_input(self): 53 self.key_chain.key_down("a").key_down("b").key_down("c").perform() 54 self.assertEqual(self.key_reporter_value, "abc") 55 56 self.key_chain.key_down(self.mod_key).key_down("a").key_up( 57 self.mod_key 58 ).key_down("x").perform() 59 self.assertEqual(self.key_reporter_value, "x") 60 61 def test_clear_input(self): 62 self.key_chain.key_down("a").key_down("b").key_down("c").perform() 63 self.assertEqual(self.key_reporter_value, "abc") 64 65 self.key_chain.key_down(self.mod_key).key_down("a").key_down("x").perform() 66 self.assertEqual(self.key_reporter_value, "") 67 68 def test_input_with_wait(self): 69 self.key_chain.key_down("a").key_down("b").key_down("c").perform() 70 self.key_chain.key_down(self.mod_key).key_down("a").pause(250).key_down( 71 "x" 72 ).perform() 73 self.assertEqual(self.key_reporter_value, "") 74