blob: 48a9bf1fb019c0ede33f30e4f5423a668ff2b693 [file] [log] [blame]
// 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/macros.h"
#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_METHOD1(GetPlayer, MediaPlayerAndroid*(int player_id));
MOCK_METHOD3(RequestPlay,
bool(int player_id, base::TimeDelta duration, bool has_audio));
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