| // Copyright (c) 2016 The WebM project authors. All Rights Reserved. | |
| // | |
| // Use of this source code is governed by a BSD-style license | |
| // that can be found in the LICENSE file in the root of the source | |
| // tree. An additional intellectual property rights grant can be found | |
| // in the file PATENTS. All contributing project authors may | |
| // be found in the AUTHORS file in the root of the source tree. | |
| #include "src/recursive_parser.h" | |
| #include <cstdint> | |
| #include "gtest/gtest.h" | |
| #include "src/byte_parser.h" | |
| #include "src/element_parser.h" | |
| #include "test_utils/element_parser_test.h" | |
| #include "webm/element.h" | |
| #include "webm/status.h" | |
| using webm::Callback; | |
| using webm::ElementMetadata; | |
| using webm::ElementParser; | |
| using webm::ElementParserTest; | |
| using webm::Reader; | |
| using webm::RecursiveParser; | |
| using webm::Status; | |
| using webm::StringParser; | |
| namespace { | |
| class FailParser : public ElementParser { | |
| public: | |
| FailParser() { EXPECT_FALSE(true); } | |
| Status Init(const ElementMetadata& /* metadata */, | |
| std::uint64_t /* max_size */) override { | |
| return Status(Status::kInvalidElementSize); | |
| } | |
| Status Feed(Callback* /* callback */, Reader* /* reader */, | |
| std::uint64_t* num_bytes_read) override { | |
| *num_bytes_read = 0; | |
| return Status(Status::kInvalidElementSize); | |
| } | |
| int value() const { return 0; } | |
| int* mutable_value() { return nullptr; } | |
| }; | |
| class RecursiveFailParserTest | |
| : public ElementParserTest<RecursiveParser<FailParser>> {}; | |
| TEST_F(RecursiveFailParserTest, NoConstruction) { | |
| RecursiveParser<FailParser> parser; | |
| } | |
| class RecursiveStringParserTest | |
| : public ElementParserTest<RecursiveParser<StringParser>> {}; | |
| TEST_F(RecursiveStringParserTest, ParsesOkay) { | |
| ParseAndVerify(); | |
| EXPECT_EQ("", parser_.value()); | |
| SetReaderData({0x48, 0x69}); // "Hi". | |
| ParseAndVerify(); | |
| EXPECT_EQ("Hi", parser_.value()); | |
| } | |
| } // namespace |