123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- // Copyright 2017 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 "components/cbor/values.h"
- #include <string>
- #include <utility>
- #include "testing/gtest/include/gtest/gtest.h"
- namespace cbor {
- TEST(CBORValuesTest, TestNothrow) {
- static_assert(std::is_nothrow_move_constructible<Value>::value,
- "IsNothrowMoveConstructible");
- static_assert(std::is_nothrow_default_constructible<Value>::value,
- "IsNothrowDefaultConstructible");
- static_assert(std::is_nothrow_constructible<Value, std::string&&>::value,
- "IsNothrowMoveConstructibleFromString");
- static_assert(
- std::is_nothrow_constructible<Value, Value::BinaryValue&&>::value,
- "IsNothrowMoveConstructibleFromBytestring");
- static_assert(
- std::is_nothrow_constructible<Value, Value::ArrayValue&&>::value,
- "IsNothrowMoveConstructibleFromArray");
- static_assert(std::is_nothrow_move_assignable<Value>::value,
- "IsNothrowMoveAssignable");
- }
- // Test constructors
- TEST(CBORValuesTest, ConstructUnsigned) {
- Value value(37);
- ASSERT_EQ(Value::Type::UNSIGNED, value.type());
- EXPECT_EQ(37u, value.GetInteger());
- }
- TEST(CBORValuesTest, ConstructNegative) {
- Value value(-1);
- ASSERT_EQ(Value::Type::NEGATIVE, value.type());
- EXPECT_EQ(-1, value.GetInteger());
- }
- TEST(CBORValuesTest, ConstructStringFromConstCharPtr) {
- const char* str = "foobar";
- Value value(str);
- ASSERT_EQ(Value::Type::STRING, value.type());
- EXPECT_EQ("foobar", value.GetString());
- }
- TEST(CBORValuesTest, ConstructStringFromStdStringConstRef) {
- std::string str = "foobar";
- Value value(str);
- ASSERT_EQ(Value::Type::STRING, value.type());
- EXPECT_EQ("foobar", value.GetString());
- }
- TEST(CBORValuesTest, ConstructStringFromStdStringRefRef) {
- std::string str = "foobar";
- Value value(std::move(str));
- ASSERT_EQ(Value::Type::STRING, value.type());
- EXPECT_EQ("foobar", value.GetString());
- }
- TEST(CBORValuesTest, ConstructBytestring) {
- Value value(Value::BinaryValue({0xF, 0x0, 0x0, 0xB, 0xA, 0x2}));
- ASSERT_EQ(Value::Type::BYTE_STRING, value.type());
- EXPECT_EQ(Value::BinaryValue({0xF, 0x0, 0x0, 0xB, 0xA, 0x2}),
- value.GetBytestring());
- }
- TEST(CBORValuesTest, ConstructBytestringFromString) {
- Value value(Value("hello", Value::Type::BYTE_STRING));
- ASSERT_EQ(Value::Type::BYTE_STRING, value.type());
- EXPECT_EQ(Value::BinaryValue({'h', 'e', 'l', 'l', 'o'}),
- value.GetBytestring());
- EXPECT_EQ("hello", value.GetBytestringAsString());
- }
- TEST(CBORValuesTest, ConstructArray) {
- Value::ArrayValue array;
- array.emplace_back(Value("foo"));
- {
- Value value(array);
- ASSERT_EQ(Value::Type::ARRAY, value.type());
- ASSERT_EQ(1u, value.GetArray().size());
- ASSERT_EQ(Value::Type::STRING, value.GetArray()[0].type());
- EXPECT_EQ("foo", value.GetArray()[0].GetString());
- }
- array.back() = Value("bar");
- {
- Value value(std::move(array));
- ASSERT_EQ(Value::Type::ARRAY, value.type());
- ASSERT_EQ(1u, value.GetArray().size());
- ASSERT_EQ(Value::Type::STRING, value.GetArray()[0].type());
- EXPECT_EQ("bar", value.GetArray()[0].GetString());
- }
- }
- TEST(CBORValuesTest, ConstructMap) {
- Value::MapValue map;
- const Value key_foo("foo");
- map[Value("foo")] = Value("bar");
- {
- Value value(map);
- ASSERT_EQ(Value::Type::MAP, value.type());
- ASSERT_EQ(value.GetMap().count(key_foo), 1u);
- ASSERT_EQ(Value::Type::STRING, value.GetMap().find(key_foo)->second.type());
- EXPECT_EQ("bar", value.GetMap().find(key_foo)->second.GetString());
- }
- map[Value("foo")] = Value("baz");
- {
- Value value(std::move(map));
- ASSERT_EQ(Value::Type::MAP, value.type());
- ASSERT_EQ(value.GetMap().count(key_foo), 1u);
- ASSERT_EQ(Value::Type::STRING, value.GetMap().find(key_foo)->second.type());
- EXPECT_EQ("baz", value.GetMap().find(key_foo)->second.GetString());
- }
- }
- TEST(CBORValuesTest, ConstructSimpleValue) {
- Value false_value(Value::SimpleValue::FALSE_VALUE);
- ASSERT_EQ(Value::Type::SIMPLE_VALUE, false_value.type());
- EXPECT_EQ(Value::SimpleValue::FALSE_VALUE, false_value.GetSimpleValue());
- Value true_value(Value::SimpleValue::TRUE_VALUE);
- ASSERT_EQ(Value::Type::SIMPLE_VALUE, true_value.type());
- EXPECT_EQ(Value::SimpleValue::TRUE_VALUE, true_value.GetSimpleValue());
- Value null_value(Value::SimpleValue::NULL_VALUE);
- ASSERT_EQ(Value::Type::SIMPLE_VALUE, null_value.type());
- EXPECT_EQ(Value::SimpleValue::NULL_VALUE, null_value.GetSimpleValue());
- Value undefined_value(Value::SimpleValue::UNDEFINED);
- ASSERT_EQ(Value::Type::SIMPLE_VALUE, undefined_value.type());
- EXPECT_EQ(Value::SimpleValue::UNDEFINED, undefined_value.GetSimpleValue());
- }
- TEST(CBORValuesTest, ConstructSimpleBooleanValue) {
- Value true_value(true);
- ASSERT_EQ(Value::Type::SIMPLE_VALUE, true_value.type());
- EXPECT_TRUE(true_value.GetBool());
- Value false_value(false);
- ASSERT_EQ(Value::Type::SIMPLE_VALUE, false_value.type());
- EXPECT_FALSE(false_value.GetBool());
- }
- // Test copy constructors
- TEST(CBORValuesTest, CopyUnsigned) {
- Value value(74);
- Value copied_value(value.Clone());
- ASSERT_EQ(value.type(), copied_value.type());
- EXPECT_EQ(value.GetInteger(), copied_value.GetInteger());
- Value blank;
- blank = value.Clone();
- ASSERT_EQ(value.type(), blank.type());
- EXPECT_EQ(value.GetInteger(), blank.GetInteger());
- }
- TEST(CBORValuesTest, CopyNegativeInt) {
- Value value(-74);
- Value copied_value(value.Clone());
- ASSERT_EQ(value.type(), copied_value.type());
- EXPECT_EQ(value.GetInteger(), copied_value.GetInteger());
- Value blank;
- blank = value.Clone();
- ASSERT_EQ(value.type(), blank.type());
- EXPECT_EQ(value.GetInteger(), blank.GetInteger());
- }
- TEST(CBORValuesTest, CopyString) {
- Value value("foobar");
- Value copied_value(value.Clone());
- ASSERT_EQ(value.type(), copied_value.type());
- EXPECT_EQ(value.GetString(), copied_value.GetString());
- Value blank;
- blank = value.Clone();
- ASSERT_EQ(value.type(), blank.type());
- EXPECT_EQ(value.GetString(), blank.GetString());
- }
- TEST(CBORValuesTest, CopyBytestring) {
- Value value(Value::BinaryValue({0xF, 0x0, 0x0, 0xB, 0xA, 0x2}));
- Value copied_value(value.Clone());
- ASSERT_EQ(value.type(), copied_value.type());
- EXPECT_EQ(value.GetBytestring(), copied_value.GetBytestring());
- Value blank;
- blank = value.Clone();
- ASSERT_EQ(value.type(), blank.type());
- EXPECT_EQ(value.GetBytestring(), blank.GetBytestring());
- }
- TEST(CBORValuesTest, CopyArray) {
- Value::ArrayValue array;
- array.emplace_back(123);
- Value value(std::move(array));
- Value copied_value(value.Clone());
- ASSERT_EQ(1u, copied_value.GetArray().size());
- ASSERT_TRUE(copied_value.GetArray()[0].is_unsigned());
- EXPECT_EQ(value.GetArray()[0].GetInteger(),
- copied_value.GetArray()[0].GetInteger());
- Value blank;
- blank = value.Clone();
- EXPECT_EQ(1u, blank.GetArray().size());
- }
- TEST(CBORValuesTest, CopyMap) {
- Value::MapValue map;
- Value key_a("a");
- map[Value("a")] = Value(123);
- Value value(std::move(map));
- Value copied_value(value.Clone());
- EXPECT_EQ(1u, copied_value.GetMap().size());
- ASSERT_EQ(value.GetMap().count(key_a), 1u);
- ASSERT_EQ(copied_value.GetMap().count(key_a), 1u);
- ASSERT_TRUE(copied_value.GetMap().find(key_a)->second.is_unsigned());
- EXPECT_EQ(value.GetMap().find(key_a)->second.GetInteger(),
- copied_value.GetMap().find(key_a)->second.GetInteger());
- Value blank;
- blank = value.Clone();
- EXPECT_EQ(1u, blank.GetMap().size());
- ASSERT_EQ(blank.GetMap().count(key_a), 1u);
- ASSERT_TRUE(blank.GetMap().find(key_a)->second.is_unsigned());
- EXPECT_EQ(value.GetMap().find(key_a)->second.GetInteger(),
- blank.GetMap().find(key_a)->second.GetInteger());
- }
- TEST(CBORValuesTest, CopySimpleValue) {
- Value value(Value::SimpleValue::TRUE_VALUE);
- Value copied_value(value.Clone());
- EXPECT_EQ(value.type(), copied_value.type());
- EXPECT_EQ(value.GetSimpleValue(), copied_value.GetSimpleValue());
- Value blank;
- blank = value.Clone();
- EXPECT_EQ(value.type(), blank.type());
- EXPECT_EQ(value.GetSimpleValue(), blank.GetSimpleValue());
- }
- // Test move constructors and move-assignment
- TEST(CBORValuesTest, MoveUnsigned) {
- Value value(74);
- Value moved_value(std::move(value));
- EXPECT_EQ(Value::Type::UNSIGNED, moved_value.type());
- EXPECT_EQ(74u, moved_value.GetInteger());
- Value blank;
- blank = Value(654);
- EXPECT_EQ(Value::Type::UNSIGNED, blank.type());
- EXPECT_EQ(654u, blank.GetInteger());
- }
- TEST(CBORValuesTest, MoveNegativeInteger) {
- Value value(-74);
- Value moved_value(std::move(value));
- EXPECT_EQ(Value::Type::NEGATIVE, moved_value.type());
- EXPECT_EQ(-74, moved_value.GetInteger());
- Value blank;
- blank = Value(-654);
- EXPECT_EQ(Value::Type::NEGATIVE, blank.type());
- EXPECT_EQ(-654, blank.GetInteger());
- }
- TEST(CBORValuesTest, MoveString) {
- Value value("foobar");
- Value moved_value(std::move(value));
- EXPECT_EQ(Value::Type::STRING, moved_value.type());
- EXPECT_EQ("foobar", moved_value.GetString());
- Value blank;
- blank = Value("foobar");
- EXPECT_EQ(Value::Type::STRING, blank.type());
- EXPECT_EQ("foobar", blank.GetString());
- }
- TEST(CBORValuesTest, MoveBytestring) {
- const Value::BinaryValue bytes({0xF, 0x0, 0x0, 0xB, 0xA, 0x2});
- Value value(bytes);
- Value moved_value(std::move(value));
- EXPECT_EQ(Value::Type::BYTE_STRING, moved_value.type());
- EXPECT_EQ(bytes, moved_value.GetBytestring());
- Value blank;
- blank = Value(bytes);
- EXPECT_EQ(Value::Type::BYTE_STRING, blank.type());
- EXPECT_EQ(bytes, blank.GetBytestring());
- }
- TEST(CBORValuesTest, MoveConstructMap) {
- Value::MapValue map;
- const Value key_a("a");
- map[Value("a")] = Value(123);
- Value value(std::move(map));
- Value moved_value(std::move(value));
- ASSERT_EQ(Value::Type::MAP, moved_value.type());
- ASSERT_EQ(moved_value.GetMap().count(key_a), 1u);
- ASSERT_TRUE(moved_value.GetMap().find(key_a)->second.is_unsigned());
- EXPECT_EQ(123u, moved_value.GetMap().find(key_a)->second.GetInteger());
- }
- TEST(CBORValuesTest, MoveAssignMap) {
- Value::MapValue map;
- const Value key_a("a");
- map[Value("a")] = Value(123);
- Value blank;
- blank = Value(std::move(map));
- ASSERT_TRUE(blank.is_map());
- ASSERT_EQ(blank.GetMap().count(key_a), 1u);
- ASSERT_TRUE(blank.GetMap().find(key_a)->second.is_unsigned());
- EXPECT_EQ(123u, blank.GetMap().find(key_a)->second.GetInteger());
- }
- TEST(CBORValuesTest, MoveArray) {
- Value::ArrayValue array;
- array.emplace_back(123);
- Value value(array);
- Value moved_value(std::move(value));
- EXPECT_EQ(Value::Type::ARRAY, moved_value.type());
- EXPECT_EQ(123u, moved_value.GetArray().back().GetInteger());
- Value blank;
- blank = Value(std::move(array));
- EXPECT_EQ(Value::Type::ARRAY, blank.type());
- EXPECT_EQ(123u, blank.GetArray().back().GetInteger());
- }
- TEST(CBORValuesTest, MoveSimpleValue) {
- Value value(Value::SimpleValue::UNDEFINED);
- Value moved_value(std::move(value));
- EXPECT_EQ(Value::Type::SIMPLE_VALUE, moved_value.type());
- EXPECT_EQ(Value::SimpleValue::UNDEFINED, moved_value.GetSimpleValue());
- Value blank;
- blank = Value(Value::SimpleValue::UNDEFINED);
- EXPECT_EQ(Value::Type::SIMPLE_VALUE, blank.type());
- EXPECT_EQ(Value::SimpleValue::UNDEFINED, blank.GetSimpleValue());
- }
- TEST(CBORValuesTest, SelfSwap) {
- Value test(1);
- std::swap(test, test);
- EXPECT_EQ(test.GetInteger(), 1u);
- }
- } // namespace cbor
|