1cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Copyright 2013 The Chromium Authors. All rights reserved.
2cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Use of this source code is governed by a BSD-style license that can be
3cef7893435aa41160dd1255c43cb8498279738ccChris Craik# found in the LICENSE file.
4cef7893435aa41160dd1255c43cb8498279738ccChris Craik
5cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.core import exceptions
6cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry import decorators
7cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.internal.actions import seek
8cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.testing import tab_test_case
9cef7893435aa41160dd1255c43cb8498279738ccChris Craik
10cef7893435aa41160dd1255c43cb8498279738ccChris CraikAUDIO_1_SEEKED_CHECK = 'window.__hasEventCompleted("#audio_1", "seeked");'
11cef7893435aa41160dd1255c43cb8498279738ccChris CraikVIDEO_1_SEEKED_CHECK = 'window.__hasEventCompleted("#video_1", "seeked");'
12cef7893435aa41160dd1255c43cb8498279738ccChris Craik
13cef7893435aa41160dd1255c43cb8498279738ccChris Craik
14cef7893435aa41160dd1255c43cb8498279738ccChris Craikclass SeekActionTest(tab_test_case.TabTestCase):
15cef7893435aa41160dd1255c43cb8498279738ccChris Craik
16cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def setUp(self):
17cef7893435aa41160dd1255c43cb8498279738ccChris Craik    tab_test_case.TabTestCase.setUp(self)
18cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.Navigate('video_test.html')
19cef7893435aa41160dd1255c43cb8498279738ccChris Craik
20cef7893435aa41160dd1255c43cb8498279738ccChris Craik  @decorators.Disabled('linux')  # crbug.com/418577
21cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def testSeekWithNoSelector(self):
22cef7893435aa41160dd1255c43cb8498279738ccChris Craik    """Tests that with no selector Seek  action seeks first media element."""
23cef7893435aa41160dd1255c43cb8498279738ccChris Craik    action = seek.SeekAction(seconds=1, timeout_in_seconds=5)
24cef7893435aa41160dd1255c43cb8498279738ccChris Craik    action.WillRunAction(self._tab)
25cef7893435aa41160dd1255c43cb8498279738ccChris Craik    action.RunAction(self._tab)
26cef7893435aa41160dd1255c43cb8498279738ccChris Craik    # Assert only first video has played.
27cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
28cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
29cef7893435aa41160dd1255c43cb8498279738ccChris Craik
30cef7893435aa41160dd1255c43cb8498279738ccChris Craik  @decorators.Disabled('linux')  # crbug.com/418577
31cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def testSeekWithVideoSelector(self):
32cef7893435aa41160dd1255c43cb8498279738ccChris Craik    """Tests that Seek action seeks video element matching selector."""
33cef7893435aa41160dd1255c43cb8498279738ccChris Craik    action = seek.SeekAction(seconds=1, selector='#video_1',
34cef7893435aa41160dd1255c43cb8498279738ccChris Craik                             timeout_in_seconds=5)
35cef7893435aa41160dd1255c43cb8498279738ccChris Craik    action.WillRunAction(self._tab)
36cef7893435aa41160dd1255c43cb8498279738ccChris Craik    # Both videos not playing before running action.
37cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
38cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
39cef7893435aa41160dd1255c43cb8498279738ccChris Craik    action.RunAction(self._tab)
40cef7893435aa41160dd1255c43cb8498279738ccChris Craik    # Assert only video matching selector has played.
41cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
42cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
43cef7893435aa41160dd1255c43cb8498279738ccChris Craik
44cef7893435aa41160dd1255c43cb8498279738ccChris Craik  @decorators.Disabled('linux')  # crbug.com/418577
45cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def testSeekWithAllSelector(self):
46cef7893435aa41160dd1255c43cb8498279738ccChris Craik    """Tests that Seek action seeks all video elements with selector='all'."""
47cef7893435aa41160dd1255c43cb8498279738ccChris Craik    action = seek.SeekAction(seconds=1, selector='all',
48cef7893435aa41160dd1255c43cb8498279738ccChris Craik                             timeout_in_seconds=5)
49cef7893435aa41160dd1255c43cb8498279738ccChris Craik    action.WillRunAction(self._tab)
50cef7893435aa41160dd1255c43cb8498279738ccChris Craik    # Both videos not playing before running action.
51cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
52cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
53cef7893435aa41160dd1255c43cb8498279738ccChris Craik    action.RunAction(self._tab)
54cef7893435aa41160dd1255c43cb8498279738ccChris Craik    # Assert all media elements played.
55cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
56cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.assertTrue(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK))
57cef7893435aa41160dd1255c43cb8498279738ccChris Craik
58cef7893435aa41160dd1255c43cb8498279738ccChris Craik  @decorators.Disabled('linux')  # crbug.com/418577
59cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def testSeekWaitForSeekTimeout(self):
60cef7893435aa41160dd1255c43cb8498279738ccChris Craik    """Tests that wait_for_seeked timeouts if video does not seek."""
61cef7893435aa41160dd1255c43cb8498279738ccChris Craik    action = seek.SeekAction(seconds=1, selector='#video_1',
62cef7893435aa41160dd1255c43cb8498279738ccChris Craik                             timeout_in_seconds=0.1)
63cef7893435aa41160dd1255c43cb8498279738ccChris Craik    action.WillRunAction(self._tab)
64cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self._tab.EvaluateJavaScript('document.getElementById("video_1").src = ""')
65cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK))
66cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self.assertRaises(exceptions.TimeoutException, action.RunAction, self._tab)
67