OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "ios/chrome/test/earl_grey/chrome_test_case.h" | 5 #import "ios/chrome/test/earl_grey/chrome_test_case.h" |
6 | 6 |
7 #import <objc/runtime.h> | 7 #import <objc/runtime.h> |
8 | 8 |
9 #import <EarlGrey/EarlGrey.h> | 9 #import <EarlGrey/EarlGrey.h> |
10 | 10 |
11 #include "base/mac/scoped_block.h" | 11 #include "base/mac/scoped_block.h" |
12 #include "base/strings/sys_string_conversions.h" | 12 #include "base/strings/sys_string_conversions.h" |
13 #import "ios/chrome/test/app/chrome_test_util.h" | 13 #import "ios/chrome/test/app/chrome_test_util.h" |
14 #include "ios/chrome/test/app/settings_test_util.h" | 14 #include "ios/chrome/test/app/settings_test_util.h" |
15 #include "ios/chrome/test/app/signin_test_util.h" | 15 #include "ios/chrome/test/app/signin_test_util.h" |
16 #import "ios/chrome/test/app/sync_test_util.h" | 16 #import "ios/chrome/test/app/sync_test_util.h" |
17 #import "ios/chrome/test/app/tab_test_util.h" | 17 #import "ios/chrome/test/app/tab_test_util.h" |
18 #import "ios/web/public/test/http_server.h" | 18 #import "ios/web/public/test/http_server.h" |
19 | 19 |
| 20 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 21 #error "This file requires ARC support." |
| 22 #endif |
| 23 |
20 namespace { | 24 namespace { |
21 | 25 |
22 NSString* const kFlakyEarlGreyTestTargetSuffix = @"_flaky_egtests"; | 26 NSString* const kFlakyEarlGreyTestTargetSuffix = @"_flaky_egtests"; |
23 | 27 |
24 // Contains a list of test names that run in multitasking test suite. | 28 // Contains a list of test names that run in multitasking test suite. |
25 NSArray* whiteListedMultitaskingTests = @[ | 29 NSArray* whiteListedMultitaskingTests = @[ |
26 // Integration tests | 30 // Integration tests |
27 @"testContextMenuOpenInNewTab", // ContextMenuTestCase | 31 @"testContextMenuOpenInNewTab", // ContextMenuTestCase |
28 @"testSwitchToMain", // CookiesTestCase | 32 @"testSwitchToMain", // CookiesTestCase |
29 @"testSwitchToIncognito", // CookiesTestCase | 33 @"testSwitchToIncognito", // CookiesTestCase |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 @"testOpenAndCloseToolsMenu", // ToolsPopupMenuTestCase | 73 @"testOpenAndCloseToolsMenu", // ToolsPopupMenuTestCase |
70 @"testUserFeedbackPageOpenPrivacyPolicy", // UserFeedbackTestCase | 74 @"testUserFeedbackPageOpenPrivacyPolicy", // UserFeedbackTestCase |
71 @"testVersion", // WebUITestCase | 75 @"testVersion", // WebUITestCase |
72 ]; | 76 ]; |
73 | 77 |
74 const CFTimeInterval kDrainTimeout = 5; | 78 const CFTimeInterval kDrainTimeout = 5; |
75 } // namespace | 79 } // namespace |
76 | 80 |
77 @interface ChromeTestCase () { | 81 @interface ChromeTestCase () { |
78 // Block to be executed during object tearDown. | 82 // Block to be executed during object tearDown. |
79 base::mac::ScopedBlock<ProceduralBlock> _tearDownHandler; | 83 ProceduralBlock _tearDownHandler; |
80 | 84 |
81 BOOL _isHTTPServerStopped; | 85 BOOL _isHTTPServerStopped; |
82 BOOL _isMockAuthenticationDisabled; | 86 BOOL _isMockAuthenticationDisabled; |
83 } | 87 } |
84 | 88 |
85 // Cleans up mock authentication. | 89 // Cleans up mock authentication. |
86 + (void)disableMockAuthentication; | 90 + (void)disableMockAuthentication; |
87 | 91 |
88 // Sets up mock authentication. | 92 // Sets up mock authentication. |
89 + (void)enableMockAuthentication; | 93 + (void)enableMockAuthentication; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 [[self class] disableMockAuthentication]; | 154 [[self class] disableMockAuthentication]; |
151 [[self class] stopHTTPServer]; | 155 [[self class] stopHTTPServer]; |
152 [super tearDown]; | 156 [super tearDown]; |
153 } | 157 } |
154 | 158 |
155 // Set up called once per test, to open a new tab. | 159 // Set up called once per test, to open a new tab. |
156 - (void)setUp { | 160 - (void)setUp { |
157 [super setUp]; | 161 [super setUp]; |
158 _isHTTPServerStopped = NO; | 162 _isHTTPServerStopped = NO; |
159 _isMockAuthenticationDisabled = NO; | 163 _isMockAuthenticationDisabled = NO; |
160 _tearDownHandler.reset(); | 164 _tearDownHandler = nil; |
161 | 165 |
162 chrome_test_util::OpenNewTab(); | 166 chrome_test_util::OpenNewTab(); |
163 [[GREYUIThreadExecutor sharedInstance] drainUntilIdle]; | 167 [[GREYUIThreadExecutor sharedInstance] drainUntilIdle]; |
164 } | 168 } |
165 | 169 |
166 // Tear down called once per test, to close all tabs and menus, and clear the | 170 // Tear down called once per test, to close all tabs and menus, and clear the |
167 // tracked tests accounts. It also makes sure mock authentication and the HTTP | 171 // tracked tests accounts. It also makes sure mock authentication and the HTTP |
168 // server are running. | 172 // server are running. |
169 - (void)tearDown { | 173 - (void)tearDown { |
170 if (_tearDownHandler) { | 174 if (_tearDownHandler) { |
171 _tearDownHandler.get()(); | 175 _tearDownHandler(); |
172 } | 176 } |
173 | 177 |
174 // Clear any remaining test accounts and signed in users. | 178 // Clear any remaining test accounts and signed in users. |
175 chrome_test_util::SignOutAndClearAccounts(); | 179 chrome_test_util::SignOutAndClearAccounts(); |
176 | 180 |
177 // Re-start anything that was disabled this test, so it is running when the | 181 // Re-start anything that was disabled this test, so it is running when the |
178 // next test starts. | 182 // next test starts. |
179 if (_isHTTPServerStopped) { | 183 if (_isHTTPServerStopped) { |
180 [[self class] startHTTPServer]; | 184 [[self class] startHTTPServer]; |
181 _isHTTPServerStopped = NO; | 185 _isHTTPServerStopped = NO; |
182 } | 186 } |
183 if (_isMockAuthenticationDisabled) { | 187 if (_isMockAuthenticationDisabled) { |
184 [[self class] enableMockAuthentication]; | 188 [[self class] enableMockAuthentication]; |
185 _isMockAuthenticationDisabled = NO; | 189 _isMockAuthenticationDisabled = NO; |
186 } | 190 } |
187 | 191 |
188 // Clean up any UI that may remain open so the next test starts in a clean | 192 // Clean up any UI that may remain open so the next test starts in a clean |
189 // state. | 193 // state. |
190 [[self class] removeAnyOpenMenusAndInfoBars]; | 194 [[self class] removeAnyOpenMenusAndInfoBars]; |
191 [[self class] closeAllTabs]; | 195 [[self class] closeAllTabs]; |
192 [super tearDown]; | 196 [super tearDown]; |
193 } | 197 } |
194 | 198 |
195 #pragma mark - Public methods | 199 #pragma mark - Public methods |
196 | 200 |
197 - (void)setTearDownHandler:(ProceduralBlock)tearDownHandler { | 201 - (void)setTearDownHandler:(ProceduralBlock)tearDownHandler { |
198 // Enforce that only one |_tearDownHandler| is set per test. | 202 // Enforce that only one |_tearDownHandler| is set per test. |
199 DCHECK(!_tearDownHandler); | 203 DCHECK(!_tearDownHandler); |
200 _tearDownHandler.reset([tearDownHandler copy]); | 204 _tearDownHandler = [tearDownHandler copy]; |
201 } | 205 } |
202 | 206 |
203 + (void)removeAnyOpenMenusAndInfoBars { | 207 + (void)removeAnyOpenMenusAndInfoBars { |
204 chrome_test_util::RemoveAllInfoBars(); | 208 chrome_test_util::RemoveAllInfoBars(); |
205 chrome_test_util::ClearPresentedState(); | 209 chrome_test_util::ClearPresentedState(); |
206 // After programatically removing UI elements, allow Earl Grey's | 210 // After programatically removing UI elements, allow Earl Grey's |
207 // UI synchronization to become idle, so subsequent steps won't start before | 211 // UI synchronization to become idle, so subsequent steps won't start before |
208 // the UI is in a good state. | 212 // the UI is in a good state. |
209 [[GREYUIThreadExecutor sharedInstance] | 213 [[GREYUIThreadExecutor sharedInstance] |
210 drainUntilIdleWithTimeout:kDrainTimeout]; | 214 drainUntilIdleWithTimeout:kDrainTimeout]; |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
294 [NSInvocation invocationWithMethodSignature:methodSignature]; | 298 [NSInvocation invocationWithMethodSignature:methodSignature]; |
295 invocation.selector = selector; | 299 invocation.selector = selector; |
296 [multitaskingTestNames addObject:invocation]; | 300 [multitaskingTestNames addObject:invocation]; |
297 } | 301 } |
298 } | 302 } |
299 free(methods); | 303 free(methods); |
300 return multitaskingTestNames; | 304 return multitaskingTestNames; |
301 } | 305 } |
302 | 306 |
303 @end | 307 @end |
OLD | NEW |