17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch# found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry import decorators 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfrom telemetry.core import util 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfrom telemetry.page.actions import play 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfrom telemetry.unittest import tab_test_case 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 11a3f7b4e666c476898878fa745f637129375cd889Ben MurdochAUDIO_1_PLAYING_CHECK = 'window.__hasEventCompleted("#audio_1", "playing");' 12a3f7b4e666c476898878fa745f637129375cd889Ben MurdochVIDEO_1_PLAYING_CHECK = 'window.__hasEventCompleted("#video_1", "playing");' 13a3f7b4e666c476898878fa745f637129375cd889Ben MurdochVIDEO_1_ENDED_CHECK = 'window.__hasEventCompleted("#video_1", "ended");' 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass PlayActionTest(tab_test_case.TabTestCase): 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def setUp(self): 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch tab_test_case.TabTestCase.setUp(self) 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) self.Navigate('video_test.html') 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @decorators.Disabled('android') 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def testPlayWithNoSelector(self): 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """Tests that with no selector Play action plays first video element.""" 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch data = {'wait_for_playing': True} 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch action = play.PlayAction(data) 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action.WillRunAction(self._tab) 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # Both videos not playing before running action. 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action.RunAction(self._tab) 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # Assert only first video has played. 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @decorators.Disabled('android') 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def testPlayWithVideoSelector(self): 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """Tests that Play action plays video element matching selector.""" 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch data = {'selector': '#video_1', 'wait_for_playing': True} 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch action = play.PlayAction(data) 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action.WillRunAction(self._tab) 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # Both videos not playing before running action. 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action.RunAction(self._tab) 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # Assert only video matching selector has played. 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @decorators.Disabled('android') 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def testPlayWithAllSelector(self): 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """Tests that Play action plays all video elements with selector='all'.""" 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch data = {'selector': 'all', 'wait_for_playing': True} 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch action = play.PlayAction(data) 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action.WillRunAction(self._tab) 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # Both videos not playing before running action. 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action.RunAction(self._tab) 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # Assert all media elements played. 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertTrue(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) # http://crbug.com/273887 65424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) def testPlayWaitForPlayTimeout(self): 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """Tests that wait_for_playing timeouts if video does not play.""" 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch data = {'selector': '#video_1', 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 'wait_for_playing': True, 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 'wait_timeout': 1} 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch action = play.PlayAction(data) 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action.WillRunAction(self._tab) 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self._tab.EvaluateJavaScript('document.getElementById("video_1").src = ""') 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) self.assertRaises(util.TimeoutException, action.RunAction, self._tab) 757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @decorators.Disabled('android') 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def testPlayWaitForEnded(self): 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """Tests that wait_for_ended waits for video to end.""" 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch data = {'selector': '#video_1', 'wait_for_ended': True} 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch action = play.PlayAction(data) 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action.WillRunAction(self._tab) 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # Assert video not playing before running action. 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action.RunAction(self._tab) 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # Assert video ended. 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def testPlayWithoutWaitForEnded(self): 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """Tests that wait_for_ended waits for video to end.""" 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch data = {'selector': '#video_1', 'wait_for_ended': False} 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch action = play.PlayAction(data) 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action.WillRunAction(self._tab) 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # Assert video not playing before running action. 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action.RunAction(self._tab) 987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # Assert video did not end. 997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch def testPlayWaitForEndedTimeout(self): 1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """Tests that action raises exception if timeout is reached.""" 1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch data = {'selector': '#video_1', 'wait_for_ended': True, 'wait_timeout': 1} 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch action = play.PlayAction(data) 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) action.WillRunAction(self._tab) 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # Assert video not playing before running action. 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) self.assertRaises(util.TimeoutException, action.RunAction, self._tab) 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch # Assert video did not end. 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) 112