| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /*
- * Copyright 2020 Google LLC
- *
- * 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.
- */
- import FirebaseFirestore
- import FirebaseFirestoreSwift
- import Foundation
- import XCTest
- class ConditionalConformanceTests: XCTestCase {
- func testBaseline() {
- struct Model: Codable, Equatable, Hashable {
- let x: Int
- }
- var dict = [Model: String]()
- dict[Model(x: 42)] = "foo"
- XCTAssertEqual("foo", dict[Model(x: 42)])
- }
- #if compiler(>=5.1)
- func testDocumentIDOfString() {
- struct Model: Codable, Equatable, Hashable {
- @DocumentID var x: String?
- }
- XCTAssertTrue(Model(x: "42") == Model(x: "42"))
- XCTAssertFalse(Model(x: "42") == Model(x: "1"))
- let dict: [Model: String] = [Model(x: "42"): "foo"]
- XCTAssertEqual("foo", dict[Model(x: "42")])
- }
- func testDocumentIDOfDocumentReference() {
- // This works because `FIRDocumentReference` implements a `hash` selector
- // and that's automatically bridged to conform to Swift `Hashable`.
- struct Model: Codable, Equatable, Hashable {
- @DocumentID var x: DocumentReference?
- }
- let doc1 = FSTTestDocRef("abc/xyz")
- let doc2 = FSTTestDocRef("abc/xyz")
- let doc3 = FSTTestDocRef("abc/def")
- XCTAssertTrue(Model(x: doc1) == Model(x: doc2))
- XCTAssertTrue(Model(x: doc1) != Model(x: doc3))
- XCTAssertFalse(Model(x: doc1) == Model(x: doc3))
- let dict: [Model: String] = [Model(x: doc1): "foo"]
- XCTAssertEqual("foo", dict[Model(x: doc2)])
- }
- func testExplicitNull() {
- struct Model: Codable, Equatable, Hashable {
- @ExplicitNull var x: Int?
- }
- XCTAssertTrue(Model(x: 42) == Model(x: 42))
- XCTAssertFalse(Model(x: 42) == Model(x: 1))
- let dict: [Model: String] = [Model(x: 42): "foo"]
- XCTAssertEqual("foo", dict[Model(x: 42)])
- }
- func testServerTimestampOfTimestamp() {
- struct Model: Codable, Equatable, Hashable {
- @ServerTimestamp var x: Timestamp?
- }
- let ts1 = Timestamp(seconds: 123, nanoseconds: 456)
- let ts2 = ts1.copy() as! Timestamp
- let ts3 = Timestamp(seconds: 789, nanoseconds: 0)
- XCTAssertTrue(Model(x: ts1) == Model(x: ts2))
- XCTAssertTrue(Model(x: ts1) != Model(x: ts3))
- XCTAssertFalse(Model(x: ts1) == Model(x: ts3))
- let dict: [Model: String] = [Model(x: ts1): "foo"]
- XCTAssertEqual("foo", dict[Model(x: ts2)])
- }
- func testServerTimestampOfDate() {
- struct Model: Codable, Equatable, Hashable {
- @ServerTimestamp var x: Date?
- }
- let ts1 = Date(timeIntervalSince1970: 42.0)
- let ts2 = Date(timeIntervalSince1970: 42.0)
- let ts3 = Date(timeIntervalSince1970: 100.0)
- XCTAssertTrue(Model(x: ts1) == Model(x: ts2))
- XCTAssertTrue(Model(x: ts1) != Model(x: ts3))
- XCTAssertFalse(Model(x: ts1) == Model(x: ts3))
- let dict: [Model: String] = [Model(x: ts1): "foo"]
- XCTAssertEqual("foo", dict[Model(x: ts2)])
- }
- #endif // compiler(>=5.1)
- }
|