From 12d9358c96d8de816254992b20d263e8ad9aac63 Mon Sep 17 00:00:00 2001 From: zxu Date: Mon, 23 Apr 2018 10:51:52 -0400 Subject: Update `FieldValue` For Porting `Mutation`s to C++ (#1144) * update FieldValue for Mutation implementation * address changes * address changes * address change --- .../firebase/firestore/model/field_value_test.cc | 88 ++++++++++++++++++++++ 1 file changed, 88 insertions(+) (limited to 'Firestore/core/test') diff --git a/Firestore/core/test/firebase/firestore/model/field_value_test.cc b/Firestore/core/test/firebase/firestore/model/field_value_test.cc index c5645a4..f99a62a 100644 --- a/Firestore/core/test/firebase/firestore/model/field_value_test.cc +++ b/Firestore/core/test/firebase/firestore/model/field_value_test.cc @@ -19,6 +19,7 @@ #include #include +#include "Firestore/core/test/firebase/firestore/testutil/testutil.h" #include "gtest/gtest.h" namespace firebase { @@ -492,6 +493,93 @@ TEST(FieldValue, CompareWithOperator) { EXPECT_FALSE(small == large); } +TEST(FieldValue, Set) { + // Set a field in an object. + const FieldValue value = FieldValue::ObjectValueFromMap({ + {"a", FieldValue::StringValue("A")}, + {"b", FieldValue::ObjectValueFromMap({ + {"ba", FieldValue::StringValue("BA")}, + })}, + }); + const FieldValue expected = FieldValue::ObjectValueFromMap({ + {"a", FieldValue::StringValue("A")}, + {"b", FieldValue::ObjectValueFromMap({ + {"ba", FieldValue::StringValue("BA")}, + {"bb", FieldValue::StringValue("BB")}, + })}, + }); + EXPECT_EQ(expected, + value.Set(testutil::Field("b.bb"), FieldValue::StringValue("BB"))); +} + +TEST(FieldValue, SetRecursive) { + // Set a field in a new object. + const FieldValue value = FieldValue::ObjectValueFromMap({ + {"a", FieldValue::StringValue("A")}, + }); + const FieldValue expected = FieldValue::ObjectValueFromMap({ + {"a", FieldValue::StringValue("A")}, + {"b", FieldValue::ObjectValueFromMap({ + {"bb", FieldValue::StringValue("BB")}, + })}, + }); + EXPECT_EQ(expected, + value.Set(testutil::Field("b.bb"), FieldValue::StringValue("BB"))); +} + +TEST(FieldValue, Delete) { + const FieldValue value = FieldValue::ObjectValueFromMap({ + {"a", FieldValue::StringValue("A")}, + {"b", FieldValue::ObjectValueFromMap({ + {"ba", FieldValue::StringValue("BA")}, + {"bb", FieldValue::StringValue("BB")}, + })}, + }); + const FieldValue expected = FieldValue::ObjectValueFromMap({ + {"a", FieldValue::StringValue("A")}, + {"b", FieldValue::ObjectValueFromMap({ + {"ba", FieldValue::StringValue("BA")}, + })}, + }); + EXPECT_EQ(expected, value.Delete(testutil::Field("b.bb"))); +} + +TEST(FieldValue, DeleteNothing) { + const FieldValue value = FieldValue::ObjectValueFromMap({ + {"a", FieldValue::StringValue("A")}, + {"b", FieldValue::ObjectValueFromMap({ + {"ba", FieldValue::StringValue("BA")}, + {"bb", FieldValue::StringValue("BB")}, + })}, + }); + EXPECT_EQ(value, value.Delete(testutil::Field("aa"))); +} + +TEST(FieldValue, Get) { + const FieldValue value = FieldValue::ObjectValueFromMap({ + {"a", FieldValue::StringValue("A")}, + {"b", FieldValue::ObjectValueFromMap({ + {"ba", FieldValue::StringValue("BA")}, + {"bb", FieldValue::StringValue("BB")}, + })}, + }); + EXPECT_EQ(FieldValue::StringValue("A"), value.Get(testutil::Field("a"))); + EXPECT_EQ(FieldValue::StringValue("BA"), value.Get(testutil::Field("b.ba"))); + EXPECT_EQ(FieldValue::StringValue("BB"), value.Get(testutil::Field("b.bb"))); +} + +TEST(FieldValue, GetNothing) { + const FieldValue value = FieldValue::ObjectValueFromMap({ + {"a", FieldValue::StringValue("A")}, + {"b", FieldValue::ObjectValueFromMap({ + {"ba", FieldValue::StringValue("BA")}, + {"bb", FieldValue::StringValue("BB")}, + })}, + }); + EXPECT_EQ(absl::nullopt, value.Get(testutil::Field("aa"))); + EXPECT_EQ(absl::nullopt, value.Get(testutil::Field("a.a"))); +} + } // namespace model } // namespace firestore } // namespace firebase -- cgit v1.2.3