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