diff options
author | zxu <zxu@google.com> | 2018-04-23 10:51:52 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-23 10:51:52 -0400 |
commit | 12d9358c96d8de816254992b20d263e8ad9aac63 (patch) | |
tree | 4dde38730c95d6ec2582ccdbc1eba12a6f432619 /Firestore/core/test | |
parent | b2cf8c6d3df3ebe792c4b3932f05ddfc7f477959 (diff) |
Update `FieldValue` For Porting `Mutation`s to C++ (#1144)
* update FieldValue for Mutation implementation
* address changes
* address changes
* address change
Diffstat (limited to 'Firestore/core/test')
-rw-r--r-- | Firestore/core/test/firebase/firestore/model/field_value_test.cc | 88 |
1 files changed, 88 insertions, 0 deletions
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 <climits> #include <vector> +#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 |