- add sources.
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / page / actions / loop_unittest.py
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
5 from telemetry.core import util
6 from telemetry.page.actions import loop
7 from telemetry.unittest import tab_test_case
8
9 AUDIO_1_LOOP_CHECK = 'window.__hasEventCompleted("#audio_1", "loop");'
10 VIDEO_1_LOOP_CHECK = 'window.__hasEventCompleted("#video_1", "loop");'
11
12
13 class LoopActionTest(tab_test_case.TabTestCase):
14
15   def setUp(self):
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()
20
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))
30
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))
43
44   def testLoopWaitForLoopTimeout(self):
45     """Tests that wait_for_loop timeouts if video does not loop."""
46     data = {'selector': '#video_1',
47             'wait_timeout': 1,
48             'loop_count': 2}
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,
53                       None)
54
55   def testLoopWithoutLoopCount(self):
56     """Tests that loop action fails with no loop count."""
57     data = {}
58     action = loop.LoopAction(data)
59     action.WillRunAction(None, self._tab)
60     self.assertRaises(AssertionError, action.RunAction, None, self._tab, None)