chromium/net/third_party/quiche/src/quiche/common/structured_headers_test.cc

// Copyright 2019 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 "quiche/common/structured_headers.h"

#include <math.h>

#include <limits>
#include <optional>
#include <string>
#include <utility>

#include "quiche/common/platform/api/quiche_test.h"

namespace quiche {
namespace structured_headers {
namespace {

// Helpers to make test cases clearer

Item Token(std::string value) {}

Item Integer(int64_t value) {}

// Parameter with null value, only used in Structured Headers Draft 09
std::pair<std::string, Item> NullParam(std::string key) {}

std::pair<std::string, Item> BooleanParam(std::string key, bool value) {}

std::pair<std::string, Item> DoubleParam(std::string key, double value) {}

std::pair<std::string, Item> Param(std::string key, int64_t value) {}

std::pair<std::string, Item> Param(std::string key, std::string value) {}

std::pair<std::string, Item> ByteSequenceParam(std::string key,
                                               std::string value) {}

std::pair<std::string, Item> TokenParam(std::string key, std::string value) {}

// Test cases taken from https://github.com/httpwg/structured-header-tests can
// be found in structured_headers_generated_unittest.cc

const struct ItemTestCase {} item_test_cases[] =;

const ItemTestCase sh09_item_test_cases[] =;

// For Structured Headers Draft 15
const struct ParameterizedItemTestCase {} parameterized_item_test_cases[] =;

// For Structured Headers Draft 15
const struct ListTestCase {} list_test_cases[] =;

// For Structured Headers Draft 15
const struct DictionaryTestCase {} dictionary_test_cases[] =;
}  // namespace

TEST(StructuredHeaderTest, ParseBareItem) {}

// For Structured Headers Draft 15, these tests include parameters on Items.
TEST(StructuredHeaderTest, ParseItem) {}

// Structured Headers Draft 9 parsing rules are different than Draft 15, and
// some strings which are considered invalid in SH15 should parse in SH09.
// The SH09 Item parser is not directly exposed, but can be used indirectly by
// calling the parser for SH09-specific lists.
TEST(StructuredHeaderTest, ParseSH09Item) {}

// In Structured Headers Draft 9, floats can have more than three fractional
// digits, and can be larger than 1e12. This behaviour is exposed in the parser
// for SH09-specific lists, so test it through that interface.
TEST(StructuredHeaderTest, SH09HighPrecisionFloats) {}

// For Structured Headers Draft 9
TEST(StructuredHeaderTest, ParseListOfLists) {}

// For Structured Headers Draft 9
TEST(StructuredHeaderTest, ParseParameterisedList) {}

// For Structured Headers Draft 15
TEST(StructuredHeaderTest, ParseList) {}

// For Structured Headers Draft 15
TEST(StructuredHeaderTest, ParseDictionary) {}

// Serializer tests are all exclusively for Structured Headers Draft 15

TEST(StructuredHeaderTest, SerializeItem) {}

TEST(StructuredHeaderTest, SerializeParameterizedItem) {}

TEST(StructuredHeaderTest, UnserializableItems) {}

TEST(StructuredHeaderTest, UnserializableTokens) {}

TEST(StructuredHeaderTest, UnserializableKeys) {}

TEST(StructuredHeaderTest, UnserializableStrings) {}

TEST(StructuredHeaderTest, UnserializableIntegers) {}

TEST(StructuredHeaderTest, UnserializableDecimals) {}

// These values cannot be directly parsed from headers, but are valid doubles
// which can be serialized as sh-floats (though rounding is expected.)
TEST(StructuredHeaderTest, SerializeUnparseableDecimals) {}

TEST(StructuredHeaderTest, SerializeList) {}

TEST(StructuredHeaderTest, UnserializableLists) {}

TEST(StructuredHeaderTest, SerializeDictionary) {}

TEST(StructuredHeaderTest, DictionaryConstructors) {}

TEST(StructuredHeaderTest, DictionaryClear) {}

TEST(StructuredHeaderTest, DictionaryAccessors) {}

TEST(StructuredHeaderTest, UnserializableDictionary) {}

}  // namespace structured_headers
}  // namespace quiche