aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/core/test
diff options
context:
space:
mode:
authorGravatar Konstantin Varlamov <var-const@users.noreply.github.com>2018-02-09 19:42:28 -0500
committerGravatar GitHub <noreply@github.com>2018-02-09 19:42:28 -0500
commit80033485be537acaf29924f6b717c777b550a418 (patch)
tree25c3cd3cf2d53e98767aa6ea3ae51384327e5245 /Firestore/core/test
parent612d99c759741bd6384102f586aed1b3874cf95b (diff)
C++ port: add C++ equivalent of FSTDocumentKey. (#762)
Also move kDocumentKeyPath to the only point of usage - make it a static member variable of FieldPath.
Diffstat (limited to 'Firestore/core/test')
-rw-r--r--Firestore/core/test/firebase/firestore/model/CMakeLists.txt1
-rw-r--r--Firestore/core/test/firebase/firestore/model/document_key_test.cc153
-rw-r--r--Firestore/core/test/firebase/firestore/model/resource_path_test.cc8
3 files changed, 158 insertions, 4 deletions
diff --git a/Firestore/core/test/firebase/firestore/model/CMakeLists.txt b/Firestore/core/test/firebase/firestore/model/CMakeLists.txt
index 282befd..e73be98 100644
--- a/Firestore/core/test/firebase/firestore/model/CMakeLists.txt
+++ b/Firestore/core/test/firebase/firestore/model/CMakeLists.txt
@@ -16,6 +16,7 @@ cc_test(
firebase_firestore_model_test
SOURCES
database_id_test.cc
+ document_key_test.cc
field_path_test.cc
field_value_test.cc
snapshot_version_test.cc
diff --git a/Firestore/core/test/firebase/firestore/model/document_key_test.cc b/Firestore/core/test/firebase/firestore/model/document_key_test.cc
new file mode 100644
index 0000000..0e0df2d
--- /dev/null
+++ b/Firestore/core/test/firebase/firestore/model/document_key_test.cc
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <initializer_list>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "Firestore/core/src/firebase/firestore/model/document_key.h"
+#include "Firestore/core/src/firebase/firestore/model/resource_path.h"
+#include "gtest/gtest.h"
+
+namespace firebase {
+namespace firestore {
+namespace model {
+
+TEST(DocumentKey, Constructor_Empty) {
+ const DocumentKey default_key;
+ EXPECT_TRUE(default_key.path().empty());
+
+ const auto& empty_key = DocumentKey::Empty();
+ const auto& another_empty_key = DocumentKey::Empty();
+ EXPECT_EQ(default_key, empty_key);
+ EXPECT_EQ(empty_key, another_empty_key);
+ EXPECT_EQ(&empty_key, &another_empty_key);
+}
+
+TEST(DocumentKey, Constructor_FromPath) {
+ ResourcePath path{"rooms", "firestore", "messages", "1"};
+ const DocumentKey key_from_path_copy{path};
+ // path shouldn't have been moved from.
+ EXPECT_FALSE(path.empty());
+ EXPECT_EQ(key_from_path_copy.path(), path);
+
+ const DocumentKey key_from_moved_path{std::move(path)};
+ EXPECT_TRUE(path.empty());
+ EXPECT_FALSE(key_from_moved_path.path().empty());
+ EXPECT_EQ(key_from_path_copy.path(), key_from_moved_path.path());
+}
+
+TEST(DocumentKey, CopyAndMove) {
+ DocumentKey key({"rooms", "firestore", "messages", "1"});
+ const std::string path_string = "rooms/firestore/messages/1";
+ EXPECT_EQ(path_string, key.path().CanonicalString());
+
+ DocumentKey copied = key;
+ EXPECT_EQ(path_string, copied.path().CanonicalString());
+ EXPECT_EQ(key, copied);
+
+ const DocumentKey moved = std::move(key);
+ EXPECT_EQ(path_string, moved.path().CanonicalString());
+ EXPECT_NE(key, moved);
+ EXPECT_TRUE(key.path().empty());
+
+ // Reassignment.
+
+ key = copied;
+ EXPECT_EQ(copied, key);
+ EXPECT_EQ(path_string, key.path().CanonicalString());
+
+ key = {};
+ EXPECT_TRUE(key.path().empty());
+ key = std::move(copied);
+ EXPECT_NE(copied, key);
+ EXPECT_TRUE(copied.path().empty());
+ EXPECT_EQ(path_string, key.path().CanonicalString());
+}
+
+TEST(DocumentKey, Constructor_StaticFactory) {
+ const auto key_from_segments =
+ DocumentKey::FromSegments({"rooms", "firestore", "messages", "1"});
+ const std::string path_string = "rooms/firestore/messages/1";
+ const auto key_from_string = DocumentKey::FromPathString(path_string);
+ EXPECT_EQ(path_string, key_from_string.path().CanonicalString());
+ EXPECT_EQ(path_string, key_from_segments.path().CanonicalString());
+ EXPECT_EQ(key_from_segments, key_from_string);
+
+ const auto from_empty_path = DocumentKey::FromPathString("");
+ EXPECT_EQ(from_empty_path, DocumentKey{});
+}
+
+TEST(DocumentKey, Constructor_BadArguments) {
+ ASSERT_ANY_THROW(DocumentKey(ResourcePath{"foo"}));
+ ASSERT_ANY_THROW(DocumentKey(ResourcePath{"foo", "bar", "baz"}));
+
+ ASSERT_ANY_THROW(DocumentKey::FromSegments({"foo"}));
+ ASSERT_ANY_THROW(DocumentKey::FromSegments({"foo", "bar", "baz"}));
+
+ ASSERT_ANY_THROW(DocumentKey::FromPathString("invalid"));
+ ASSERT_ANY_THROW(DocumentKey::FromPathString("invalid//string"));
+ ASSERT_ANY_THROW(DocumentKey::FromPathString("invalid/key/path"));
+}
+
+TEST(DocumentKey, IsDocumentKey) {
+ EXPECT_TRUE(DocumentKey::IsDocumentKey({}));
+ EXPECT_FALSE(DocumentKey::IsDocumentKey({"foo"}));
+ EXPECT_TRUE(DocumentKey::IsDocumentKey({"foo", "bar"}));
+ EXPECT_FALSE(DocumentKey::IsDocumentKey({"foo", "bar", "baz"}));
+}
+
+TEST(DocumentKey, Comparison) {
+ const DocumentKey abcd({"a", "b", "c", "d"});
+ const DocumentKey abcd_too({"a", "b", "c", "d"});
+ const DocumentKey xyzw({"x", "y", "z", "w"});
+ EXPECT_EQ(abcd, abcd_too);
+ EXPECT_NE(abcd, xyzw);
+
+ const DocumentKey empty;
+ const DocumentKey a({"a", "a"});
+ const DocumentKey b({"b", "b"});
+ const DocumentKey ab({"a", "a", "b", "b"});
+
+ EXPECT_FALSE(empty < empty);
+ EXPECT_TRUE(empty <= empty);
+ EXPECT_TRUE(empty < a);
+ EXPECT_TRUE(empty <= a);
+ EXPECT_TRUE(a > empty);
+ EXPECT_TRUE(a >= empty);
+
+ EXPECT_FALSE(a < a);
+ EXPECT_TRUE(a <= a);
+ EXPECT_FALSE(a > a);
+ EXPECT_TRUE(a >= a);
+ EXPECT_TRUE(a == a);
+ EXPECT_FALSE(a != a);
+
+ EXPECT_TRUE(a < b);
+ EXPECT_TRUE(a <= b);
+ EXPECT_TRUE(b > a);
+ EXPECT_TRUE(b >= a);
+
+ EXPECT_TRUE(a < ab);
+ EXPECT_TRUE(a <= ab);
+ EXPECT_TRUE(ab > a);
+ EXPECT_TRUE(ab >= a);
+}
+
+} // namespace model
+} // namespace firestore
+} // namespace firebase
diff --git a/Firestore/core/test/firebase/firestore/model/resource_path_test.cc b/Firestore/core/test/firebase/firestore/model/resource_path_test.cc
index 378a5e3..637e78e 100644
--- a/Firestore/core/test/firebase/firestore/model/resource_path_test.cc
+++ b/Firestore/core/test/firebase/firestore/model/resource_path_test.cc
@@ -74,7 +74,7 @@ TEST(ResourcePath, Comparison) {
TEST(ResourcePath, Parsing) {
const auto parse = [](const std::pair<std::string, size_t> expected) {
- const auto path = ResourcePath::Parse(expected.first);
+ const auto path = ResourcePath::FromString(expected.first);
return std::make_pair(path.CanonicalString(), path.size());
};
const auto make_expected = [](const std::string& str, const size_t size) {
@@ -92,12 +92,12 @@ TEST(ResourcePath, Parsing) {
expected = make_expected(R"(foo/__!?#@..`..\`/baz)", 3);
EXPECT_EQ(expected, parse(expected));
- EXPECT_EQ(ResourcePath::Parse("/foo/").CanonicalString(), "foo");
+ EXPECT_EQ(ResourcePath::FromString("/foo/").CanonicalString(), "foo");
}
TEST(ResourcePath, ParseFailures) {
- ASSERT_ANY_THROW(ResourcePath::Parse("//"));
- ASSERT_ANY_THROW(ResourcePath::Parse("foo//bar"));
+ ASSERT_ANY_THROW(ResourcePath::FromString("//"));
+ ASSERT_ANY_THROW(ResourcePath::FromString("foo//bar"));
}
} // namespace model