blob: e3a3286a78d7e13e24011a549b43594d5a0081c6 [file] [log] [blame]
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from telemetry.core import util
from telemetry.page.actions import seek
from telemetry.unittest import tab_test_case
AUDIO_1_SEEKED_CHECK = 'window.__hasEventCompleted("#audio_1", "seeked");'
VIDEO_1_SEEKED_CHECK = 'window.__hasEventCompleted("#video_1", "seeked");'
class SeekActionTest(tab_test_case.TabTestCase):
def setUp(self):
tab_test_case.TabTestCase.setUp(self)
self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
self._tab.Navigate(self._browser.http_server.UrlOf('video_test.html'))
self._tab.WaitForDocumentReadyStateToBeComplete()
def testSeekWithNoSelector(self):
"""Tests that with no selector Seek action seeks first media element."""
data = {'wait_for_seeked': True, 'seek_time': 1}
action = seek.SeekAction(data)
action.WillRunAction(None, self._tab)
action.RunAction(None, self._tab, None)
# Assert only first video has played.
self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
def testSeekWithVideoSelector(self):
"""Tests that Seek action seeks video element matching selector."""
data = {'selector': '#video_1', 'wait_for_seeked': True, 'seek_time': 1}
action = seek.SeekAction(data)
action.WillRunAction(None, self._tab)
# Both videos not playing before running action.
self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
action.RunAction(None, self._tab, None)
# Assert only video matching selector has played.
self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
def testSeekWithAllSelector(self):
"""Tests that Seek action seeks all video elements with selector='all'."""
data = {'selector': 'all', 'wait_for_seeked': True, 'seek_time': 1}
action = seek.SeekAction(data)
action.WillRunAction(None, self._tab)
# Both videos not playing before running action.
self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
action.RunAction(None, self._tab, None)
# Assert all media elements played.
self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
self.assertTrue(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
# http://crbug.com/273887
def testSeekWaitForSeekTimeout(self):
"""Tests that wait_for_seeked timeouts if video does not seek."""
data = {'selector': '#video_1',
'wait_for_seeked': True,
'wait_timeout': 1,
'seek_time': 1}
action = seek.SeekAction(data)
action.WillRunAction(None, self._tab)
self._tab.EvaluateJavaScript('document.getElementById("video_1").src = ""')
self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
self.assertRaises(util.TimeoutException, action.RunAction, None, self._tab,
None)
def testSeekWithoutSeekTime(self):
"""Tests that seek action fails with no seek time."""
data = {'wait_for_seeked': True}
action = seek.SeekAction(data)
action.WillRunAction(None, self._tab)
self.assertRaises(AssertionError, action.RunAction, None, self._tab,
None)