blob: 820497d405ec00a11e08dcbffb2f5c8dc8cfab3c [file] [log] [blame]
// 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 XCTest;
@import integration_test;
#pragma mark - Dynamic tests
INTEGRATION_TEST_IOS_RUNNER(RunnerTests)
@interface RunnerTests (DynamicTests)
@end
@implementation RunnerTests (DynamicTests)
- (void)setUp {
// Verify tests have been dynamically added from FLUTTER_TARGET=integration_test/extended_test.dart
XCTAssertTrue([self respondsToSelector:NSSelectorFromString(@"testVerifyScreenshot")]);
XCTAssertTrue([self respondsToSelector:NSSelectorFromString(@"testVerifyText")]);
XCTAssertTrue([self respondsToSelector:NSSelectorFromString(@"screenshotPlaceholder")]);
}
@end
#pragma mark - Fake test results
@interface IntegrationTestPlugin ()
- (instancetype)initForRegistration;
@end
@interface FLTIntegrationTestRunner ()
@property IntegrationTestPlugin *integrationTestPlugin;
@end
@interface FakeIntegrationTestPlugin : IntegrationTestPlugin
@property(nonatomic, nullable) NSDictionary<NSString *, NSString *> *testResults;
@end
@implementation FakeIntegrationTestPlugin
@synthesize testResults;
- (void)setupChannels:(id<FlutterBinaryMessenger>)binaryMessenger {
}
@end
#pragma mark - Behavior tests
@interface IntegrationTestTests : XCTestCase
@end
@implementation IntegrationTestTests
- (void)testDeprecatedIntegrationTest {
NSString *testResult;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
BOOL testPass = [[IntegrationTestIosTest new] testIntegrationTest:&testResult];
#pragma clang diagnostic pop
XCTAssertTrue(testPass, @"%@", testResult);
}
- (void)testMethodNamesFromDartTests {
XCTAssertEqualObjects([FLTIntegrationTestRunner
testCaseNameFromDartTestName:@"this is a test"], @"testThisIsATest");
XCTAssertEqualObjects([FLTIntegrationTestRunner
testCaseNameFromDartTestName:@"VALIDATE multi-point 🚀 UNICODE123: 😁"], @"testValidateMultiPointUnicode123");
XCTAssertEqualObjects([FLTIntegrationTestRunner
testCaseNameFromDartTestName:@"!UPPERCASE:\\ lower_separate?"], @"testUppercaseLowerSeparate");
}
- (void)testDuplicatedDartTests {
FakeIntegrationTestPlugin *fakePlugin = [[FakeIntegrationTestPlugin alloc] initForRegistration];
// These are unique test names in dart, but would result in duplicate
// XCTestCase names when the emojis are stripped.
fakePlugin.testResults = @{@"unique": @"dart test failure", @"emoji 🐢": @"success", @"emoji 🐇": @"failure"};
FLTIntegrationTestRunner *runner = [[FLTIntegrationTestRunner alloc] init];
runner.integrationTestPlugin = fakePlugin;
NSMutableDictionary<NSString *, NSString *> *failuresByTestName = [[NSMutableDictionary alloc] init];
[runner testIntegrationTestWithResults:^(SEL nativeTestSelector, BOOL success, NSString *failureMessage) {
NSString *testName = NSStringFromSelector(nativeTestSelector);
XCTAssertFalse([failuresByTestName.allKeys containsObject:testName]);
failuresByTestName[testName] = failureMessage;
}];
XCTAssertEqualObjects(failuresByTestName,
(@{@"testUnique": @"dart test failure",
@"testDuplicateTestNames": @"Cannot test \"emoji 🐇\", duplicate XCTestCase tests named testEmoji"}));
}
@end