#include "src/content_encoding_parser.h"
#include "gtest/gtest.h"
#include "test_utils/element_parser_test.h"
#include "webm/id.h"
using webm::ContentEncAlgo;
using webm::ContentEncoding;
using webm::ContentEncodingParser;
using webm::ContentEncodingType;
using webm::ContentEncryption;
using webm::ElementParserTest;
using webm::Id;
namespace {
class ContentEncodingParserTest
: public ElementParserTest<ContentEncodingParser, Id::kContentEncoding> {};
TEST_F(ContentEncodingParserTest, DefaultParse) {
ParseAndVerify();
const ContentEncoding content_encoding = parser_.value();
EXPECT_FALSE(content_encoding.order.is_present());
EXPECT_EQ(static_cast<std::uint64_t>(0), content_encoding.order.value());
EXPECT_FALSE(content_encoding.scope.is_present());
EXPECT_EQ(static_cast<std::uint64_t>(1), content_encoding.scope.value());
EXPECT_FALSE(content_encoding.type.is_present());
EXPECT_EQ(ContentEncodingType::kCompression, content_encoding.type.value());
EXPECT_FALSE(content_encoding.encryption.is_present());
EXPECT_EQ(ContentEncryption{}, content_encoding.encryption.value());
}
TEST_F(ContentEncodingParserTest, DefaultValues) {
SetReaderData({
0x50, 0x31, 0x80,
0x50, 0x32, 0x80,
0x50, 0x33, 0x80,
0x50, 0x35, 0x80, });
ParseAndVerify();
const ContentEncoding content_encoding = parser_.value();
EXPECT_TRUE(content_encoding.order.is_present());
EXPECT_EQ(static_cast<std::uint64_t>(0), content_encoding.order.value());
EXPECT_TRUE(content_encoding.scope.is_present());
EXPECT_EQ(static_cast<std::uint64_t>(1), content_encoding.scope.value());
EXPECT_TRUE(content_encoding.type.is_present());
EXPECT_EQ(ContentEncodingType::kCompression, content_encoding.type.value());
EXPECT_TRUE(content_encoding.encryption.is_present());
EXPECT_EQ(ContentEncryption{}, content_encoding.encryption.value());
}
TEST_F(ContentEncodingParserTest, CustomValues) {
SetReaderData({
0x50, 0x31, 0x81, 0x01,
0x50, 0x32, 0x81, 0x02,
0x50, 0x33, 0x81, 0x01,
0x50, 0x35, 0x84,
0x47, 0xE1, 0x81, 0x05, });
ParseAndVerify();
const ContentEncoding content_encoding = parser_.value();
EXPECT_TRUE(content_encoding.order.is_present());
EXPECT_EQ(static_cast<std::uint64_t>(1), content_encoding.order.value());
EXPECT_TRUE(content_encoding.scope.is_present());
EXPECT_EQ(static_cast<std::uint64_t>(2), content_encoding.scope.value());
EXPECT_TRUE(content_encoding.type.is_present());
EXPECT_EQ(ContentEncodingType::kEncryption, content_encoding.type.value());
ContentEncryption expected;
expected.algorithm.Set(ContentEncAlgo::kAes, true);
EXPECT_TRUE(content_encoding.encryption.is_present());
EXPECT_EQ(expected, content_encoding.encryption.value());
}
}