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 seek
7 from telemetry.unittest import tab_test_case
8 from telemetry.unittest import test
11 AUDIO_1_SEEKED_CHECK = 'window.__hasEventCompleted("#audio_1", "seeked");'
12 VIDEO_1_SEEKED_CHECK = 'window.__hasEventCompleted("#video_1", "seeked");'
15 class SeekActionTest(tab_test_case.TabTestCase):
18 tab_test_case.TabTestCase.setUp(self)
19 self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
20 self._tab.Navigate(self._browser.http_server.UrlOf('video_test.html'))
21 self._tab.WaitForDocumentReadyStateToBeComplete()
23 @test.Disabled('chromeos')
24 def testSeekWithNoSelector(self):
25 """Tests that with no selector Seek action seeks first media element."""
26 data = {'wait_for_seeked': True, 'seek_time': 1}
27 action = seek.SeekAction(data)
28 action.WillRunAction(None, self._tab)
29 action.RunAction(None, self._tab, None)
30 # Assert only first video has played.
31 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
32 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
34 @test.Disabled('chromeos')
35 def testSeekWithVideoSelector(self):
36 """Tests that Seek action seeks video element matching selector."""
37 data = {'selector': '#video_1', 'wait_for_seeked': True, 'seek_time': 1}
38 action = seek.SeekAction(data)
39 action.WillRunAction(None, self._tab)
40 # Both videos not playing before running action.
41 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
42 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
43 action.RunAction(None, self._tab, None)
44 # Assert only video matching selector has played.
45 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
46 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
48 @test.Disabled('chromeos')
49 def testSeekWithAllSelector(self):
50 """Tests that Seek action seeks all video elements with selector='all'."""
51 data = {'selector': 'all', 'wait_for_seeked': True, 'seek_time': 1}
52 action = seek.SeekAction(data)
53 action.WillRunAction(None, self._tab)
54 # Both videos not playing before running action.
55 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
56 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
57 action.RunAction(None, self._tab, None)
58 # Assert all media elements played.
59 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
60 self.assertTrue(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
62 @test.Disabled('chromeos') # http://crbug.com/273887
63 def testSeekWaitForSeekTimeout(self):
64 """Tests that wait_for_seeked timeouts if video does not seek."""
65 data = {'selector': '#video_1',
66 'wait_for_seeked': True,
69 action = seek.SeekAction(data)
70 action.WillRunAction(None, self._tab)
71 self._tab.EvaluateJavaScript('document.getElementById("video_1").src = ""')
72 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
73 self.assertRaises(util.TimeoutException, action.RunAction, None, self._tab,
76 def testSeekWithoutSeekTime(self):
77 """Tests that seek action fails with no seek time."""
78 data = {'wait_for_seeked': True}
79 action = seek.SeekAction(data)
80 action.WillRunAction(None, self._tab)
81 self.assertRaises(AssertionError, action.RunAction, None, self._tab,