| Index: media/webm/webm_parser_unittest.cc
|
| diff --git a/media/webm/webm_parser_unittest.cc b/media/webm/webm_parser_unittest.cc
|
| index e377fdac226002344fe10c2a9fbb90adea0c15f3..3c8600b98b9a79ee523c0c8ed7f58e35dcec6fcc 100644
|
| --- a/media/webm/webm_parser_unittest.cc
|
| +++ b/media/webm/webm_parser_unittest.cc
|
| @@ -60,11 +60,13 @@ static Cluster* CreateCluster(int timecode,
|
| static void CreateClusterExpectations(int timecode,
|
| const SimpleBlockInfo* block_info,
|
| int block_count,
|
| + bool is_complete_cluster,
|
| MockWebMParserClient* client) {
|
|
|
| InSequence s;
|
| EXPECT_CALL(*client, OnListStart(kWebMIdCluster)).WillOnce(Return(true));
|
| - EXPECT_CALL(*client, OnUInt(kWebMIdTimecode, 0)).WillOnce(Return(true));
|
| + EXPECT_CALL(*client, OnUInt(kWebMIdTimecode, timecode))
|
| + .WillOnce(Return(true));
|
|
|
| for (int i = 0; i < block_count; i++) {
|
| EXPECT_CALL(*client, OnSimpleBlock(block_info[i].track_num,
|
| @@ -73,7 +75,8 @@ static void CreateClusterExpectations(int timecode,
|
| .WillOnce(Return(true));
|
| }
|
|
|
| - EXPECT_CALL(*client, OnListEnd(kWebMIdCluster)).WillOnce(Return(true));
|
| + if (is_complete_cluster)
|
| + EXPECT_CALL(*client, OnListEnd(kWebMIdCluster)).WillOnce(Return(true));
|
| }
|
|
|
| TEST_F(WebMParserTest, EmptyCluster) {
|
| @@ -211,7 +214,7 @@ TEST_F(WebMParserTest, ParseListElementWithSingleCall) {
|
| int block_count = arraysize(kBlockInfo);
|
|
|
| scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
|
| - CreateClusterExpectations(0, kBlockInfo, block_count, &client_);
|
| + CreateClusterExpectations(0, kBlockInfo, block_count, true, &client_);
|
|
|
| WebMListParser parser(kWebMIdCluster);
|
| int result = parser.Parse(cluster->data(), cluster->size(), &client_);
|
| @@ -230,7 +233,7 @@ TEST_F(WebMParserTest, ParseListElementWithMultipleCalls) {
|
| int block_count = arraysize(kBlockInfo);
|
|
|
| scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
|
| - CreateClusterExpectations(0, kBlockInfo, block_count, &client_);
|
| + CreateClusterExpectations(0, kBlockInfo, block_count, true, &client_);
|
|
|
| const uint8* data = cluster->data();
|
| int size = cluster->size();
|
| @@ -261,4 +264,41 @@ TEST_F(WebMParserTest, ParseListElementWithMultipleCalls) {
|
| EXPECT_TRUE(parser.IsParsingComplete());
|
| }
|
|
|
| +TEST_F(WebMParserTest, TestReset) {
|
| + InSequence s;
|
| +
|
| + const SimpleBlockInfo kBlockInfo[] = {
|
| + { 0, 1 },
|
| + { 1, 2 },
|
| + { 0, 3 },
|
| + { 0, 4 },
|
| + { 1, 4 },
|
| + };
|
| + int block_count = arraysize(kBlockInfo);
|
| +
|
| + scoped_ptr<Cluster> cluster(CreateCluster(0, kBlockInfo, block_count));
|
| +
|
| + // First expect all but the last block.
|
| + CreateClusterExpectations(0, kBlockInfo, block_count - 1, false, &client_);
|
| +
|
| + // Now expect all blocks.
|
| + CreateClusterExpectations(0, kBlockInfo, block_count, true, &client_);
|
| +
|
| + WebMListParser parser(kWebMIdCluster);
|
| +
|
| + // Send slightly less than the full cluster so all but the last block is
|
| + // parsed.
|
| + int result = parser.Parse(cluster->data(), cluster->size() - 1, &client_);
|
| + EXPECT_GT(result, 0);
|
| + EXPECT_LT(result, cluster->size());
|
| + EXPECT_FALSE(parser.IsParsingComplete());
|
| +
|
| + parser.Reset();
|
| +
|
| + // Now parse a whole cluster to verify that all the blocks will get parsed.
|
| + result = parser.Parse(cluster->data(), cluster->size(), &client_);
|
| + EXPECT_EQ(result, cluster->size());
|
| + EXPECT_TRUE(parser.IsParsingComplete());
|
| +}
|
| +
|
| } // namespace media
|
|
|