Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Unified Diff: ios/chrome/app/deferred_initialization_runner_unittest.mm

Issue 2217083002: Add sequential dispatching for InitializationRunner (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add test Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/chrome/app/deferred_initialization_runner_unittest.mm
diff --git a/ios/chrome/app/deferred_initialization_runner_unittest.mm b/ios/chrome/app/deferred_initialization_runner_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..0481ea9cf1edfa5c39669d3776ed24fb8fc09dd8
--- /dev/null
+++ b/ios/chrome/app/deferred_initialization_runner_unittest.mm
@@ -0,0 +1,107 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/app/deferred_initialization_runner.h"
+
+#include "base/time/time.h"
+#include "testing/platform_test.h"
+#import "base/test/ios/wait_util.h"
+
+TEST(DeferredInitializationRunnerTest, TestSharedInstance) {
+ EXPECT_TRUE([DeferredInitializationRunner sharedInstance]);
+ // Cancelling a non-existing block does nothing.
+ [[DeferredInitializationRunner sharedInstance]
+ cancelBlockNamed:@"Invalid Name"];
+}
+
+TEST(DeferredInitializationRunnerTest, TestRunBlock) {
+ // Setup.
+ __block BOOL quickFlag = NO;
+ __block BOOL slowFlag = NO;
+ ProceduralBlock quickBlock = ^() {
+ EXPECT_FALSE(quickFlag);
+ quickFlag = YES;
+ };
+ ConditionBlock quickBlockRun = ^BOOL {
+ return quickFlag;
+ };
+ ProceduralBlock slowBlock = ^() {
+ EXPECT_FALSE(slowFlag);
+ slowFlag = YES;
+ };
+ DeferredInitializationRunner* runner =
+ [DeferredInitializationRunner sharedInstance];
+
+ // Action.
+ [runner enqueueBlockNamed:@"quick block" block:quickBlock];
+ [runner enqueueBlockNamed:@"slow block" block:slowBlock];
+
+ // Test.
+ // Waits until |quickBlock| is run.
+ base::test::ios::WaitUntilCondition(quickBlockRun);
+ EXPECT_TRUE(quickFlag);
+ EXPECT_FALSE(slowFlag);
+ EXPECT_EQ(1U, [runner numberOfBlocksRemaining]);
+ [runner runBlockIfNecessary:@"quick block"];
+ [runner runBlockIfNecessary:@"slow block"];
+ EXPECT_TRUE(quickFlag);
+ EXPECT_TRUE(slowFlag);
+ EXPECT_EQ(0U, [runner numberOfBlocksRemaining]);
+}
+
+TEST(DeferredInitializationRunnerTest, TestCancelBlock) {
+ // Setup.
+ __block BOOL blockFinished = NO;
+ DeferredInitializationRunner* runner =
+ [DeferredInitializationRunner sharedInstance];
+ [runner enqueueBlockNamed:@"cancel me"
+ block:^() {
+ blockFinished = YES;
+ }];
+ ASSERT_EQ(1U, [runner numberOfBlocksRemaining]);
+
+ // Action.
+ [runner cancelBlockNamed:@"cancel me"];
+
+ // Test.
+ EXPECT_FALSE(blockFinished);
+ EXPECT_EQ(0U, [runner numberOfBlocksRemaining]);
+}
+
+TEST(DeferredInitializationRunnerTest, TestCancelledBlockDoNothing) {
+ // Setup.
+ __block BOOL blockFinished = NO;
+ DeferredInitializationRunner* runner =
+ [DeferredInitializationRunner sharedInstance];
+ [runner enqueueBlockNamed:@"cancel me"
+ block:^() {
+ blockFinished = YES;
+ }];
+
+ // Action.
+ [runner cancelBlockNamed:@"cancel me"];
+ [runner runBlockIfNecessary:@"cancel me"];
+
+ // Test.
+ EXPECT_FALSE(blockFinished);
+}
+
+TEST(DeferredInitializationRunnerTest, TestSecondBlockInvalidatesFirst) {
+ // Setup.
+ __block int blockRunCount = 0;
+ ProceduralBlock runBlock = ^() {
+ ++blockRunCount;
+ };
+ DeferredInitializationRunner* runner =
+ [DeferredInitializationRunner sharedInstance];
+
+ // Action.
+ [runner enqueueBlockNamed:@"multiple" block:runBlock];
+ [runner enqueueBlockNamed:@"multiple" block:runBlock];
+
+ // Test.
+ [runner runBlockIfNecessary:@"multiple"];
+ EXPECT_EQ(0U, [runner numberOfBlocksRemaining]);
+ EXPECT_EQ(1, blockRunCount);
+}

Powered by Google App Engine
This is Rietveld 408576698