aboutsummaryrefslogtreecommitdiff
path: root/catapult/telemetry/telemetry/internal/actions/load_media_unittest.py
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/telemetry/telemetry/internal/actions/load_media_unittest.py')
-rw-r--r--catapult/telemetry/telemetry/internal/actions/load_media_unittest.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/catapult/telemetry/telemetry/internal/actions/load_media_unittest.py b/catapult/telemetry/telemetry/internal/actions/load_media_unittest.py
new file mode 100644
index 00000000..cdb7719e
--- /dev/null
+++ b/catapult/telemetry/telemetry/internal/actions/load_media_unittest.py
@@ -0,0 +1,69 @@
+# Copyright 2015 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.
+
+from telemetry import decorators
+from telemetry.internal.actions.load_media import LoadMediaAction
+from telemetry.testing import tab_test_case
+from telemetry.util import js_template
+
+import py_utils
+
+
+class LoadMediaActionTest(tab_test_case.TabTestCase):
+
+ def setUp(self):
+ tab_test_case.TabTestCase.setUp(self)
+ self.Navigate('video_test.html')
+
+ def eventFired(self, selector, event):
+ # TODO(catapult:#3028): Render in JavaScript method when supported by API.
+ code = js_template.Render(
+ 'window.__hasEventCompleted({{ selector }}, {{ event }});',
+ selector=selector, event=event)
+ return self._tab.EvaluateJavaScript(code)
+
+ @decorators.Disabled('linux', # crbug.com/418577
+ 'chromeos') # crbug.com/632802
+ def testAwaitedEventIsConfigurable(self):
+ """It's possible to wait for different events."""
+ action = LoadMediaAction(selector='#video_1', timeout_in_seconds=0.1,
+ event_to_await='loadedmetadata')
+ action.WillRunAction(self._tab)
+ action.RunAction(self._tab)
+ self.assertTrue(self.eventFired('#video_1', 'loadedmetadata'))
+
+ @decorators.Disabled('linux') # crbug.com/418577
+ def testLoadWithNoSelector(self):
+ """With no selector the first media element is loaded."""
+ action = LoadMediaAction(timeout_in_seconds=5)
+ action.WillRunAction(self._tab)
+ action.RunAction(self._tab)
+ self.assertTrue(self.eventFired('#video_1', 'canplaythrough'))
+ self.assertFalse(self.eventFired('#audio_1', 'canplaythrough'))
+
+ @decorators.Disabled('linux') # crbug.com/418577
+ def testLoadWithSelector(self):
+ """Only the element matching the selector is loaded."""
+ action = LoadMediaAction(selector='#audio_1', timeout_in_seconds=5)
+ action.WillRunAction(self._tab)
+ action.RunAction(self._tab)
+ self.assertFalse(self.eventFired('#video_1', 'canplaythrough'))
+ self.assertTrue(self.eventFired('#audio_1', 'canplaythrough'))
+
+ @decorators.Disabled('linux') # crbug.com/418577
+ def testLoadWithAllSelector(self):
+ """Both elements are loaded with selector='all'."""
+ action = LoadMediaAction(selector='all', timeout_in_seconds=5)
+ action.WillRunAction(self._tab)
+ action.RunAction(self._tab)
+ self.assertTrue(self.eventFired('#video_1', 'canplaythrough'))
+ self.assertTrue(self.eventFired('#audio_1', 'canplaythrough'))
+
+ @decorators.Disabled('linux') # crbug.com/418577
+ def testLoadRaisesAnExceptionOnTimeout(self):
+ """The load action times out if the event does not fire."""
+ action = LoadMediaAction(selector='#video_1', timeout_in_seconds=0.1,
+ event_to_await='a_nonexistent_event')
+ action.WillRunAction(self._tab)
+ self.assertRaises(py_utils.TimeoutException, action.RunAction, self._tab)