Index: media/base/android/media_player_bridge_unittest.cc |
diff --git a/media/base/android/media_player_bridge_unittest.cc b/media/base/android/media_player_bridge_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..73e30dd2e9154220804ba5f000b69bde37bacb46 |
--- /dev/null |
+++ b/media/base/android/media_player_bridge_unittest.cc |
@@ -0,0 +1,109 @@ |
+// Copyright 2015 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. |
+ |
+#include "base/message_loop/message_loop.h" |
+#include "media/base/android/media_player_bridge.h" |
+#include "media/base/android/media_player_manager.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace media { |
+ |
+namespace { |
+ |
+class MockMediaPlayerManager : public MediaPlayerManager { |
+ public: |
+ MOCK_METHOD0(GetMediaResourceGetter, MediaResourceGetter*()); |
+ MOCK_METHOD0(GetMediaUrlInterceptor, MediaUrlInterceptor*()); |
+ MOCK_METHOD3(OnTimeUpdate, |
+ void(int player_id, |
+ base::TimeDelta current_timestamp, |
+ base::TimeTicks current_time_ticks)); |
+ MOCK_METHOD5(OnMediaMetadataChanged, |
+ void(int player_id, |
+ base::TimeDelta duration, |
+ int width, |
+ int height, |
+ bool success)); |
+ MOCK_METHOD1(OnPlaybackComplete, void(int player_id)); |
+ MOCK_METHOD1(OnMediaInterrupted, void(int player_id)); |
+ MOCK_METHOD2(OnBufferingUpdate, void(int player_id, int percentage)); |
+ MOCK_METHOD2(OnSeekComplete, |
+ void(int player_id, const base::TimeDelta& current_time)); |
+ MOCK_METHOD2(OnError, void(int player_id, int error)); |
+ MOCK_METHOD3(OnVideoSizeChanged, void(int player_id, int width, int height)); |
+ MOCK_METHOD2(OnAudibleStateChanged, void(int player_id, bool is_audible_now)); |
+ MOCK_METHOD1(OnWaitingForDecryptionKey, void(int player_id)); |
+ MOCK_METHOD0(GetFullscreenPlayer, MediaPlayerAndroid*()); |
+ MOCK_METHOD1(GetPlayer, MediaPlayerAndroid*(int player_id)); |
+ MOCK_METHOD1(RequestPlay, bool(int player_id)); |
+ |
+ void OnMediaResourcesRequested(int player_id) {} |
+}; |
+ |
+} // anonymous namespace |
+ |
+class MediaPlayerBridgeTest : public testing::Test { |
+ public: |
+ MediaPlayerBridgeTest() |
+ : bridge_(0, |
+ GURL(), |
+ GURL(), |
+ "", |
+ false, |
+ &manager_, |
+ base::Bind(&MockMediaPlayerManager::OnMediaResourcesRequested, |
+ base::Unretained(&manager_)), |
+ GURL(), |
+ false) {} |
+ |
+ void SetCanSeekForward(bool can_seek_forward) { |
+ bridge_.can_seek_forward_ = can_seek_forward; |
+ } |
+ |
+ void SetCanSeekBackward(bool can_seek_backward) { |
+ bridge_.can_seek_backward_ = can_seek_backward; |
+ } |
+ |
+ bool SeekInternal(const base::TimeDelta& current_time, base::TimeDelta time) { |
+ return bridge_.SeekInternal(current_time, time); |
+ } |
+ |
+ private: |
+ // A message loop needs to be instantiated in order for the test to run |
+ // properly. |
+ base::MessageLoop message_loop_; |
+ MockMediaPlayerManager manager_; |
+ MediaPlayerBridge bridge_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MediaPlayerBridgeTest); |
+}; |
+ |
+TEST_F(MediaPlayerBridgeTest, PreventForwardSeekWhenItIsNotPossible) { |
+ // Simulate the Java MediaPlayerBridge reporting that forward seeks are not |
+ // possible |
+ SetCanSeekForward(false); |
+ SetCanSeekBackward(true); |
+ |
+ // If this assertion fails, seeks will be allowed which will result in a |
+ // crash because j_media_player_bridge_ cannot be properly instantiated |
+ // during this test. |
+ ASSERT_FALSE( |
+ SeekInternal(base::TimeDelta(), base::TimeDelta::FromSeconds(10))); |
+} |
+ |
+TEST_F(MediaPlayerBridgeTest, PreventBackwardSeekWhenItIsNotPossible) { |
+ // Simulate the Java MediaPlayerBridge reporting that backward seeks are not |
+ // possible |
+ SetCanSeekForward(true); |
+ SetCanSeekBackward(false); |
+ |
+ // If this assertion fails, seeks will be allowed which will result in a |
+ // crash because j_media_player_bridge_ cannot be properly instantiated |
+ // during this test. |
+ ASSERT_FALSE( |
+ SeekInternal(base::TimeDelta::FromSeconds(10), base::TimeDelta())); |
+} |
+ |
+} // namespace media |