loop_unittest.py revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
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.
4
5from telemetry import decorators
6from telemetry.core import util
7from telemetry.page.actions import loop
8from telemetry.unittest import tab_test_case
9
10
11AUDIO_1_LOOP_CHECK = 'window.__hasEventCompleted("#audio_1", "loop");'
12VIDEO_1_LOOP_CHECK = 'window.__hasEventCompleted("#video_1", "loop");'
13
14
15class LoopActionTest(tab_test_case.TabTestCase):
16
17  def setUp(self):
18    tab_test_case.TabTestCase.setUp(self)
19    self.Navigate('video_test.html')
20
21  @decorators.Disabled('android')
22  def testLoopWithNoSelector(self):
23    """Tests that with no selector Loop action loops first media element."""
24    data = {'selector': '#video_1', 'loop_count': 2}
25    action = loop.LoopAction(data)
26    action.WillRunAction(None, self._tab)
27    action.RunAction(None, self._tab)
28    # Assert only first video has played.
29    self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_LOOP_CHECK))
30    self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_LOOP_CHECK))
31
32  @decorators.Disabled('android')
33  def testLoopWithAllSelector(self):
34    """Tests that Loop action loops all video elements with selector='all'."""
35    data = {'selector': 'all', 'loop_count': 2}
36    action = loop.LoopAction(data)
37    action.WillRunAction(None, self._tab)
38    # Both videos not playing before running action.
39    self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_LOOP_CHECK))
40    self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_LOOP_CHECK))
41    action.RunAction(None, self._tab)
42    # Assert all media elements played.
43    self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_LOOP_CHECK))
44    self.assertTrue(self._tab.EvaluateJavaScript(AUDIO_1_LOOP_CHECK))
45
46  @decorators.Disabled('android')
47  def testLoopWaitForLoopTimeout(self):
48    """Tests that wait_for_loop timeouts if video does not loop."""
49    data = {'selector': '#video_1',
50            'wait_timeout': 1,
51            'loop_count': 2}
52    action = loop.LoopAction(data)
53    action.WillRunAction(None, self._tab)
54    self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_LOOP_CHECK))
55    self.assertRaises(util.TimeoutException, action.RunAction, None, self._tab)
56
57  @decorators.Disabled('android')
58  def testLoopWithoutLoopCount(self):
59    """Tests that loop action fails with no loop count."""
60    data = {}
61    action = loop.LoopAction(data)
62    action.WillRunAction(None, self._tab)
63    self.assertRaises(AssertionError, action.RunAction, None, self._tab)
64