1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/formats/mp4/sample_to_group_iterator.h"
6
7 #include "base/memory/scoped_ptr.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace media {
11 namespace mp4 {
12
13 namespace {
14 const SampleToGroupEntry kCompactSampleToGroupTable[] =
15 {{10, 8}, {9, 5}, {25, 7}, {48, 63}, {8, 2}};
16 } // namespace
17
18 class SampleToGroupIteratorTest : public testing::Test {
19 public:
SampleToGroupIteratorTest()20 SampleToGroupIteratorTest() {
21 // Build sample group description index table from kSampleToGroupTable.
22 for (size_t i = 0; i < arraysize(kCompactSampleToGroupTable); ++i) {
23 for (uint32 j = 0; j < kCompactSampleToGroupTable[i].sample_count; ++j) {
24 sample_to_group_table_.push_back(
25 kCompactSampleToGroupTable[i].group_description_index);
26 }
27 }
28
29 sample_to_group_.entries.assign(
30 kCompactSampleToGroupTable,
31 kCompactSampleToGroupTable + arraysize(kCompactSampleToGroupTable));
32 sample_to_group_iterator_.reset(
33 new SampleToGroupIterator(sample_to_group_));
34 }
35
36 protected:
37 std::vector<uint32> sample_to_group_table_;
38 SampleToGroup sample_to_group_;
39 scoped_ptr<SampleToGroupIterator> sample_to_group_iterator_;
40
41 private:
42 DISALLOW_COPY_AND_ASSIGN(SampleToGroupIteratorTest);
43 };
44
TEST_F(SampleToGroupIteratorTest,EmptyTable)45 TEST_F(SampleToGroupIteratorTest, EmptyTable) {
46 SampleToGroup sample_to_group;
47 SampleToGroupIterator iterator(sample_to_group);
48 EXPECT_FALSE(iterator.IsValid());
49 }
50
TEST_F(SampleToGroupIteratorTest,Advance)51 TEST_F(SampleToGroupIteratorTest, Advance) {
52 ASSERT_EQ(sample_to_group_table_[0],
53 sample_to_group_iterator_->group_description_index());
54 for (uint32 sample = 1; sample < sample_to_group_table_.size(); ++sample) {
55 ASSERT_TRUE(sample_to_group_iterator_->Advance());
56 ASSERT_EQ(sample_to_group_table_[sample],
57 sample_to_group_iterator_->group_description_index());
58 ASSERT_TRUE(sample_to_group_iterator_->IsValid());
59 }
60 ASSERT_FALSE(sample_to_group_iterator_->Advance());
61 ASSERT_FALSE(sample_to_group_iterator_->IsValid());
62 }
63
64 } // namespace mp4
65 } // namespace media
66