1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 from telemetry.core import util
6 from telemetry.page.actions import loop
7 from telemetry.unittest import tab_test_case
9 AUDIO_1_LOOP_CHECK = 'window.__hasEventCompleted("#audio_1", "loop");'
10 VIDEO_1_LOOP_CHECK = 'window.__hasEventCompleted("#video_1", "loop");'
13 class LoopActionTest(tab_test_case.TabTestCase):
16 tab_test_case.TabTestCase.setUp(self)
17 self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
18 self._tab.Navigate(self._browser.http_server.UrlOf('video_test.html'))
19 self._tab.WaitForDocumentReadyStateToBeComplete()
21 def testLoopWithNoSelector(self):
22 """Tests that with no selector Loop action loops first media element."""
23 data = {'selector': '#video_1', 'loop_count': 2}
24 action = loop.LoopAction(data)
25 action.WillRunAction(None, self._tab)
26 action.RunAction(None, self._tab, None)
27 # Assert only first video has played.
28 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_LOOP_CHECK))
29 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_LOOP_CHECK))
31 def testLoopWithAllSelector(self):
32 """Tests that Loop action loops all video elements with selector='all'."""
33 data = {'selector': 'all', 'loop_count': 2}
34 action = loop.LoopAction(data)
35 action.WillRunAction(None, self._tab)
36 # Both videos not playing before running action.
37 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_LOOP_CHECK))
38 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_LOOP_CHECK))
39 action.RunAction(None, self._tab, None)
40 # Assert all media elements played.
41 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_LOOP_CHECK))
42 self.assertTrue(self._tab.EvaluateJavaScript(AUDIO_1_LOOP_CHECK))
44 def testLoopWaitForLoopTimeout(self):
45 """Tests that wait_for_loop timeouts if video does not loop."""
46 data = {'selector': '#video_1',
49 action = loop.LoopAction(data)
50 action.WillRunAction(None, self._tab)
51 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_LOOP_CHECK))
52 self.assertRaises(util.TimeoutException, action.RunAction, None, self._tab,
55 def testLoopWithoutLoopCount(self):
56 """Tests that loop action fails with no loop count."""
58 action = loop.LoopAction(data)
59 action.WillRunAction(None, self._tab)
60 self.assertRaises(AssertionError, action.RunAction, None, self._tab, None)