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

Side by Side 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: gyp 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ios/chrome/app/deferred_initialization_runner.h"
6
7 #import "base/test/ios/wait_util.h"
8 #include "base/time/time.h"
9 #include "testing/platform_test.h"
10
11 TEST(DeferredInitializationRunnerTest, TestSharedInstance) {
12 EXPECT_TRUE([DeferredInitializationRunner sharedInstance]);
13 // Cancelling a non-existing block does nothing.
14 [[DeferredInitializationRunner sharedInstance]
15 cancelBlockNamed:@"Invalid Name"];
16 }
17
18 TEST(DeferredInitializationRunnerTest, TestRunBlockSequentially) {
19 // Setup.
20 __block BOOL firstFlag = NO;
21 __block BOOL secondFlag = NO;
22 DeferredInitializationRunner* runner =
23 [DeferredInitializationRunner sharedInstance];
24 ProceduralBlock firstBlock = ^() {
25 EXPECT_FALSE(firstFlag);
26 firstFlag = YES;
27 };
28 ProceduralBlock secondBlock = ^() {
29 EXPECT_FALSE(secondFlag);
30 secondFlag = YES;
31 };
32 ConditionBlock secondBlockRun = ^BOOL {
33 return secondFlag;
34 };
35 runner.delayBetweenBlocks = 0.01;
36
37 [runner enqueueBlockNamed:@"first block" block:firstBlock];
38 [runner enqueueBlockNamed:@"second block" block:secondBlock];
39
40 ASSERT_FALSE(firstFlag);
41 ASSERT_FALSE(secondFlag);
42 EXPECT_EQ(2U, [runner numberOfBlocksRemaining]);
43
44 // Action.
45 base::test::ios::WaitUntilCondition(secondBlockRun);
46
47 // Test.
pkl (ping after 24h if needed) 2016/08/08 23:41:54 It would be helpful to explain the expected result
gambard 2016/08/09 08:17:05 Yes, I have adapted the old tests but I forget to
48 EXPECT_TRUE(firstFlag);
49 EXPECT_TRUE(secondFlag);
50 EXPECT_EQ(0U, [runner numberOfBlocksRemaining]);
51 }
52
53 TEST(DeferredInitializationRunnerTest, TestRunBlock) {
54 // Setup.
55 __block BOOL quickFlag = NO;
56 __block BOOL slowFlag = NO;
57 DeferredInitializationRunner* runner =
58 [DeferredInitializationRunner sharedInstance];
59 ProceduralBlock quickBlock = ^() {
60 EXPECT_FALSE(quickFlag);
61 quickFlag = YES;
62 // Make sure we have time to go back to this test before running the second
63 // task.
64 runner.delayBetweenBlocks = 1;
pkl (ping after 24h if needed) 2016/08/08 23:41:54 This will cause this unit test to take at least 1
gambard 2016/08/09 08:17:05 No. The 1s delay is to ensure the next block won't
65 };
66 ConditionBlock quickBlockRun = ^BOOL {
67 return quickFlag;
68 };
69 ProceduralBlock slowBlock = ^() {
70 EXPECT_FALSE(slowFlag);
71 slowFlag = YES;
72 };
73 runner.delayBetweenBlocks = 0.01;
74
75 // Action.
76 [runner enqueueBlockNamed:@"quick block" block:quickBlock];
77 [runner enqueueBlockNamed:@"slow block" block:slowBlock];
78
79 // Test.
80 base::test::ios::WaitUntilCondition(quickBlockRun);
81 EXPECT_TRUE(quickFlag);
82 EXPECT_FALSE(slowFlag);
83 EXPECT_EQ(1U, [runner numberOfBlocksRemaining]);
84 [runner runBlockIfNecessary:@"quick block"];
85 [runner runBlockIfNecessary:@"slow block"];
86 EXPECT_TRUE(quickFlag);
87 EXPECT_TRUE(slowFlag);
88 EXPECT_EQ(0U, [runner numberOfBlocksRemaining]);
89 }
90
91 TEST(DeferredInitializationRunnerTest, TestCancelBlock) {
92 // Setup.
93 __block BOOL blockFinished = NO;
pkl (ping after 24h if needed) 2016/08/08 23:41:53 You should set runner.delayBetweenBlocks = 0.01 he
gambard 2016/08/09 08:17:05 Done.
94 DeferredInitializationRunner* runner =
95 [DeferredInitializationRunner sharedInstance];
96 [runner enqueueBlockNamed:@"cancel me"
97 block:^() {
98 blockFinished = YES;
99 }];
100 ASSERT_EQ(1U, [runner numberOfBlocksRemaining]);
101
102 // Action.
103 [runner cancelBlockNamed:@"cancel me"];
104
105 // Test.
106 EXPECT_FALSE(blockFinished);
107 EXPECT_EQ(0U, [runner numberOfBlocksRemaining]);
108 }
109
110 TEST(DeferredInitializationRunnerTest, TestCancelledBlockDoNothing) {
111 // Setup.
112 __block BOOL blockFinished = NO;
113 DeferredInitializationRunner* runner =
114 [DeferredInitializationRunner sharedInstance];
115 [runner enqueueBlockNamed:@"cancel me"
116 block:^() {
117 blockFinished = YES;
118 }];
119
120 // Action.
121 [runner cancelBlockNamed:@"cancel me"];
122 [runner runBlockIfNecessary:@"cancel me"];
123
124 // Test.
pkl (ping after 24h if needed) 2016/08/08 23:41:53 Explain expected results, e.g. "Block should never
gambard 2016/08/09 08:17:05 Done.
125 EXPECT_FALSE(blockFinished);
126 }
127
128 TEST(DeferredInitializationRunnerTest, TestSecondBlockInvalidatesFirst) {
129 // Setup.
130 __block int blockRunCount = 0;
131 ProceduralBlock runBlock = ^() {
132 ++blockRunCount;
133 };
134 DeferredInitializationRunner* runner =
135 [DeferredInitializationRunner sharedInstance];
136
137 // Action.
138 [runner enqueueBlockNamed:@"multiple" block:runBlock];
139 [runner enqueueBlockNamed:@"multiple" block:runBlock];
140
141 // Test.
pkl (ping after 24h if needed) 2016/08/08 23:41:54 Explain expected results, e.g. "runBlock was execu
gambard 2016/08/09 08:17:05 Done.
142 [runner runBlockIfNecessary:@"multiple"];
143 EXPECT_EQ(0U, [runner numberOfBlocksRemaining]);
144 EXPECT_EQ(1, blockRunCount);
145 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698