aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/core
diff options
context:
space:
mode:
Diffstat (limited to 'Firestore/core')
-rw-r--r--Firestore/core/src/firebase/firestore/model/transform_operations.h101
-rw-r--r--Firestore/core/test/firebase/firestore/model/CMakeLists.txt2
-rw-r--r--Firestore/core/test/firebase/firestore/model/field_transform_test.cc39
-rw-r--r--Firestore/core/test/firebase/firestore/model/transform_operations_test.cc54
4 files changed, 43 insertions, 153 deletions
diff --git a/Firestore/core/src/firebase/firestore/model/transform_operations.h b/Firestore/core/src/firebase/firestore/model/transform_operations.h
index abc8d1b..8eed7ae 100644
--- a/Firestore/core/src/firebase/firestore/model/transform_operations.h
+++ b/Firestore/core/src/firebase/firestore/model/transform_operations.h
@@ -17,14 +17,16 @@
#ifndef FIRESTORE_CORE_SRC_FIREBASE_FIRESTORE_MODEL_TRANSFORM_OPERATIONS_H_
#define FIRESTORE_CORE_SRC_FIREBASE_FIRESTORE_MODEL_TRANSFORM_OPERATIONS_H_
+#if !defined(__OBJC__)
+#error "This header only supports Objective-C++."
+#endif // !defined(__OBJC__)
+
#include <utility>
#include <vector>
-#include "Firestore/core/include/firebase/firestore/timestamp.h"
-
-#if defined(__OBJC__)
#import "Firestore/Source/Model/FSTFieldValue.h"
-#endif
+
+#include "Firestore/core/include/firebase/firestore/timestamp.h"
namespace firebase {
namespace firestore {
@@ -51,36 +53,31 @@ class TransformOperation {
/** Returns the actual type. */
virtual Type type() const = 0;
-// TODO(mikelehen): apply methods require FSTFieldValue which is Obj-C only.
-#if defined(__OBJC__)
/**
* Computes the local transform result against the provided `previousValue`,
* optionally using the provided localWriteTime.
*/
- virtual FSTFieldValue *applyToLocalView(
- FSTFieldValue *previousValue, FIRTimestamp *localWriteTime) const = 0;
+ virtual FSTFieldValue* ApplyToLocalView(
+ FSTFieldValue* previousValue, FIRTimestamp* localWriteTime) const = 0;
/**
* Computes a final transform result after the transform has been acknowledged
* by the server, potentially using the server-provided transformResult.
*/
- virtual FSTFieldValue *applyToRemoteDocument(
- FSTFieldValue *previousValue, FSTFieldValue *transformResult) const = 0;
-#endif
+ virtual FSTFieldValue* ApplyToRemoteDocument(
+ FSTFieldValue* previousValue, FSTFieldValue* transformResult) const = 0;
/** Returns whether the two are equal. */
- virtual bool operator==(const TransformOperation &other) const = 0;
+ virtual bool operator==(const TransformOperation& other) const = 0;
/** Returns whether the two are not equal. */
- bool operator!=(const TransformOperation &other) const {
+ bool operator!=(const TransformOperation& other) const {
return !operator==(other);
}
-#if defined(__OBJC__)
// For Objective-C++ hash; to be removed after migration.
// Do NOT use in C++ code.
virtual NSUInteger Hash() const = 0;
-#endif // defined(__OBJC__)
};
/** Transforms a value into a server-generated timestamp. */
@@ -93,33 +90,29 @@ class ServerTimestampTransform : public TransformOperation {
return Type::ServerTimestamp;
}
-// TODO(mikelehen): apply methods require FSTFieldValue which is Obj-C only.
-#if defined(__OBJC__)
- FSTFieldValue *applyToLocalView(FSTFieldValue *previousValue,
- FIRTimestamp *localWriteTime) const override {
+ FSTFieldValue* ApplyToLocalView(FSTFieldValue* previousValue,
+ FIRTimestamp* localWriteTime) const override {
return [FSTServerTimestampValue
serverTimestampValueWithLocalWriteTime:localWriteTime
previousValue:previousValue];
}
- FSTFieldValue *applyToRemoteDocument(
- FSTFieldValue *previousValue,
- FSTFieldValue *transformResult) const override {
+ FSTFieldValue* ApplyToRemoteDocument(
+ FSTFieldValue* /* previousValue */,
+ FSTFieldValue* transformResult) const override {
return transformResult;
}
-#endif
- bool operator==(const TransformOperation &other) const override {
+ bool operator==(const TransformOperation& other) const override {
// All ServerTimestampTransform objects are equal.
return other.type() == Type::ServerTimestamp;
}
- static const ServerTimestampTransform &Get() {
+ static const ServerTimestampTransform& Get() {
static ServerTimestampTransform shared_instance;
return shared_instance;
}
-#if defined(__OBJC__)
// For Objective-C++ hash; to be removed after migration.
// Do NOT use in C++ code.
NSUInteger Hash() const override {
@@ -127,24 +120,19 @@ class ServerTimestampTransform : public TransformOperation {
// instances are equal.
return 37;
}
-#endif // defined(__OBJC__)
private:
ServerTimestampTransform() {
}
};
-// TODO(mikelehen): ArrayTransform can only be used from Obj-C until we switch
-// to using FieldValue instead of FSTFieldValue.
-#if defined(__OBJC__)
-
/**
* Transforms an array via a union or remove operation (for convenience, we use
* this class for both Type::ArrayUnion and Type::ArrayRemove).
*/
class ArrayTransform : public TransformOperation {
public:
- ArrayTransform(Type type, std::vector<FSTFieldValue *> elements)
+ ArrayTransform(Type type, std::vector<FSTFieldValue*> elements)
: type_(type), elements_(std::move(elements)) {
}
@@ -155,33 +143,34 @@ class ArrayTransform : public TransformOperation {
return type_;
}
- FSTFieldValue *applyToLocalView(FSTFieldValue *previousValue,
- FIRTimestamp *localWriteTime) const override {
- return apply(previousValue);
+ FSTFieldValue* ApplyToLocalView(
+ FSTFieldValue* previousValue,
+ FIRTimestamp* /* localWriteTime */) const override {
+ return Apply(previousValue);
}
- FSTFieldValue *applyToRemoteDocument(
- FSTFieldValue *previousValue,
- FSTFieldValue *transformResult) const override {
+ FSTFieldValue* ApplyToRemoteDocument(
+ FSTFieldValue* previousValue,
+ FSTFieldValue* /* transformResult */) const override {
// The server just sends null as the transform result for array operations,
// so we have to calculate a result the same as we do for local
// applications.
- return apply(previousValue);
+ return Apply(previousValue);
}
- const std::vector<FSTFieldValue *> &elements() const {
+ const std::vector<FSTFieldValue*>& elements() const {
return elements_;
}
- bool operator==(const TransformOperation &other) const override {
+ bool operator==(const TransformOperation& other) const override {
if (other.type() != type()) {
return false;
}
- auto array_transform = static_cast<const ArrayTransform &>(other);
+ auto array_transform = static_cast<const ArrayTransform&>(other);
if (array_transform.elements_.size() != elements_.size()) {
return false;
}
- for (int i = 0; i < elements_.size(); i++) {
+ for (size_t i = 0; i < elements_.size(); i++) {
if (![array_transform.elements_[i] isEqual:elements_[i]]) {
return false;
}
@@ -189,51 +178,48 @@ class ArrayTransform : public TransformOperation {
return true;
}
-#if defined(__OBJC__)
// For Objective-C++ hash; to be removed after migration.
// Do NOT use in C++ code.
NSUInteger Hash() const override {
NSUInteger result = 37;
result = 31 * result + (type() == Type::ArrayUnion ? 1231 : 1237);
- for (FSTFieldValue *element : elements_) {
+ for (FSTFieldValue* element : elements_) {
result = 31 * result + [element hash];
}
return result;
}
-#endif // defined(__OBJC__)
- static const std::vector<FSTFieldValue *> &Elements(
- const TransformOperation &op) {
+ static const std::vector<FSTFieldValue*>& Elements(
+ const TransformOperation& op) {
FIREBASE_ASSERT(op.type() == Type::ArrayUnion ||
op.type() == Type::ArrayRemove);
- return static_cast<const ArrayTransform &>(op).elements();
+ return static_cast<const ArrayTransform&>(op).elements();
}
private:
Type type_;
- std::vector<FSTFieldValue *> elements_;
+ std::vector<FSTFieldValue*> elements_;
/**
* Inspects the provided value, returning a mutable copy of the internal array
* if it's an FSTArrayValue and an empty mutable array if it's nil or any
* other type of FSTFieldValue.
*/
- static NSMutableArray<FSTFieldValue *> *CoercedFieldValuesArray(
- FSTFieldValue *value) {
+ static NSMutableArray<FSTFieldValue*>* CoercedFieldValuesArray(
+ FSTFieldValue* value) {
if ([value isMemberOfClass:[FSTArrayValue class]]) {
return [NSMutableArray
- arrayWithArray:reinterpret_cast<FSTArrayValue *>(value)
- .internalValue];
+ arrayWithArray:reinterpret_cast<FSTArrayValue*>(value).internalValue];
} else {
// coerce to empty array.
return [NSMutableArray array];
}
}
- FSTFieldValue *apply(FSTFieldValue *previousValue) const {
- NSMutableArray<FSTFieldValue *> *result =
+ FSTFieldValue* Apply(FSTFieldValue* previousValue) const {
+ NSMutableArray<FSTFieldValue*>* result =
ArrayTransform::CoercedFieldValuesArray(previousValue);
- for (FSTFieldValue *element : elements_) {
+ for (FSTFieldValue* element : elements_) {
if (type_ == Type::ArrayUnion) {
if (![result containsObject:element]) {
[result addObject:element];
@@ -246,7 +232,6 @@ class ArrayTransform : public TransformOperation {
return [[FSTArrayValue alloc] initWithValueNoCopy:result];
}
};
-#endif
} // namespace model
} // namespace firestore
diff --git a/Firestore/core/test/firebase/firestore/model/CMakeLists.txt b/Firestore/core/test/firebase/firestore/model/CMakeLists.txt
index 9c94677..b38d658 100644
--- a/Firestore/core/test/firebase/firestore/model/CMakeLists.txt
+++ b/Firestore/core/test/firebase/firestore/model/CMakeLists.txt
@@ -20,14 +20,12 @@ cc_test(
document_test.cc
field_mask_test.cc
field_path_test.cc
- field_transform_test.cc
field_value_test.cc
maybe_document_test.cc
no_document_test.cc
precondition_test.cc
resource_path_test.cc
snapshot_version_test.cc
- transform_operations_test.cc
DEPENDS
firebase_firestore_model
)
diff --git a/Firestore/core/test/firebase/firestore/model/field_transform_test.cc b/Firestore/core/test/firebase/firestore/model/field_transform_test.cc
deleted file mode 100644
index b66aeef..0000000
--- a/Firestore/core/test/firebase/firestore/model/field_transform_test.cc
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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 "Firestore/core/src/firebase/firestore/model/field_transform.h"
-#include "Firestore/core/src/firebase/firestore/model/transform_operations.h"
-#include "Firestore/core/test/firebase/firestore/testutil/testutil.h"
-
-#include "absl/memory/memory.h"
-#include "gtest/gtest.h"
-
-namespace firebase {
-namespace firestore {
-namespace model {
-
-TEST(FieldTransform, Getter) {
- FieldTransform transform(testutil::Field("foo"),
- absl::make_unique<ServerTimestampTransform>(
- ServerTimestampTransform::Get()));
-
- EXPECT_EQ(testutil::Field("foo"), transform.path());
- EXPECT_EQ(ServerTimestampTransform::Get(), transform.transformation());
-}
-
-} // namespace model
-} // namespace firestore
-} // namespace firebase
diff --git a/Firestore/core/test/firebase/firestore/model/transform_operations_test.cc b/Firestore/core/test/firebase/firestore/model/transform_operations_test.cc
deleted file mode 100644
index ec0882a..0000000
--- a/Firestore/core/test/firebase/firestore/model/transform_operations_test.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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 "Firestore/core/src/firebase/firestore/model/transform_operations.h"
-
-#include "gtest/gtest.h"
-
-namespace firebase {
-namespace firestore {
-namespace model {
-
-class DummyOperation : public TransformOperation {
- public:
- DummyOperation() {
- }
-
- Type type() const override {
- return Type::Test;
- }
-
- bool operator==(const TransformOperation& other) const override {
- return this == &other;
- }
-};
-
-TEST(TransformOperations, ServerTimestamp) {
- ServerTimestampTransform transform = ServerTimestampTransform::Get();
- EXPECT_EQ(TransformOperation::Type::ServerTimestamp, transform.type());
-
- ServerTimestampTransform another = ServerTimestampTransform::Get();
- DummyOperation dummy;
- EXPECT_EQ(transform, another);
- EXPECT_NE(transform, dummy);
-}
-
-// TODO(mikelehen): Add ArrayTransform test once it no longer depends on
-// FSTFieldValue and can be exposed to C++ code.
-
-} // namespace model
-} // namespace firestore
-} // namespace firebase