OLD | NEW |
---|---|
(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 } | |
OLD | NEW |