1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <vector>
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/bind.h"
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/callback_helpers.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_vector.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/message_loop/message_loop.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/audio_decoder_config.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/decoder_buffer.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/demuxer_stream.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/fake_text_track_stream.h"
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/text_renderer.h"
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/text_track_config.h"
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/base/video_decoder_config.h"
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "media/filters/webvtt_util.h"
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace media {
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Local implementation of the TextTrack interface.
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class FakeTextTrack : public TextTrack {
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FakeTextTrack(const base::Closure& destroy_cb,
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                const TextTrackConfig& config)
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      : destroy_cb_(destroy_cb),
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        config_(config) {
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~FakeTextTrack() {
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    destroy_cb_.Run();
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  MOCK_METHOD5(addWebVTTCue, void(const base::TimeDelta& start,
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                  const base::TimeDelta& end,
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                  const std::string& id,
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                  const std::string& content,
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                  const std::string& settings));
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  const base::Closure destroy_cb_;
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  const TextTrackConfig config_;
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FakeTextTrack);
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class TextRendererTest : public testing::Test {
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  TextRendererTest() {}
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void CreateTextRenderer() {
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    DCHECK(!text_renderer_);
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    text_renderer_.reset(
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        new TextRenderer(message_loop_.message_loop_proxy(),
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         base::Bind(&TextRendererTest::OnAddTextTrack,
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                    base::Unretained(this))));
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    text_renderer_->Initialize(base::Bind(&TextRendererTest::OnEnd,
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                          base::Unretained(this)));
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void Destroy() {
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    text_renderer_.reset();
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    message_loop_.RunUntilIdle();
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void AddTextTrack(TextKind kind,
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                    const std::string& name,
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                    const std::string& language,
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                    bool expect_read) {
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const size_t idx = text_track_streams_.size();
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    text_track_streams_.push_back(new FakeTextTrackStream);
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (expect_read)
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ExpectRead(idx);
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const TextTrackConfig config(kind, name, language, std::string());
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    text_renderer_->AddTextStream(text_track_streams_.back(), config);
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    message_loop_.RunUntilIdle();
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    EXPECT_EQ(text_tracks_.size(), text_track_streams_.size());
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    FakeTextTrack* const text_track = text_tracks_.back();
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    EXPECT_TRUE(text_track);
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    EXPECT_TRUE(text_track->config_.Matches(config));
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void OnAddTextTrack(const TextTrackConfig& config,
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      const AddTextTrackDoneCB& done_cb) {
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    base::Closure destroy_cb =
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        base::Bind(&TextRendererTest::OnDestroyTextTrack,
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                   base::Unretained(this),
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                   text_tracks_.size());
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Text track objects are owned by the text renderer, but we cache them
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // here so we can inspect them.  They get removed from our cache when the
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // text renderer deallocates them.
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    text_tracks_.push_back(new FakeTextTrack(destroy_cb, config));
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    scoped_ptr<TextTrack> text_track(text_tracks_.back());
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    done_cb.Run(text_track.Pass());
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void RemoveTextTrack(unsigned idx) {
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    FakeTextTrackStream* const stream = text_track_streams_[idx];
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    text_renderer_->RemoveTextStream(stream);
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    EXPECT_FALSE(text_tracks_[idx]);
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SatisfyPendingReads(const base::TimeDelta& start,
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                           const base::TimeDelta& duration,
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                           const std::string& id,
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                           const std::string& content,
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                           const std::string& settings) {
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    for (TextTrackStreams::iterator itr = text_track_streams_.begin();
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)         itr != text_track_streams_.end(); ++itr) {
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      (*itr)->SatisfyPendingRead(start, duration, id, content, settings);
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void AbortPendingRead(unsigned idx) {
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    FakeTextTrackStream* const stream = text_track_streams_[idx];
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    stream->AbortPendingRead();
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    message_loop_.RunUntilIdle();
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void AbortPendingReads() {
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    for (size_t idx = 0; idx < text_track_streams_.size(); ++idx) {
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      AbortPendingRead(idx);
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SendEosNotification(unsigned idx) {
133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    FakeTextTrackStream* const stream = text_track_streams_[idx];
134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    stream->SendEosNotification();
135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    message_loop_.RunUntilIdle();
136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SendEosNotifications() {
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    for (size_t idx = 0; idx < text_track_streams_.size(); ++idx) {
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      SendEosNotification(idx);
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SendCue(unsigned idx, bool expect_cue) {
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    FakeTextTrackStream* const text_stream = text_track_streams_[idx];
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const base::TimeDelta start;
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const base::TimeDelta duration = base::TimeDelta::FromSeconds(42);
149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string id = "id";
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string content = "subtitle";
151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string settings;
152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (expect_cue) {
154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      FakeTextTrack* const text_track = text_tracks_[idx];
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      EXPECT_CALL(*text_track, addWebVTTCue(start,
156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                            start + duration,
157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                            id,
158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                            content,
159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                            settings));
160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    text_stream->SatisfyPendingRead(start, duration, id, content, settings);
163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    message_loop_.RunUntilIdle();
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SendCues(bool expect_cue) {
167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    for (size_t idx = 0; idx < text_track_streams_.size(); ++idx) {
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      SendCue(idx, expect_cue);
169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void OnDestroyTextTrack(unsigned idx) {
173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    text_tracks_[idx] = NULL;
174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void Play() {
177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    text_renderer_->StartPlaying();
178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void Pause() {
181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    text_renderer_->Pause(base::Bind(&TextRendererTest::OnPause,
182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                     base::Unretained(this)));
183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    message_loop_.RunUntilIdle();
184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void Flush() {
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    EXPECT_CALL(*this, OnFlush());
188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    text_renderer_->Flush(base::Bind(&TextRendererTest::OnFlush,
189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                     base::Unretained(this)));
190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void ExpectRead(size_t idx) {
193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    FakeTextTrackStream* const stream = text_track_streams_[idx];
194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    EXPECT_CALL(*stream, OnRead());
195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  MOCK_METHOD0(OnEnd, void());
198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  MOCK_METHOD0(OnPause, void());
199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  MOCK_METHOD0(OnFlush, void());
200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  base::MessageLoop message_loop_;
202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  typedef ScopedVector<FakeTextTrackStream> TextTrackStreams;
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  TextTrackStreams text_track_streams_;
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  typedef std::vector<FakeTextTrack*> TextTracks;
207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  TextTracks text_tracks_;
208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<TextRenderer> text_renderer_;
2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TextRendererTest);
213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, CreateTextRendererNoInit) {
216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  text_renderer_.reset(
217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      new TextRenderer(message_loop_.message_loop_proxy(),
218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       base::Bind(&TextRendererTest::OnAddTextTrack,
219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                  base::Unretained(this))));
220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  text_renderer_.reset();
221f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(TextRendererTest, Create) {
224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTextTrackOnly_OneTrack) {
228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", false);
230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
232f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTextTrackOnly_TwoTracks) {
233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "track 1", "", false);
235f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "track 2", "", false);
236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayOnly) {
239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
242f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlay_OneTrack) {
244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlay_TwoTracks) {
251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlay_OneTrackAfter) {
259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlay_TwoTracksAfter) {
266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlay_OneTrackBeforeOneTrackAfter) {
274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayAddCue_OneTrack) {
282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
286f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCues(true);
287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayAddCue_TwoTracks) {
291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(1);
297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCues(true);
298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosOnly_OneTrack) {
302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosOnly_TwoTracks) {
310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
313f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
317f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
318f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueEos_OneTrack) {
319f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
323f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCues(true);
324f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
325f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
326f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueEos_TwoTracks) {
329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(1);
335f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCues(true);
336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(TextRendererTest, DestroyPending_OneTrack) {
341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  Destroy();
345f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
346f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
347f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(TextRendererTest, DestroyPending_TwoTracks) {
349f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
350f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
351f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
352f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  Destroy();
354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
355f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPause_OneTrack) {
358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
363f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPause_TwoTracks) {
367f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
368f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
369f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
373f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
376f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPausePending_OneTrack) {
377f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
378f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
379f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
380f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
381f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
382f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
383f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
384f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
385f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPausePending_TwoTracks) {
386f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
394f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
395f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePending_OneTrack) {
396f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
397f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
398f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
400f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCues(true);
402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
404f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePending_TwoTracks) {
405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCues(true);
412f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
413f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
414f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_OneTrack) {
415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
422f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
423f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
424f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_TwoTracks) {
425f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
426f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
427f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
429f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
430f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
432f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
435f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_SplitEos) {
436f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
437f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
438f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
439f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
440f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
441f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
444f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
445f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
446f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
447f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosFlush_OneTrack) {
448f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
449f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
450f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
451f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
452f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
453f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
454f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
455f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Flush();
456f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
459f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
461f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
462f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosFlush_TwoTracks) {
463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
464f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
465f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
466f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
468f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
469f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
470f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
471f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Flush();
472f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(1);
474f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
475f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
477f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
478f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
479f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTextTrackOnlyRemove_OneTrack) {
480f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
481f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", false);
482f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
483f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
484f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTextTrackOnlyRemove_TwoTracks) {
486f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "track 1", "", false);
488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "track 2", "", false);
489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
491f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
492f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
493f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
494f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
495f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlayRemove_OneTrack) {
496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
498f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
502f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
503f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
504f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlayRemove_TwoTracks) {
505f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
506f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
507f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
508f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
509f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
510f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
511f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
512f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
513f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
514f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
515f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
516f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlayRemove_SeparateCancel) {
517f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
518f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
519f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
520f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
521f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
522f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
523f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
524f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(1);
525f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
526f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
527f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
528f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
529f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlayRemove_RemoveOneThenPlay) {
530f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
531f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", false);
532f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
533f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
534f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
535f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
536f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(1);
537f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
538f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
539f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
540f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
541f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackBeforePlayRemove_RemoveTwoThenPlay) {
542f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
543f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", false);
544f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", false);
545f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
546f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
547f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
548f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
549f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
550f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
551f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
552f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlayRemove_OneTrack) {
553f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
554f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
555f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
556f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
557f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
558f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
559f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
560f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
561f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlayRemove_TwoTracks) {
562f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
563f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
564f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
565f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
566f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
567f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
568f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
569f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
570f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
571f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
572f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
573f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlayRemove_SplitCancel) {
574f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
575f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
576f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
577f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
578f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
579f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
580f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
581f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(1);
582f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
583f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
584f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
585f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
586f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddTrackAfterPlayRemove_SplitAdd) {
587f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
588f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
589f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
590f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
591f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
592f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
593f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
594f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(1);
595f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
596f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
597f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
598f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
599f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayAddCueRemove_OneTrack) {
600f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
601f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
602f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCues(true);
605f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
606f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
607f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
608f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
609f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
610f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayAddCueRemove_TwoTracks) {
611f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
612f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
613f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
614f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
615f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
616f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(1);
617f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCues(true);
618f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
619f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(1);
620f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
622f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosOnlyRemove_OneTrack) {
627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
628f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
629f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
630f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
631f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
632f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
633f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
634f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
635f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
636f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosOnlyRemove_TwoTracks) {
637f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
638f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
639f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
640f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
641f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
642f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
643f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
644f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
645f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
646f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
647f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
648f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
649f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueEosRemove_OneTrack) {
650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
651f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
652f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
653f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
654f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCues(true);
655f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
656f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
657f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
658f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
659f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
660f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
661f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueEosRemove_TwoTracks) {
662f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
663f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
664f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
665f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
666f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
667f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(1);
668f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCues(true);
669f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
670f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
672f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
673f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
674f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
675f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
676f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
677f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPauseRemove_PauseThenRemove) {
678f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
679f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
680f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
681f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
682f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
683f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
684f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
685f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
686f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
687f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
688f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPauseRemove_RemoveThanPause) {
689f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
690f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
691f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
692f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
693f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
694f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
695f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
696f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
697f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
698f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
699f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPause_PauseThenRemoveTwoTracks) {
700f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
701f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
702f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
703f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
704f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
705f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
706f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
707f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
708f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
709f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
710f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
711f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
712f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
713f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPauseRemove_RemoveThenPauseTwoTracks) {
714f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
715f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
716f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
717f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
718f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingReads();
719f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
720f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
721f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
722f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
723f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
724f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
725f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
726f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
727f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPauseRemove_SplitCancel) {
728f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
729f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
730f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
731f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
732f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
733f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
734f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
735f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(1);
736f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
737f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
738f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
739f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
740f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
741f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
742f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
743f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayPauseRemove_PauseLast) {
744f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
745f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
746f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
747f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
748f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
749f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
750f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
751f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(1);
752f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
753f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
754f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
755f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
756f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
757f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
758f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPausePendingRemove_OneTrack) {
759f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
760f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
761f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
762f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
763f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
764f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
765f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
766f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
767f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
768f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
769f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPausePendingRemove_TwoTracks) {
770f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
771f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
772f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
773f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
774f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
775f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
776f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
777f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
778f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
779f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
780f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
781f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
782f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
783f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
784f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPausePendingRemove_SplitEos) {
785f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
786f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
787f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
788f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
789f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
790f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
791f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
792f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
793f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
794f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
795f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
796f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
797f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
798f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
799f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePendingRemove_OneTrack) {
800f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
801f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
802f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
803f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
804f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
805f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCues(true);
806f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
807f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
808f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
809f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
810f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePendingRemove_TwoTracks) {
811f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
812f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
813f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
814f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
815f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
816f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCue(0, true);
817f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
818f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCue(1, true);
819f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
820f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
821f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
822f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
823f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
824f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
825f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePendingRemove_SplitSendCue) {
826f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
827f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
828f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
829f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
830f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
831f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCue(0, true);
832f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
833f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
834f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
835f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCue(1, true);
836f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
837f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
838f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
839f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
840f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPauseRemove_PauseThenRemove) {
841f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
842f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
843f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
844f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
845f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
846f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
847f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
848f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
849f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
850f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
851f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
852f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPauseRemove_RemoveThenPause) {
853f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
854f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
855f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
856f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
857f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
858f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
859f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
860f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
861f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
862f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
863f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
864f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_PauseThenRemoveTwoTracks) {
865f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
866f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
867f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
868f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
869f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
870f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
871f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
872f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
873f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
874f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
875f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
876f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
877f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
878f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
879f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
880f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_RemovePauseRemove) {
881f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
882f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
883f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
884f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
885f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
886f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
887f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
888f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
889f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
890f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
891f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
892f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
893f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
894f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
895f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
896f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_EosThenPause) {
897f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
898f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
899f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
900f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
901f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
902f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
903f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
904f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
905f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
906f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
907f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
908f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
909f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
910f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
911f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
912f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_PauseLast) {
913f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
914f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
915f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
916f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
917f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
918f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
919f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
920f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
921f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
922f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
923f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
924f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
925f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
926f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
927f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
928f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_EosPauseRemove) {
929f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
930f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
931f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
932f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
933f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
934f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
935f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
936f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
937f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
938f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
939f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
940f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
941f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
942f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
943f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
944f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_EosRemovePause) {
945f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
946f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
947f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
948f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
949f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
950f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
951f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
952f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
953f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
954f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
955f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
956f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
957f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
958f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
959f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
960f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_EosRemoveEosPause) {
961f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
962f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
963f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
964f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
965f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
966f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
967f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
968f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
969f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
970f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
971f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
972f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
973f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
974f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
975f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
976f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosPause_EosRemoveEosRemovePause) {
977f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
978f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
979f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
980f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
981f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
982f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
983f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
984f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
985f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
986f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
987f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
988f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
989f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
990f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
991f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
992f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosFlushRemove_OneTrack) {
993f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
994f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
995f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
996f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
997f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
998f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
999f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
1000f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Flush();
1001f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
1002f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1003f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
1004f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
1005f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
1006f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
1007f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1008f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1009f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosFlushRemove_TwoTracks) {
1010f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1011f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
1012f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
1013f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1014f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
1015f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
1016f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
1017f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
1018f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Flush();
1019f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
1020f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(1);
1021f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1022f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
1023f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
1024f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
1025f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
1026f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
1027f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
1028f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
1029f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1030f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1031f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayEosFlushRemove_EosRemove) {
1032f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1033f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
1034f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
1035f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1036f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
1037f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotifications();
1038f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
1039f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
1040f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Flush();
1041f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(0);
1042f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ExpectRead(1);
1043f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1044f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
1045f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
1046f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
1047f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
1048f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
1049f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
1050f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
1051f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1052f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1053f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayShort_SendCueThenEos) {
1054f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1055f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
1056f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
1057f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1058f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
1059f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCue(0, true);
1060f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
1061f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
1062f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1063f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1064f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayShort_EosThenSendCue) {
1065f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1066f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
1067f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
1068f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1069f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
1070f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(0);
1071f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
1072f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCue(1, true);
1073f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1074f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1075f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayShortRemove_SendEosRemove) {
1076f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1077f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
1078f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
1079f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1080f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
1081f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCue(0, true);
1082f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
1083f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
1084f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
1085f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
1086f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
1087f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
1088f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1089f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1090f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayShortRemove_SendRemoveEos) {
1091f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1092f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
1093f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
1094f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1095f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
1096f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCue(0, true);
1097f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
1098f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
1099f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
1100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
1101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(1);
1102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_FALSE(text_renderer_->HasTracks());
1103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePendingCancel_OneTrack) {
1106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
1108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
1110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
1111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
1112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePendingCancel_SendThenCancel) {
1115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
1117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
1118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
1120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCue(0, true);
1121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
1122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(1);
1123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, PlayCuePausePendingCancel_CancelThenSend) {
1126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
1128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
1129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
1131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
1132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
1133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCue(1, true);
1134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
11365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueDestroyPendingCancel_OneTrack) {
1137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
1139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
11415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
11425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  Destroy();
1143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
1144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
11465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueDestroyPendingCancel_SendThenCancel) {
1147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
1149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
1150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
11525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
11535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  Destroy();
1154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCue(0, false);
1155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(1);
1156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
11585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(TextRendererTest, PlayCueDestroyPendingCancel_CancelThenSend) {
1159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
1161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
1162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
11645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
11655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  Destroy();
1166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
1167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendCue(1, false);
1168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddRemoveAdd) {
1171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
1173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
1175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
1176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
1177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
1178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "", "", true);
1179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
1181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
1182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddRemoveEos) {
1185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
1187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
1188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
1190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
1191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
1192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnEnd());
1193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
1194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(TextRendererTest, AddRemovePause) {
1197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateTextRenderer();
1198f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "1", "", true);
1199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AddTextTrack(kTextSubtitles, "2", "", true);
1200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Play();
1201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AbortPendingRead(0);
1202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RemoveTextTrack(0);
1203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_TRUE(text_renderer_->HasTracks());
1204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Pause();
1205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_CALL(*this, OnPause());
1206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SendEosNotification(1);
1207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
1208f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace media
1210