aboutsummaryrefslogtreecommitdiff
path: root/catapult/telemetry/telemetry/internal/actions/key_event_unittest.py
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/telemetry/telemetry/internal/actions/key_event_unittest.py')
-rw-r--r--catapult/telemetry/telemetry/internal/actions/key_event_unittest.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/catapult/telemetry/telemetry/internal/actions/key_event_unittest.py b/catapult/telemetry/telemetry/internal/actions/key_event_unittest.py
new file mode 100644
index 00000000..7999a637
--- /dev/null
+++ b/catapult/telemetry/telemetry/internal/actions/key_event_unittest.py
@@ -0,0 +1,89 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import time
+
+from telemetry import decorators
+from telemetry.internal.actions import key_event
+from telemetry.internal.actions import utils
+from telemetry.testing import tab_test_case
+
+
+class KeyPressActionTest(tab_test_case.TabTestCase):
+
+ @property
+ def _scroll_position(self):
+ return self._tab.EvaluateJavaScript(
+ 'document.documentElement.scrollTop || document.body.scrollTop')
+
+ @property
+ def _window_height(self):
+ return self._tab.EvaluateJavaScript('__GestureCommon_GetWindowHeight()')
+
+ def _PressKey(self, key):
+ action = key_event.KeyPressAction(key)
+ action.WillRunAction(self._tab)
+ action.RunAction(self._tab)
+
+ def setUp(self):
+ tab_test_case.TabTestCase.setUp(self)
+ self.Navigate('blank.html')
+ utils.InjectJavaScript(self._tab, 'gesture_common.js')
+
+ # https://github.com/catapult-project/catapult/issues/3099
+ @decorators.Disabled('android')
+ def testPressEndAndHome(self):
+ # Make page taller than the window so it's scrollable.
+ self._tab.ExecuteJavaScript('document.body.style.height ='
+ '(3 * __GestureCommon_GetWindowHeight() + 1) + "px";')
+
+ # Check that the browser is currently showing the top of the page and that
+ # the page has non-trivial height.
+ self.assertEquals(0, self._scroll_position)
+ self.assertLess(50, self._window_height)
+
+ self._PressKey('End')
+
+ # Scroll happens *after* key press returns, so we need to wait a little.
+ time.sleep(1)
+
+ # We can only expect the bottom scroll position to be approximatly equal.
+ self.assertAlmostEqual(2 * self._window_height, self._scroll_position,
+ delta=20)
+
+ self._PressKey('Home')
+
+ # Scroll happens *after* key press returns, so we need to wait a little.
+ time.sleep(1)
+
+ self.assertEquals(self._scroll_position, 0)
+
+ def testTextEntry(self):
+ # Add an input box to the page.
+ self._tab.ExecuteJavaScript(
+ '(function() {'
+ ' var elem = document.createElement("textarea");'
+ ' document.body.appendChild(elem);'
+ ' elem.focus();'
+ '})();')
+
+ # Simulate typing a sentence.
+ for char in 'Hello, World!':
+ self._PressKey(char)
+
+ # Make changes to the sentence using special keys.
+ for _ in xrange(6):
+ self._PressKey('ArrowLeft')
+ self._PressKey('Backspace')
+ self._PressKey('Return')
+
+ # Check that the contents of the textarea is correct. It might take a second
+ # until all keystrokes have been handled by the browser (crbug.com/630017).
+ self._tab.WaitForJavaScriptExpression(
+ 'document.querySelector("textarea").value === "Hello,\\nWorld!"',
+ timeout=1)
+
+ def testPressUnknownKey(self):
+ with self.assertRaises(ValueError):
+ self._PressKey('UnknownKeyName')