aboutsummaryrefslogtreecommitdiffhomepage
path: root/Example/Auth/Tests/FIRAuthDispatcherTests.m
diff options
context:
space:
mode:
authorGravatar Paul Beusterien <paulbeusterien@google.com>2017-05-15 12:27:07 -0700
committerGravatar Paul Beusterien <paulbeusterien@google.com>2017-05-15 12:27:07 -0700
commit98ba64449a632518bd2b86fe8d927f4a960d3ddc (patch)
tree131d9c4272fa6179fcda6c5a33fcb3b1bd57ad2e /Example/Auth/Tests/FIRAuthDispatcherTests.m
parent32461366c9e204a527ca05e6e9b9404a2454ac51 (diff)
Initial
Diffstat (limited to 'Example/Auth/Tests/FIRAuthDispatcherTests.m')
-rw-r--r--Example/Auth/Tests/FIRAuthDispatcherTests.m105
1 files changed, 105 insertions, 0 deletions
diff --git a/Example/Auth/Tests/FIRAuthDispatcherTests.m b/Example/Auth/Tests/FIRAuthDispatcherTests.m
new file mode 100644
index 0000000..9b0abc4
--- /dev/null
+++ b/Example/Auth/Tests/FIRAuthDispatcherTests.m
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2017 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.
+ */
+
+#import <XCTest/XCTest.h>
+
+#import "FIRAuthDispatcher.h"
+
+/** @var kMaxDifferenceBetweenTimeIntervals
+ @brief The maximum difference between time intervals (in seconds), after which they will be
+ considered different.
+ */
+static const NSTimeInterval kMaxDifferenceBetweenTimeIntervals = 0.1;
+
+/** @var kTestDelay
+ @brief Fake time delay before tasks are dispatched.
+ */
+NSTimeInterval kTestDelay = 0.1;
+
+/** @var kExpectationTimeout
+ @brief The maximum time waiting for expectations to fulfill.
+ */
+static const NSTimeInterval kExpectationTimeout = 1;
+
+id<OS_dispatch_queue> testWorkQueue;
+
+/** @class FIRAuthDispatcherTests
+ @brief Tests for @c FIRAuthDispatcher.
+ */
+@interface FIRAuthDispatcherTests : XCTestCase
+@end
+@implementation FIRAuthDispatcherTests
+
+- (void)setUp {
+ [super setUp];
+ testWorkQueue = dispatch_queue_create("test.work.queue", NULL);
+}
+
+/** @fn testSharedInstance
+ @brief Tests @c sharedInstance returns the same object.
+ */
+- (void)testSharedInstance {
+ FIRAuthDispatcher *instance1 = [FIRAuthDispatcher sharedInstance];
+ FIRAuthDispatcher *instance2 = [FIRAuthDispatcher sharedInstance];
+ XCTAssertEqual(instance1, instance2);
+}
+
+/** @fn testDispatchAfterDelay
+ @brief Tests @c dispatchAfterDelay indeed dispatches the specified task after the provided
+ delay.
+ */
+- (void)testDispatchAfterDelay {
+ FIRAuthDispatcher *dispatcher = [FIRAuthDispatcher sharedInstance];
+ XCTestExpectation *expectation = [self expectationWithDescription:@"dispatchAfterCallback"];
+ NSDate *dateBeforeDispatch = [NSDate date];
+ dispatcher.dispatchAfterImplementation = nil;
+ [dispatcher dispatchAfterDelay:kTestDelay
+ queue:testWorkQueue
+ task:^{
+ NSTimeInterval timeSinceDispatch = fabs([dateBeforeDispatch timeIntervalSinceNow]) - kTestDelay;
+ XCTAssert(timeSinceDispatch < kMaxDifferenceBetweenTimeIntervals);
+ [expectation fulfill];
+ }];
+ [self waitForExpectationsWithTimeout:kExpectationTimeout handler:nil];
+ dispatcher = nil;
+}
+
+/** @fn testSetDispatchAfterImplementation
+ @brief Tests taht @c dispatchAfterImplementation indeed configures a custom implementation for
+ @c dispatchAfterDelay.
+ */
+- (void)testSetDispatchAfterImplementation {
+ FIRAuthDispatcher *dispatcher = [FIRAuthDispatcher sharedInstance];
+ XCTestExpectation *expectation1 = [self expectationWithDescription:@"setDispatchTokenCallback"];
+ [dispatcher setDispatchAfterImplementation:^(NSTimeInterval delay,
+ id<OS_dispatch_queue> _Nonnull queue,
+ void (^task)(void)) {
+ XCTAssertEqual(kTestDelay, delay);
+ XCTAssertEqual(testWorkQueue, queue);
+ [expectation1 fulfill];
+ }];
+ [dispatcher dispatchAfterDelay:kTestDelay
+ queue:testWorkQueue
+ task:^{
+ // Fail to ensure this code is never executed.
+ XCTFail();
+ }];
+ [self waitForExpectationsWithTimeout:kExpectationTimeout handler:nil];
+ dispatcher.dispatchAfterImplementation = nil;;
+}
+
+
+@end