OLD | NEW |
(Empty) | |
| 1 # Copyright (c) 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 import os |
| 6 |
| 7 from telemetry.core import util |
| 8 from telemetry.page.actions import play |
| 9 from telemetry.unittest import tab_test_case |
| 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 unittest_data_dir = os.path.join(os.path.dirname(__file__), |
| 21 '..', '..', '..', 'unittest_data') |
| 22 self._browser.SetHTTPServerDirectories(unittest_data_dir) |
| 23 self._tab.Navigate(self._browser.http_server.UrlOf('video_test.html')) |
| 24 self._tab.WaitForDocumentReadyStateToBeComplete() |
| 25 |
| 26 def testPlayWithNoSelector(self): |
| 27 """Tests that with no selector Play action plays first video element.""" |
| 28 data = {'wait_for_playing': True} |
| 29 action = play.PlayAction(data) |
| 30 action.WillRunAction(None, self._tab) |
| 31 # Both videos not playing before running action. |
| 32 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) |
| 33 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) |
| 34 action.RunAction(None, self._tab, None) |
| 35 # Assert only first video has played. |
| 36 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) |
| 37 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) |
| 38 |
| 39 def testPlayWithVideoSelector(self): |
| 40 """Tests that Play action plays video element matching selector.""" |
| 41 data = {'selector': '#video_1', 'wait_for_playing': True} |
| 42 action = play.PlayAction(data) |
| 43 action.WillRunAction(None, self._tab) |
| 44 # Both videos not playing before running action. |
| 45 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) |
| 46 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) |
| 47 action.RunAction(None, self._tab, None) |
| 48 # Assert only video matching selector has played. |
| 49 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) |
| 50 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) |
| 51 |
| 52 def testPlayWithAllSelector(self): |
| 53 """Tests that Play action plays all video elements with selector='all'.""" |
| 54 data = {'selector': 'all', 'wait_for_playing': True} |
| 55 action = play.PlayAction(data) |
| 56 action.WillRunAction(None, self._tab) |
| 57 # Both videos not playing before running action. |
| 58 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) |
| 59 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) |
| 60 action.RunAction(None, self._tab, None) |
| 61 # Assert all media elements played. |
| 62 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) |
| 63 self.assertTrue(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) |
| 64 |
| 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 None) |
| 76 |
| 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, None) |
| 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, None) |
| 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 None) |
| 111 # Assert video did not end. |
| 112 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) |
OLD | NEW |