Upstream version 6.35.121.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / page / actions / play_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 play
7 from telemetry.unittest import tab_test_case
8
9 AUDIO_1_PLAYING_CHECK = 'window.__hasEventCompleted("#audio_1", "playing");'
10 VIDEO_1_PLAYING_CHECK = 'window.__hasEventCompleted("#video_1", "playing");'
11 VIDEO_1_ENDED_CHECK = 'window.__hasEventCompleted("#video_1", "ended");'
12
13
14 class PlayActionTest(tab_test_case.TabTestCase):
15
16   def setUp(self):
17     tab_test_case.TabTestCase.setUp(self)
18     self.Navigate('video_test.html')
19
20   def testPlayWithNoSelector(self):
21     """Tests that with no selector Play action plays first video element."""
22     data = {'wait_for_playing': True}
23     action = play.PlayAction(data)
24     action.WillRunAction(None, self._tab)
25     # Both videos not playing before running action.
26     self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK))
27     self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK))
28     action.RunAction(None, self._tab)
29     # Assert only first video has played.
30     self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK))
31     self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK))
32
33   def testPlayWithVideoSelector(self):
34     """Tests that Play action plays video element matching selector."""
35     data = {'selector': '#video_1', 'wait_for_playing': True}
36     action = play.PlayAction(data)
37     action.WillRunAction(None, self._tab)
38     # Both videos not playing before running action.
39     self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK))
40     self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK))
41     action.RunAction(None, self._tab)
42     # Assert only video matching selector has played.
43     self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK))
44     self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK))
45
46   def testPlayWithAllSelector(self):
47     """Tests that Play action plays all video elements with selector='all'."""
48     data = {'selector': 'all', 'wait_for_playing': True}
49     action = play.PlayAction(data)
50     action.WillRunAction(None, self._tab)
51     # Both videos not playing before running action.
52     self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK))
53     self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK))
54     action.RunAction(None, self._tab)
55     # Assert all media elements played.
56     self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK))
57     self.assertTrue(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK))
58
59   # http://crbug.com/273887
60   def testPlayWaitForPlayTimeout(self):
61     """Tests that wait_for_playing timeouts if video does not play."""
62     data = {'selector': '#video_1',
63             'wait_for_playing': True,
64             'wait_timeout': 1}
65     action = play.PlayAction(data)
66     action.WillRunAction(None, self._tab)
67     self._tab.EvaluateJavaScript('document.getElementById("video_1").src = ""')
68     self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK))
69     self.assertRaises(util.TimeoutException, action.RunAction, None, self._tab)
70
71   def testPlayWaitForEnded(self):
72     """Tests that wait_for_ended waits for video to end."""
73     data = {'selector': '#video_1', 'wait_for_ended': True}
74     action = play.PlayAction(data)
75     action.WillRunAction(None, self._tab)
76     # Assert video not playing before running action.
77     self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK))
78     self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK))
79     action.RunAction(None, self._tab)
80     # Assert video ended.
81     self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK))
82
83   def testPlayWithoutWaitForEnded(self):
84     """Tests that wait_for_ended waits for video to end."""
85     data = {'selector': '#video_1', 'wait_for_ended': False}
86     action = play.PlayAction(data)
87     action.WillRunAction(None, self._tab)
88     # Assert video not playing before running action.
89     self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK))
90     self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK))
91     action.RunAction(None, self._tab)
92     # Assert video did not end.
93     self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK))
94
95   def testPlayWaitForEndedTimeout(self):
96     """Tests that action raises exception if timeout is reached."""
97     data = {'selector': '#video_1', 'wait_for_ended': True, 'wait_timeout': 1}
98     action = play.PlayAction(data)
99     action.WillRunAction(None, self._tab)
100     # Assert video not playing before running action.
101     self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK))
102     self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK))
103     self.assertRaises(util.TimeoutException, action.RunAction, None, self._tab)
104     # Assert video did not end.
105     self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK))