blob: 995fade172dc9cea9709a0a7077746b6e826efd0 [file] [log] [blame]
// Copyright 2018 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 "third_party/blink/renderer/core/dom/names_map.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/platform/wtf/text/string_hash.h"
namespace blink {
typedef HashMap<String, String> ExpectedMap;
void ExpectEqMap(const ExpectedMap& exp, NamesMap& map) {
EXPECT_EQ(exp.size(), map.size());
for (auto kv : exp) {
base::Optional<SpaceSplitString> value = map.Get(AtomicString(kv.key));
if (!value) {
ADD_FAILURE() << "key: " << kv.key << " was nullptr";
return;
}
EXPECT_EQ(kv.value, value.value().SerializeToString())
<< "for key: " << kv.key;
}
}
TEST(NamesMapTest, Set) {
Vector<std::pair<String, ExpectedMap>> test_cases({
// Various valid values.
{"foo", {{"foo", "foo"}}},
{"foo: bar", {{"foo", "bar"}}},
{"foo : bar", {{"foo", "bar"}}},
{"foo: bar, foo: buz", {{"foo", "bar buz"}}},
{"foo: bar, buz", {{"foo", "bar"}, {"buz", "buz"}}},
{"foo: bar, buz: bar", {{"foo", "bar"}, {"buz", "bar"}}},
{"foo, buz: bar", {{"foo", "foo"}, {"buz", "bar"}}},
// This is an error but qux should be ignored.
{"foo: bar qux, buz: bar", {{"foo", "bar"}, {"buz", "bar"}}},
{"foo: bar, buz: bar qux", {{"foo", "bar"}, {"buz", "bar"}}},
// This is an error but the extra commas and colons should be ignored.
{"foo:", {{"foo", "foo"}}},
{"foo:,", {{"foo", "foo"}}},
{"foo :", {{"foo", "foo"}}},
{"foo :,", {{"foo", "foo"}}},
{"foo: bar, buz:", {{"foo", "bar"}, {"buz", "buz"}}},
{"foo: bar, buz :", {{"foo", "bar"}, {"buz", "buz"}}},
{",foo: bar, buz: bar", {{"foo", "bar"}, {"buz", "bar"}}},
{"foo: bar,, buz: bar", {{"foo", "bar"}, {"buz", "bar"}}},
{"foo: bar, buz: bar,", {{"foo", "bar"}, {"buz", "bar"}}},
{"foo: bar, buz: bar,,", {{"foo", "bar"}, {"buz", "bar"}}},
{":foo: bar, buz: bar", {{"foo", "bar"}, {"buz", "bar"}}},
{"foo: bar:, buz: bar", {{"foo", "bar"}, {"buz", "bar"}}},
{"foo: :bar, buz: bar", {{"foo", "bar"}, {"buz", "bar"}}},
{"foo: bar, buz: bar:", {{"foo", "bar"}, {"buz", "bar"}}},
{"foo: bar, buz: bar::", {{"foo", "bar"}, {"buz", "bar"}}},
// Spaces in odd places.
{" foo: bar, buz: bar", {{"foo", "bar"}, {"buz", "bar"}}},
{"foo: bar, buz: bar", {{"foo", "bar"}, {"buz", "bar"}}},
{"foo: bar, buz: bar ", {{"foo", "bar"}, {"buz", "bar"}}},
});
NamesMap map;
for (auto test_case : test_cases) {
SCOPED_TRACE(test_case.first);
map.Set(AtomicString(test_case.first));
ExpectEqMap(test_case.second, map);
}
}
TEST(NamesMapTest, SetNull) {
NamesMap map;
map.Set(AtomicString("foo bar"));
map.Set(g_null_atom);
ExpectEqMap({}, map);
}
} // namespace blink