#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
-using ::testing::Eq;
-using ::testing::Exactly;
-using ::testing::Invoke;
-using ::testing::_;
-
namespace media {
// Local implementation of the TextTrack interface.
base::Unretained(this)));
}
- void DestroyTextRenderer() {
- EXPECT_CALL(*this, OnStop());
- text_renderer_->Stop(base::Bind(&TextRendererTest::OnStop,
- base::Unretained(this)));
- message_loop_.RunUntilIdle();
-
+ void Destroy() {
text_renderer_.reset();
- text_track_streams_.clear();
+ message_loop_.RunUntilIdle();
}
void AddTextTrack(TextKind kind,
}
void Play() {
- EXPECT_CALL(*this, OnPlay());
- text_renderer_->Play(base::Bind(&TextRendererTest::OnPlay,
- base::Unretained(this)));
- message_loop_.RunUntilIdle();
+ text_renderer_->StartPlaying();
}
void Pause() {
base::Unretained(this)));
}
- void Stop() {
- text_renderer_->Stop(base::Bind(&TextRendererTest::OnStop,
- base::Unretained(this)));
- message_loop_.RunUntilIdle();
- }
-
void ExpectRead(size_t idx) {
FakeTextTrackStream* const stream = text_track_streams_[idx];
EXPECT_CALL(*stream, OnRead());
}
MOCK_METHOD0(OnEnd, void());
- MOCK_METHOD0(OnStop, void());
- MOCK_METHOD0(OnPlay, void());
MOCK_METHOD0(OnPause, void());
MOCK_METHOD0(OnFlush, void());
- scoped_ptr<TextRenderer> text_renderer_;
base::MessageLoop message_loop_;
typedef ScopedVector<FakeTextTrackStream> TextTrackStreams;
typedef std::vector<FakeTextTrack*> TextTracks;
TextTracks text_tracks_;
+ scoped_ptr<TextRenderer> text_renderer_;
+
private:
DISALLOW_COPY_AND_ASSIGN(TextRendererTest);
};
text_renderer_.reset();
}
-TEST_F(TextRendererTest, TestStop) {
+TEST_F(TextRendererTest, Create) {
CreateTextRenderer();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTextTrackOnly_OneTrack) {
CreateTextRenderer();
AddTextTrack(kTextSubtitles, "", "", false);
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTextTrackOnly_TwoTracks) {
CreateTextRenderer();
AddTextTrack(kTextSubtitles, "track 1", "", false);
AddTextTrack(kTextSubtitles, "track 2", "", false);
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayOnly) {
CreateTextRenderer();
Play();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackBeforePlay_OneTrack) {
AddTextTrack(kTextSubtitles, "", "", true);
Play();
AbortPendingReads();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackBeforePlay_TwoTracks) {
AddTextTrack(kTextSubtitles, "2", "", true);
Play();
AbortPendingReads();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackAfterPlay_OneTrackAfter) {
Play();
AddTextTrack(kTextSubtitles, "", "", true);
AbortPendingReads();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackAfterPlay_TwoTracksAfter) {
AddTextTrack(kTextSubtitles, "1", "", true);
AddTextTrack(kTextSubtitles, "2", "", true);
AbortPendingReads();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackAfterPlay_OneTrackBeforeOneTrackAfter) {
Play();
AddTextTrack(kTextSubtitles, "2", "", true);
AbortPendingReads();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayAddCue_OneTrack) {
ExpectRead(0);
SendCues(true);
AbortPendingReads();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayAddCue_TwoTracks) {
ExpectRead(1);
SendCues(true);
AbortPendingReads();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosOnly_OneTrack) {
Play();
EXPECT_CALL(*this, OnEnd());
SendEosNotifications();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosOnly_TwoTracks) {
Play();
EXPECT_CALL(*this, OnEnd());
SendEosNotifications();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayCueEos_OneTrack) {
SendCues(true);
EXPECT_CALL(*this, OnEnd());
SendEosNotifications();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayCueEos_TwoTracks) {
SendCues(true);
EXPECT_CALL(*this, OnEnd());
SendEosNotifications();
- DestroyTextRenderer();
}
-TEST_F(TextRendererTest, StopPending_OneTrack) {
+TEST_F(TextRendererTest, DestroyPending_OneTrack) {
CreateTextRenderer();
AddTextTrack(kTextSubtitles, "", "", true);
Play();
- Stop();
- EXPECT_CALL(*this, OnStop());
+ Destroy();
SendEosNotifications();
- text_renderer_.reset();
- text_track_streams_.clear();
}
-TEST_F(TextRendererTest, StopPending_TwoTracks) {
+TEST_F(TextRendererTest, DestroyPending_TwoTracks) {
CreateTextRenderer();
AddTextTrack(kTextSubtitles, "1", "", true);
AddTextTrack(kTextSubtitles, "2", "", true);
Play();
- Stop();
- EXPECT_CALL(*this, OnStop());
+ Destroy();
SendEosNotifications();
- text_renderer_.reset();
- text_track_streams_.clear();
}
TEST_F(TextRendererTest, PlayPause_OneTrack) {
AbortPendingReads();
EXPECT_CALL(*this, OnPause());
Pause();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayPause_TwoTracks) {
AbortPendingReads();
EXPECT_CALL(*this, OnPause());
Pause();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPausePending_OneTrack) {
Pause();
EXPECT_CALL(*this, OnPause());
SendEosNotifications();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPausePending_TwoTracks) {
Pause();
EXPECT_CALL(*this, OnPause());
SendEosNotifications();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayCuePausePending_OneTrack) {
Pause();
EXPECT_CALL(*this, OnPause());
SendCues(true);
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayCuePausePending_TwoTracks) {
Pause();
EXPECT_CALL(*this, OnPause());
SendCues(true);
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPause_OneTrack) {
SendEosNotifications();
EXPECT_CALL(*this, OnPause());
Pause();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPause_TwoTracks) {
SendEosNotifications();
EXPECT_CALL(*this, OnPause());
Pause();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPause_SplitEos) {
SendEosNotification(1);
EXPECT_CALL(*this, OnPause());
Pause();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosFlush_OneTrack) {
Play();
EXPECT_CALL(*this, OnEnd());
SendEosNotifications();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosFlush_TwoTracks) {
Play();
EXPECT_CALL(*this, OnEnd());
SendEosNotifications();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTextTrackOnlyRemove_OneTrack) {
CreateTextRenderer();
AddTextTrack(kTextSubtitles, "", "", false);
EXPECT_TRUE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTextTrackOnlyRemove_TwoTracks) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackBeforePlayRemove_OneTrack) {
AbortPendingReads();
RemoveTextTrack(0);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackBeforePlayRemove_TwoTracks) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackBeforePlayRemove_SeparateCancel) {
AbortPendingRead(1);
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackBeforePlayRemove_RemoveOneThenPlay) {
AbortPendingRead(1);
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackBeforePlayRemove_RemoveTwoThenPlay) {
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
Play();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackAfterPlayRemove_OneTrack) {
AbortPendingReads();
RemoveTextTrack(0);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackAfterPlayRemove_TwoTracks) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackAfterPlayRemove_SplitCancel) {
AbortPendingRead(1);
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddTrackAfterPlayRemove_SplitAdd) {
AbortPendingRead(1);
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayAddCueRemove_OneTrack) {
AbortPendingReads();
RemoveTextTrack(0);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayAddCueRemove_TwoTracks) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosOnlyRemove_OneTrack) {
SendEosNotifications();
RemoveTextTrack(0);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosOnlyRemove_TwoTracks) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayCueEosRemove_OneTrack) {
SendEosNotifications();
RemoveTextTrack(0);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayCueEosRemove_TwoTracks) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
-}
-
-TEST_F(TextRendererTest, TestStopPendingRemove_OneTrack) {
- CreateTextRenderer();
- AddTextTrack(kTextSubtitles, "", "", true);
- Play();
- Stop();
- EXPECT_CALL(*this, OnStop());
- SendEosNotifications();
- RemoveTextTrack(0);
- EXPECT_FALSE(text_renderer_->HasTracks());
- text_renderer_.reset();
- text_track_streams_.clear();
-}
-
-TEST_F(TextRendererTest, TestStopPendingRemove_TwoTracks) {
- CreateTextRenderer();
- AddTextTrack(kTextSubtitles, "1", "", true);
- AddTextTrack(kTextSubtitles, "2", "", true);
- Play();
- Stop();
- SendEosNotification(0);
- EXPECT_CALL(*this, OnStop());
- SendEosNotification(1);
- RemoveTextTrack(0);
- EXPECT_TRUE(text_renderer_->HasTracks());
- RemoveTextTrack(1);
- EXPECT_FALSE(text_renderer_->HasTracks());
- text_renderer_.reset();
- text_track_streams_.clear();
-}
-
-TEST_F(TextRendererTest, TestStopPendingRemove_RemoveThenSendEos) {
- CreateTextRenderer();
- AddTextTrack(kTextSubtitles, "1", "", true);
- AddTextTrack(kTextSubtitles, "2", "", true);
- Play();
- Stop();
- SendEosNotification(0);
- RemoveTextTrack(0);
- EXPECT_TRUE(text_renderer_->HasTracks());
- EXPECT_CALL(*this, OnStop());
- SendEosNotification(1);
- RemoveTextTrack(1);
- EXPECT_FALSE(text_renderer_->HasTracks());
- text_renderer_.reset();
- text_track_streams_.clear();
}
TEST_F(TextRendererTest, PlayPauseRemove_PauseThenRemove) {
Pause();
RemoveTextTrack(0);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayPauseRemove_RemoveThanPause) {
EXPECT_FALSE(text_renderer_->HasTracks());
EXPECT_CALL(*this, OnPause());
Pause();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayPause_PauseThenRemoveTwoTracks) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayPauseRemove_RemoveThenPauseTwoTracks) {
Pause();
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayPauseRemove_SplitCancel) {
Pause();
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
EXPECT_FALSE(text_renderer_->HasTracks());
EXPECT_CALL(*this, OnPause());
Pause();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPausePendingRemove_OneTrack) {
SendEosNotifications();
RemoveTextTrack(0);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPausePendingRemove_TwoTracks) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPausePendingRemove_SplitEos) {
SendEosNotification(1);
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayCuePausePendingRemove_OneTrack) {
SendCues(true);
RemoveTextTrack(0);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayCuePausePendingRemove_TwoTracks) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayCuePausePendingRemove_SplitSendCue) {
SendCue(1, true);
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPauseRemove_PauseThenRemove) {
Pause();
RemoveTextTrack(0);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPauseRemove_RemoveThenPause) {
EXPECT_FALSE(text_renderer_->HasTracks());
EXPECT_CALL(*this, OnPause());
Pause();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPause_PauseThenRemoveTwoTracks) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPause_RemovePauseRemove) {
Pause();
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPause_EosThenPause) {
Pause();
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPause_PauseLast) {
EXPECT_FALSE(text_renderer_->HasTracks());
EXPECT_CALL(*this, OnPause());
Pause();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPause_EosPauseRemove) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPause_EosRemovePause) {
Pause();
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPause_EosRemoveEosPause) {
Pause();
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosPause_EosRemoveEosRemovePause) {
EXPECT_FALSE(text_renderer_->HasTracks());
EXPECT_CALL(*this, OnPause());
Pause();
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosFlushRemove_OneTrack) {
SendEosNotifications();
RemoveTextTrack(0);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosFlushRemove_TwoTracks) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayEosFlushRemove_EosRemove) {
SendEosNotification(1);
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayShort_SendCueThenEos) {
SendCue(0, true);
EXPECT_CALL(*this, OnPause());
SendEosNotification(1);
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayShort_EosThenSendCue) {
SendEosNotification(0);
EXPECT_CALL(*this, OnPause());
SendCue(1, true);
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayShortRemove_SendEosRemove) {
EXPECT_TRUE(text_renderer_->HasTracks());
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayShortRemove_SendRemoveEos) {
SendEosNotification(1);
RemoveTextTrack(1);
EXPECT_FALSE(text_renderer_->HasTracks());
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayCuePausePendingCancel_OneTrack) {
Pause();
EXPECT_CALL(*this, OnPause());
AbortPendingRead(0);
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayCuePausePendingCancel_SendThenCancel) {
SendCue(0, true);
EXPECT_CALL(*this, OnPause());
AbortPendingRead(1);
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, PlayCuePausePendingCancel_CancelThenSend) {
AbortPendingRead(0);
EXPECT_CALL(*this, OnPause());
SendCue(1, true);
- DestroyTextRenderer();
}
-TEST_F(TextRendererTest, PlayCueStopPendingCancel_OneTrack) {
+TEST_F(TextRendererTest, PlayCueDestroyPendingCancel_OneTrack) {
CreateTextRenderer();
AddTextTrack(kTextSubtitles, "", "", true);
Play();
Pause();
- Stop();
- EXPECT_CALL(*this, OnStop());
+ EXPECT_CALL(*this, OnPause());
+ Destroy();
AbortPendingRead(0);
- text_renderer_.reset();
- text_track_streams_.clear();
}
-TEST_F(TextRendererTest, PlayCueStopPendingCancel_SendThenCancel) {
+TEST_F(TextRendererTest, PlayCueDestroyPendingCancel_SendThenCancel) {
CreateTextRenderer();
AddTextTrack(kTextSubtitles, "1", "", true);
AddTextTrack(kTextSubtitles, "2", "", true);
Play();
Pause();
- Stop();
+ EXPECT_CALL(*this, OnPause());
+ Destroy();
SendCue(0, false);
- EXPECT_CALL(*this, OnStop());
AbortPendingRead(1);
- text_renderer_.reset();
- text_track_streams_.clear();
}
-TEST_F(TextRendererTest, PlayCueStopPendingCancel_CancelThenSend) {
+TEST_F(TextRendererTest, PlayCueDestroyPendingCancel_CancelThenSend) {
CreateTextRenderer();
AddTextTrack(kTextSubtitles, "1", "", true);
AddTextTrack(kTextSubtitles, "2", "", true);
Play();
Pause();
- Stop();
+ EXPECT_CALL(*this, OnPause());
+ Destroy();
AbortPendingRead(0);
- EXPECT_CALL(*this, OnStop());
SendCue(1, false);
- text_renderer_.reset();
- text_track_streams_.clear();
}
TEST_F(TextRendererTest, AddRemoveAdd) {
Play();
EXPECT_CALL(*this, OnEnd());
SendEosNotification(1);
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddRemoveEos) {
EXPECT_TRUE(text_renderer_->HasTracks());
EXPECT_CALL(*this, OnEnd());
SendEosNotification(1);
- DestroyTextRenderer();
}
TEST_F(TextRendererTest, AddRemovePause) {
Pause();
EXPECT_CALL(*this, OnPause());
SendEosNotification(1);
- DestroyTextRenderer();
-}
-
-TEST_F(TextRendererTest, AddRemovePauseStop) {
- CreateTextRenderer();
- AddTextTrack(kTextSubtitles, "1", "", true);
- AddTextTrack(kTextSubtitles, "2", "", true);
- Play();
- AbortPendingRead(0);
- RemoveTextTrack(0);
- EXPECT_TRUE(text_renderer_->HasTracks());
- Pause();
- Stop();
- EXPECT_CALL(*this, OnStop());
- SendEosNotification(1);
- text_renderer_.reset();
- text_track_streams_.clear();
}
} // namespace media