Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 61e8b35

Browse files
committed
just account for the extra lifecycle if first run ever
1 parent 334e1db commit 61e8b35

File tree

1 file changed

+20
-40
lines changed

1 file changed

+20
-40
lines changed

testing/scenario_app/ios/Scenarios/ScenariosTests/AppLifecycleTests.m

Lines changed: 20 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,25 @@ - (void)setUp {
4040
self.continueAfterFailure = NO;
4141
}
4242

43-
- (void)ensureApplicationIsInActiveState {
44-
// Since this test checks for view controller and application lifecycles, the starting point
45-
// must be well defined.
46-
47-
// Make this check after setting the root view controller since it seems to just hang if
48-
// done in setUp.
43+
- (NSArray*)initialPresentLifecycles {
44+
NSMutableArray* expectations =
45+
[NSMutableArray arrayWithObject:[[XCAppLifecycleTestExpectation alloc]
46+
initForLifecycle:@"AppLifecycleState.inactive"
47+
forStep:@"showing a FlutterViewController"]];
48+
49+
// If the test is the very first test to run in the test target, the UIApplication may
50+
// be in inactive state. Haven't found a good way to force it to go to active state.
51+
// So just account for it in the initial lifecycle events with an extra resumed since
52+
// the FlutterViewController tracks all view controller and application lifecycle events.
4953
if ([UIApplication sharedApplication].applicationState != UIApplicationStateActive) {
50-
NSLog(@"Initial application state is currently %zd. Waiting for active.",
51-
[UIApplication sharedApplication].applicationState);
52-
// Don't have to inspect the notification since the typed notification itself indicates the
53-
// desired state.
54-
// [self expectationForNotification:UIApplicationDidBecomeActiveNotification
55-
// object:self
56-
// handler:nil];
57-
[self keyValueObservingExpectationForObject:[UIApplication sharedApplication] keyPath:@"applicationState" expectedValue:nil];
58-
[self waitForExpectationsWithTimeout:30.0 handler:nil];
54+
[expectations addObject:[[XCAppLifecycleTestExpectation alloc]
55+
initForLifecycle:@"AppLifecycleState.resumed"
56+
forStep:@"showing a FlutterViewController"]];
5957
}
60-
XCTAssertEqual([UIApplication sharedApplication].applicationState, UIApplicationStateActive);
58+
[expectations addObject:[[XCAppLifecycleTestExpectation alloc]
59+
initForLifecycle:@"AppLifecycleState.resumed"
60+
forStep:@"showing a FlutterViewController"]];
61+
return expectations;
6162
}
6263

6364
- (void)testDismissedFlutterViewControllerNotRespondingToApplicationLifecycle {
@@ -73,17 +74,10 @@ - (void)testDismissedFlutterViewControllerNotRespondingToApplicationLifecycle {
7374
application.delegate.window.rootViewController = rootVC;
7475
FlutterEngine* engine = rootVC.engine;
7576

76-
[self ensureApplicationIsInActiveState];
77-
7877
NSMutableArray* lifecycleExpectations = [NSMutableArray arrayWithCapacity:10];
7978

8079
// Expected sequence from showing the FlutterViewController is inactive and resumed.
81-
[lifecycleExpectations addObjectsFromArray:@[
82-
[[XCAppLifecycleTestExpectation alloc] initForLifecycle:@"AppLifecycleState.inactive"
83-
forStep:@"showing a FlutterViewController"],
84-
[[XCAppLifecycleTestExpectation alloc] initForLifecycle:@"AppLifecycleState.resumed"
85-
forStep:@"showing a FlutterViewController"]
86-
]];
80+
[lifecycleExpectations addObjectsFromArray:[self initialPresentLifecycles]];
8781

8882
[engine.lifecycleChannel setMessageHandler:^(id message, FlutterReply callback) {
8983
if (lifecycleExpectations.count == 0) {
@@ -217,17 +211,10 @@ - (void)testVisibleFlutterViewControllerRespondsToApplicationLifecycle {
217211
application.delegate.window.rootViewController = rootVC;
218212
FlutterEngine* engine = rootVC.engine;
219213

220-
[self ensureApplicationIsInActiveState];
221-
222214
NSMutableArray* lifecycleExpectations = [NSMutableArray arrayWithCapacity:10];
223215

224216
// Expected sequence from showing the FlutterViewController is inactive and resumed.
225-
[lifecycleExpectations addObjectsFromArray:@[
226-
[[XCAppLifecycleTestExpectation alloc] initForLifecycle:@"AppLifecycleState.inactive"
227-
forStep:@"showing a FlutterViewController"],
228-
[[XCAppLifecycleTestExpectation alloc] initForLifecycle:@"AppLifecycleState.resumed"
229-
forStep:@"showing a FlutterViewController"]
230-
]];
217+
[lifecycleExpectations addObjectsFromArray:[self initialPresentLifecycles]];
231218

232219
[engine.lifecycleChannel setMessageHandler:^(id message, FlutterReply callback) {
233220
if (lifecycleExpectations.count == 0) {
@@ -327,17 +314,10 @@ - (void)testFlutterViewControllerDetachingSendsApplicationLifecycle {
327314
application.delegate.window.rootViewController = rootVC;
328315
FlutterEngine* engine = rootVC.engine;
329316

330-
[self ensureApplicationIsInActiveState];
331-
332317
NSMutableArray* lifecycleExpectations = [NSMutableArray arrayWithCapacity:10];
333318

334319
// Expected sequence from showing the FlutterViewController is inactive and resumed.
335-
[lifecycleExpectations addObjectsFromArray:@[
336-
[[XCAppLifecycleTestExpectation alloc] initForLifecycle:@"AppLifecycleState.inactive"
337-
forStep:@"showing a FlutterViewController"],
338-
[[XCAppLifecycleTestExpectation alloc] initForLifecycle:@"AppLifecycleState.resumed"
339-
forStep:@"showing a FlutterViewController"]
340-
]];
320+
[lifecycleExpectations addObjectsFromArray:[self initialPresentLifecycles]];
341321

342322
[engine.lifecycleChannel setMessageHandler:^(id message, FlutterReply callback) {
343323
if (lifecycleExpectations.count == 0) {

0 commit comments

Comments
 (0)