| // Copyright 2014 The Flutter 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 "IntegrationTestIosTest.h" |
| #import "IntegrationTestPlugin.h" |
| |
| @interface IntegrationTestIosTest() |
| @property (nonatomic) IntegrationTestPlugin *integrationTestPlugin; |
| @end |
| |
| @implementation IntegrationTestIosTest |
| |
| - (instancetype)initWithScreenshotDelegate:(id<FLTIntegrationTestScreenshotDelegate>)delegate { |
| self = [super init]; |
| _integrationTestPlugin = [IntegrationTestPlugin instance]; |
| _integrationTestPlugin.screenshotDelegate = delegate; |
| return self; |
| } |
| |
| - (instancetype)init { |
| return [self initWithScreenshotDelegate:nil]; |
| } |
| |
| - (BOOL)testIntegrationTest:(NSString **)testResult { |
| IntegrationTestPlugin *integrationTestPlugin = self.integrationTestPlugin; |
| |
| UIViewController *rootViewController = |
| [[[[UIApplication sharedApplication] delegate] window] rootViewController]; |
| if (![rootViewController isKindOfClass:[FlutterViewController class]]) { |
| NSLog(@"expected FlutterViewController as rootViewController."); |
| return NO; |
| } |
| FlutterViewController *flutterViewController = (FlutterViewController *)rootViewController; |
| [integrationTestPlugin setupChannels:flutterViewController.engine.binaryMessenger]; |
| while (!integrationTestPlugin.testResults) { |
| CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.f, NO); |
| } |
| NSDictionary<NSString *, NSString *> *testResults = integrationTestPlugin.testResults; |
| NSMutableArray<NSString *> *passedTests = [NSMutableArray array]; |
| NSMutableArray<NSString *> *failedTests = [NSMutableArray array]; |
| NSLog(@"==================== Test Results ====================="); |
| for (NSString *test in testResults.allKeys) { |
| NSString *result = testResults[test]; |
| if ([result isEqualToString:@"success"]) { |
| NSLog(@"%@ passed.", test); |
| [passedTests addObject:test]; |
| } else { |
| NSLog(@"%@ failed: %@", test, result); |
| [failedTests addObject:test]; |
| } |
| } |
| NSLog(@"================== Test Results End ===================="); |
| BOOL testPass = failedTests.count == 0; |
| if (!testPass && testResult) { |
| *testResult = |
| [NSString stringWithFormat:@"Detected failed integration test(s) %@ among %@", |
| failedTests.description, testResults.allKeys.description]; |
| } |
| return testPass; |
| } |
| |
| @end |