Skip to content

Commit d0411e4

Browse files
[various] Update invalid NSURL tests (#4959)
For applications linked against iOS 17 or later, NSURL no longer returns `nil` for invalid URLs, so tests that were specific to that behavior have to be adjusted to allow for another outcome. Fixes flutter/flutter#134972 Part of flutter/flutter#134971
1 parent 51e74b9 commit d0411e4

File tree

2 files changed

+39
-16
lines changed

2 files changed

+39
-16
lines changed

packages/url_launcher/url_launcher_ios/example/ios/RunnerTests/URLLauncherTests.swift

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,19 @@ final class URLLauncherTests: XCTestCase {
3939
var error: FlutterError?
4040
let result = createPlugin().canLaunchURL("urls can't have spaces", error: &error)
4141

42-
XCTAssertNil(result)
43-
XCTAssertNotNil(error)
44-
XCTAssertEqual(error?.code, "argument_error")
45-
XCTAssertEqual(error?.message, "Unable to parse URL")
46-
XCTAssertEqual(error?.details as? String, "Provided URL: urls can't have spaces")
42+
if (error == nil) {
43+
// When linking against the iOS 17 SDK or later, NSURL uses a lenient parser, and won't
44+
// fail to parse URLs, so the test must allow for either outcome.
45+
XCTAssertNotNil(result)
46+
XCTAssertFalse(result?.boolValue ?? true)
47+
XCTAssertNil(error)
48+
} else {
49+
XCTAssertNil(result)
50+
XCTAssertNotNil(error)
51+
XCTAssertEqual(error?.code, "argument_error")
52+
XCTAssertEqual(error?.message, "Unable to parse URL")
53+
XCTAssertEqual(error?.details as? String, "Provided URL: urls can't have spaces")
54+
}
4755
}
4856

4957
func testLaunchSuccess() {
@@ -75,11 +83,19 @@ final class URLLauncherTests: XCTestCase {
7583
let expectation = XCTestExpectation(description: "completion called")
7684

7785
createPlugin().launchURL("urls can't have spaces", universalLinksOnly: false) { result, error in
78-
XCTAssertNil(result)
79-
XCTAssertNotNil(error)
80-
XCTAssertEqual(error?.code, "argument_error")
81-
XCTAssertEqual(error?.message, "Unable to parse URL")
82-
XCTAssertEqual(error?.details as? String, "Provided URL: urls can't have spaces")
86+
if (error == nil) {
87+
// When linking against the iOS 17 SDK or later, NSURL uses a lenient parser, and won't
88+
// fail to parse URLs, so the test must allow for either outcome.
89+
XCTAssertNotNil(result)
90+
XCTAssertFalse(result?.boolValue ?? true)
91+
XCTAssertNil(error)
92+
} else {
93+
XCTAssertNil(result)
94+
XCTAssertNotNil(error)
95+
XCTAssertEqual(error?.code, "argument_error")
96+
XCTAssertEqual(error?.message, "Unable to parse URL")
97+
XCTAssertEqual(error?.details as? String, "Provided URL: urls can't have spaces")
98+
}
8399

84100
expectation.fulfill()
85101
}

packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebViewHostApiTests.m

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ - (void)testLoadRequest {
5656

5757
- (void)testLoadRequestWithInvalidUrl {
5858
FWFWebView *mockWebView = OCMClassMock([FWFWebView class]);
59-
OCMReject([mockWebView loadRequest:OCMOCK_ANY]);
6059

6160
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
6261
[instanceManager addDartCreatedInstance:mockWebView withIdentifier:0];
@@ -65,16 +64,24 @@ - (void)testLoadRequestWithInvalidUrl {
6564
initWithBinaryMessenger:OCMProtocolMock(@protocol(FlutterBinaryMessenger))
6665
instanceManager:instanceManager];
6766

67+
NSString *badURLString = @"%invalidUrl%";
6868
FlutterError *error;
69-
FWFNSUrlRequestData *requestData = [FWFNSUrlRequestData makeWithUrl:@"%invalidUrl%"
69+
FWFNSUrlRequestData *requestData = [FWFNSUrlRequestData makeWithUrl:badURLString
7070
httpMethod:nil
7171
httpBody:nil
7272
allHttpHeaderFields:@{}];
7373
[hostAPI loadRequestForWebViewWithIdentifier:@0 request:requestData error:&error];
74-
XCTAssertNotNil(error);
75-
XCTAssertEqualObjects(error.code, @"FWFURLRequestParsingError");
76-
XCTAssertEqualObjects(error.message, @"Failed instantiating an NSURLRequest.");
77-
XCTAssertEqualObjects(error.details, @"URL was: '%invalidUrl%'");
74+
// When linking against the iOS 17 SDK or later, NSURL uses a lenient parser, and won't
75+
// fail to parse URLs, so the test must allow for either outcome.
76+
if (error) {
77+
XCTAssertEqualObjects(error.code, @"FWFURLRequestParsingError");
78+
XCTAssertEqualObjects(error.message, @"Failed instantiating an NSURLRequest.");
79+
XCTAssertEqualObjects(error.details, @"URL was: '%invalidUrl%'");
80+
} else {
81+
NSMutableURLRequest *request =
82+
[NSMutableURLRequest requestWithURL:[NSURL URLWithString:badURLString]];
83+
OCMVerify([mockWebView loadRequest:request]);
84+
}
7885
}
7986

8087
- (void)testSetCustomUserAgent {

0 commit comments

Comments
 (0)