// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "media/base/text_ranges.h"
#include "base/time/time.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
class TextRangesTest : public ::testing::Test {
protected:
bool AddCue(int seconds) {
return ranges_.AddCue(base::TimeDelta::FromSeconds(seconds));
}
void Reset() {
ranges_.Reset();
}
size_t RangeCount() {
return ranges_.RangeCountForTesting();
}
TextRanges ranges_;
};
TEST_F(TextRangesTest, TestEmptyRanges) {
// Create a new active range, with t=5.
EXPECT_TRUE(AddCue(5));
// Create a new active range, with t=2.
Reset();
EXPECT_TRUE(AddCue(2));
// Create a new active range, with t=8.
Reset();
EXPECT_TRUE(AddCue(8));
Reset();
// Make range [2, 2] active.
EXPECT_FALSE(AddCue(2));
EXPECT_EQ(RangeCount(), 3U);
// Coalesce first two ranges: [2, 5].
EXPECT_FALSE(AddCue(5));
EXPECT_EQ(RangeCount(), 2U);
// Coalesce first two ranges: [2, 8].
EXPECT_FALSE(AddCue(8));
EXPECT_EQ(RangeCount(), 1U);
// Add new cue to end of (only) range.
EXPECT_TRUE(AddCue(9));
EXPECT_EQ(RangeCount(), 1U);
}
TEST_F(TextRangesTest, TestOneRange) {
// Create a new active range, with t=0.
EXPECT_TRUE(AddCue(0));
// Add cues to end of existing range.
EXPECT_TRUE(AddCue(1));
EXPECT_TRUE(AddCue(4));
Reset();
EXPECT_FALSE(AddCue(2));
EXPECT_FALSE(AddCue(3));
EXPECT_FALSE(AddCue(4));
}
TEST_F(TextRangesTest, TestDuplicateLast) {
// Create a new active range, with t=0.
EXPECT_TRUE(AddCue(0));
EXPECT_TRUE(AddCue(1));
Reset();
EXPECT_FALSE(AddCue(1));
EXPECT_TRUE(AddCue(1));
}
TEST_F(TextRangesTest, TestTwoRanges) {
// Create a new active range, with t=0.
EXPECT_TRUE(AddCue(0));
// Add cue to end of existing range.
EXPECT_TRUE(AddCue(2));
Reset();
// Create a new active range, with t=4.
EXPECT_TRUE(AddCue(4));
// Add a new cue to end of last (active) range.
EXPECT_TRUE(AddCue(5));
Reset();
// Make first range active.
EXPECT_FALSE(AddCue(0));
EXPECT_FALSE(AddCue(2));
// Expand first range.
EXPECT_TRUE(AddCue(3));
// Coalesce first and second ranges.
EXPECT_FALSE(AddCue(4));
EXPECT_EQ(RangeCount(), 1U);
}
TEST_F(TextRangesTest, TestThreeRanges) {
// Create a new active range, with t=0.
EXPECT_TRUE(AddCue(0));
// Add cue to end of existing range.
EXPECT_TRUE(AddCue(2));
Reset();
// Create a new active range, with t=4.
EXPECT_TRUE(AddCue(4));
// Add a new cue to end of last (active) range.
EXPECT_TRUE(AddCue(5));
Reset();
// Create a new active range, in between the other two.
EXPECT_TRUE(AddCue(3));
// Coalesce middle and last ranges.
EXPECT_FALSE(AddCue(4));
Reset();
// Make first range active.
EXPECT_FALSE(AddCue(0));
EXPECT_FALSE(AddCue(2));
// Coalesce first and last ranges.
EXPECT_FALSE(AddCue(3));
EXPECT_EQ(RangeCount(), 1U);
}
} // namespace media