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