Skip to content

Commit 23ef478

Browse files
bparrishMinesmauricioluz
authored andcommitted
[webview_flutter_wkwebview] The rest of the Objective-C HostApi methods (flutter#5604)
1 parent 5db802a commit 23ef478

File tree

56 files changed

+2115
-331
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+2115
-331
lines changed

packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj

+45-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
archiveVersion = 1;
44
classes = {
55
};
6-
objectVersion = 46;
6+
objectVersion = 50;
77
objects = {
88

99
/* Begin PBXBuildFile section */
@@ -14,6 +14,17 @@
1414
8FA6A87928062CD000A4B183 /* FWFInstanceManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA6A87828062CD000A4B183 /* FWFInstanceManagerTests.m */; };
1515
8FB79B5328134C3100C101D3 /* FWFWebViewHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B5228134C3100C101D3 /* FWFWebViewHostApiTests.m */; };
1616
8FB79B55281B24F600C101D3 /* FWFDataConvertersTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B54281B24F600C101D3 /* FWFDataConvertersTests.m */; };
17+
8FB79B672820453400C101D3 /* FWFHTTPCookieStoreHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B662820453400C101D3 /* FWFHTTPCookieStoreHostApiTests.m */; };
18+
8FB79B6928204E8700C101D3 /* FWFPreferencesHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B6828204E8700C101D3 /* FWFPreferencesHostApiTests.m */; };
19+
8FB79B6B28204EE500C101D3 /* FWFWebsiteDataStoreHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B6A28204EE500C101D3 /* FWFWebsiteDataStoreHostApiTests.m */; };
20+
8FB79B6D2820533B00C101D3 /* FWFWebViewConfigurationHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B6C2820533B00C101D3 /* FWFWebViewConfigurationHostApiTests.m */; };
21+
8FB79B73282096B500C101D3 /* FWFScriptMessageHandlerHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B72282096B500C101D3 /* FWFScriptMessageHandlerHostApiTests.m */; };
22+
8FB79B7928209D1300C101D3 /* FWFUserContentControllerHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B7828209D1300C101D3 /* FWFUserContentControllerHostApiTests.m */; };
23+
8FB79B832820A39300C101D3 /* FWFNavigationDelegateHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B822820A39300C101D3 /* FWFNavigationDelegateHostApiTests.m */; };
24+
8FB79B852820A3A400C101D3 /* FWFUIDelegateHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B842820A3A400C101D3 /* FWFUIDelegateHostApiTests.m */; };
25+
8FB79B8F2820BAB300C101D3 /* FWFScrollViewHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B8E2820BAB300C101D3 /* FWFScrollViewHostApiTests.m */; };
26+
8FB79B912820BAC700C101D3 /* FWFUIViewHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B902820BAC700C101D3 /* FWFUIViewHostApiTests.m */; };
27+
8FB79B972821985200C101D3 /* FWFObjectHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FB79B962821985200C101D3 /* FWFObjectHostApiTests.m */; };
1728
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
1829
97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
1930
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
@@ -73,6 +84,17 @@
7384
8FA6A87828062CD000A4B183 /* FWFInstanceManagerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFInstanceManagerTests.m; sourceTree = "<group>"; };
7485
8FB79B5228134C3100C101D3 /* FWFWebViewHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFWebViewHostApiTests.m; sourceTree = "<group>"; };
7586
8FB79B54281B24F600C101D3 /* FWFDataConvertersTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFDataConvertersTests.m; sourceTree = "<group>"; };
87+
8FB79B662820453400C101D3 /* FWFHTTPCookieStoreHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFHTTPCookieStoreHostApiTests.m; sourceTree = "<group>"; };
88+
8FB79B6828204E8700C101D3 /* FWFPreferencesHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFPreferencesHostApiTests.m; sourceTree = "<group>"; };
89+
8FB79B6A28204EE500C101D3 /* FWFWebsiteDataStoreHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFWebsiteDataStoreHostApiTests.m; sourceTree = "<group>"; };
90+
8FB79B6C2820533B00C101D3 /* FWFWebViewConfigurationHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFWebViewConfigurationHostApiTests.m; sourceTree = "<group>"; };
91+
8FB79B72282096B500C101D3 /* FWFScriptMessageHandlerHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFScriptMessageHandlerHostApiTests.m; sourceTree = "<group>"; };
92+
8FB79B7828209D1300C101D3 /* FWFUserContentControllerHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFUserContentControllerHostApiTests.m; sourceTree = "<group>"; };
93+
8FB79B822820A39300C101D3 /* FWFNavigationDelegateHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFNavigationDelegateHostApiTests.m; sourceTree = "<group>"; };
94+
8FB79B842820A3A400C101D3 /* FWFUIDelegateHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFUIDelegateHostApiTests.m; sourceTree = "<group>"; };
95+
8FB79B8E2820BAB300C101D3 /* FWFScrollViewHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFScrollViewHostApiTests.m; sourceTree = "<group>"; };
96+
8FB79B902820BAC700C101D3 /* FWFUIViewHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFUIViewHostApiTests.m; sourceTree = "<group>"; };
97+
8FB79B962821985200C101D3 /* FWFObjectHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFObjectHostApiTests.m; sourceTree = "<group>"; };
7698
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
7799
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
78100
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -135,6 +157,17 @@
135157
8FA6A87828062CD000A4B183 /* FWFInstanceManagerTests.m */,
136158
8FB79B5228134C3100C101D3 /* FWFWebViewHostApiTests.m */,
137159
8FB79B54281B24F600C101D3 /* FWFDataConvertersTests.m */,
160+
8FB79B662820453400C101D3 /* FWFHTTPCookieStoreHostApiTests.m */,
161+
8FB79B6828204E8700C101D3 /* FWFPreferencesHostApiTests.m */,
162+
8FB79B6A28204EE500C101D3 /* FWFWebsiteDataStoreHostApiTests.m */,
163+
8FB79B6C2820533B00C101D3 /* FWFWebViewConfigurationHostApiTests.m */,
164+
8FB79B72282096B500C101D3 /* FWFScriptMessageHandlerHostApiTests.m */,
165+
8FB79B7828209D1300C101D3 /* FWFUserContentControllerHostApiTests.m */,
166+
8FB79B822820A39300C101D3 /* FWFNavigationDelegateHostApiTests.m */,
167+
8FB79B842820A3A400C101D3 /* FWFUIDelegateHostApiTests.m */,
168+
8FB79B8E2820BAB300C101D3 /* FWFScrollViewHostApiTests.m */,
169+
8FB79B902820BAC700C101D3 /* FWFUIViewHostApiTests.m */,
170+
8FB79B962821985200C101D3 /* FWFObjectHostApiTests.m */,
138171
);
139172
path = RunnerTests;
140173
sourceTree = "<group>";
@@ -433,11 +466,22 @@
433466
buildActionMask = 2147483647;
434467
files = (
435468
8FA6A87928062CD000A4B183 /* FWFInstanceManagerTests.m in Sources */,
469+
8FB79B852820A3A400C101D3 /* FWFUIDelegateHostApiTests.m in Sources */,
470+
8FB79B972821985200C101D3 /* FWFObjectHostApiTests.m in Sources */,
471+
8FB79B672820453400C101D3 /* FWFHTTPCookieStoreHostApiTests.m in Sources */,
436472
8FB79B5328134C3100C101D3 /* FWFWebViewHostApiTests.m in Sources */,
473+
8FB79B73282096B500C101D3 /* FWFScriptMessageHandlerHostApiTests.m in Sources */,
437474
334734012669319100DCC49E /* FLTWebViewTests.m in Sources */,
475+
8FB79B7928209D1300C101D3 /* FWFUserContentControllerHostApiTests.m in Sources */,
476+
8FB79B6B28204EE500C101D3 /* FWFWebsiteDataStoreHostApiTests.m in Sources */,
477+
8FB79B8F2820BAB300C101D3 /* FWFScrollViewHostApiTests.m in Sources */,
478+
8FB79B912820BAC700C101D3 /* FWFUIViewHostApiTests.m in Sources */,
438479
334734022669319400DCC49E /* FLTWKNavigationDelegateTests.m in Sources */,
439480
8FB79B55281B24F600C101D3 /* FWFDataConvertersTests.m in Sources */,
481+
8FB79B6D2820533B00C101D3 /* FWFWebViewConfigurationHostApiTests.m in Sources */,
482+
8FB79B832820A39300C101D3 /* FWFNavigationDelegateHostApiTests.m in Sources */,
440483
E43693B527512C0F00382F85 /* FLTCookieManagerTests.m in Sources */,
484+
8FB79B6928204E8700C101D3 /* FWFPreferencesHostApiTests.m in Sources */,
441485
);
442486
runOnlyForDeploymentPostprocessing = 0;
443487
};

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

+22-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ @interface FWFDataConvertersTests : XCTestCase
1010
@end
1111

1212
@implementation FWFDataConvertersTests
13-
- (void)testFNSURLRequestFromRequestData {
13+
- (void)testFWFNSURLRequestFromRequestData {
1414
NSURLRequest *request = FWFNSURLRequestFromRequestData([FWFNSUrlRequestData
1515
makeWithUrl:@"https://flutter.dev"
1616
httpMethod:@"post"
@@ -22,4 +22,25 @@ - (void)testFNSURLRequestFromRequestData {
2222
XCTAssertEqualObjects(request.HTTPBody, [NSData data]);
2323
XCTAssertEqualObjects(request.allHTTPHeaderFields, @{@"a" : @"header"});
2424
}
25+
26+
- (void)testFWFNSHTTPCookieFromCookieData {
27+
NSHTTPCookie *cookie = FWFNSHTTPCookieFromCookieData([FWFNSHttpCookieData
28+
makeWithPropertyKeys:@[ [FWFNSHttpCookiePropertyKeyEnumData
29+
makeWithValue:FWFNSHttpCookiePropertyKeyEnumName] ]
30+
propertyValues:@[ @"cookieName" ]]);
31+
XCTAssertEqualObjects(cookie,
32+
[NSHTTPCookie cookieWithProperties:@{NSHTTPCookieName : @"cookieName"}]);
33+
}
34+
35+
- (void)testFWFWKUserScriptFromScriptData {
36+
WKUserScript *userScript = FWFWKUserScriptFromScriptData([FWFWKUserScriptData
37+
makeWithSource:@"mySource"
38+
injectionTime:[FWFWKUserScriptInjectionTimeEnumData
39+
makeWithValue:FWFWKUserScriptInjectionTimeEnumAtDocumentStart]
40+
isMainFrameOnly:@NO]);
41+
42+
XCTAssertEqualObjects(userScript.source, @"mySource");
43+
XCTAssertEqual(userScript.injectionTime, WKUserScriptInjectionTimeAtDocumentStart);
44+
XCTAssertEqual(userScript.isForMainFrameOnly, NO);
45+
}
2546
@end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
@import Flutter;
6+
@import XCTest;
7+
@import webview_flutter_wkwebview;
8+
9+
#import <OCMock/OCMock.h>
10+
11+
@interface FWFHTTPCookieStoreHostApiTests : XCTestCase
12+
@end
13+
14+
@implementation FWFHTTPCookieStoreHostApiTests
15+
- (void)testCreateFromWebsiteDataStoreWithIdentifier API_AVAILABLE(ios(11.0)) {
16+
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
17+
FWFHTTPCookieStoreHostApiImpl *hostApi =
18+
[[FWFHTTPCookieStoreHostApiImpl alloc] initWithInstanceManager:instanceManager];
19+
20+
WKWebsiteDataStore *mockDataStore = OCMClassMock([WKWebsiteDataStore class]);
21+
OCMStub([mockDataStore httpCookieStore]).andReturn(OCMClassMock([WKHTTPCookieStore class]));
22+
[instanceManager addInstance:mockDataStore withIdentifier:0];
23+
24+
FlutterError *error;
25+
[hostApi createFromWebsiteDataStoreWithIdentifier:@1 dataStoreIdentifier:@0 error:&error];
26+
WKHTTPCookieStore *cookieStore = (WKHTTPCookieStore *)[instanceManager instanceForIdentifier:1];
27+
XCTAssertTrue([cookieStore isKindOfClass:[WKHTTPCookieStore class]]);
28+
XCTAssertNil(error);
29+
}
30+
31+
- (void)testSetCookie API_AVAILABLE(ios(11.0)) {
32+
WKHTTPCookieStore *mockHttpCookieStore = OCMClassMock([WKHTTPCookieStore class]);
33+
34+
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
35+
[instanceManager addInstance:mockHttpCookieStore withIdentifier:0];
36+
37+
FWFHTTPCookieStoreHostApiImpl *hostApi =
38+
[[FWFHTTPCookieStoreHostApiImpl alloc] initWithInstanceManager:instanceManager];
39+
40+
FWFNSHttpCookieData *cookieData = [FWFNSHttpCookieData
41+
makeWithPropertyKeys:@[ [FWFNSHttpCookiePropertyKeyEnumData
42+
makeWithValue:FWFNSHttpCookiePropertyKeyEnumName] ]
43+
propertyValues:@[ @"hello" ]];
44+
FlutterError *__block blockError;
45+
[hostApi setCookieForStoreWithIdentifier:@0
46+
cookie:cookieData
47+
completion:^(FlutterError *error) {
48+
blockError = error;
49+
}];
50+
OCMVerify([mockHttpCookieStore
51+
setCookie:[NSHTTPCookie cookieWithProperties:@{NSHTTPCookieName : @"hello"}]
52+
completionHandler:OCMOCK_ANY]);
53+
XCTAssertNil(blockError);
54+
}
55+
@end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
@import Flutter;
6+
@import XCTest;
7+
@import webview_flutter_wkwebview;
8+
9+
#import <OCMock/OCMock.h>
10+
11+
@interface FWFNavigationDelegateHostApiTests : XCTestCase
12+
@end
13+
14+
@implementation FWFNavigationDelegateHostApiTests
15+
- (void)testCreateWithIdentifier {
16+
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
17+
FWFNavigationDelegateHostApiImpl *hostApi =
18+
[[FWFNavigationDelegateHostApiImpl alloc] initWithInstanceManager:instanceManager];
19+
20+
FlutterError *error;
21+
[hostApi createWithIdentifier:@0 error:&error];
22+
FWFNavigationDelegate *navigationDelegate =
23+
(FWFNavigationDelegate *)[instanceManager instanceForIdentifier:0];
24+
25+
XCTAssertTrue([navigationDelegate conformsToProtocol:@protocol(WKNavigationDelegate)]);
26+
XCTAssertNil(error);
27+
}
28+
@end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
@import Flutter;
6+
@import XCTest;
7+
@import webview_flutter_wkwebview;
8+
9+
#import <OCMock/OCMock.h>
10+
11+
@interface FWFObjectHostApiTests : XCTestCase
12+
@end
13+
14+
@implementation FWFObjectHostApiTests
15+
- (void)testAddObserver {
16+
NSObject *mockObject = OCMClassMock([NSObject class]);
17+
18+
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
19+
[instanceManager addInstance:mockObject withIdentifier:0];
20+
21+
FWFObjectHostApiImpl *hostApi =
22+
[[FWFObjectHostApiImpl alloc] initWithInstanceManager:instanceManager];
23+
24+
NSObject *observerObject = [[NSObject alloc] init];
25+
[instanceManager addInstance:observerObject withIdentifier:1];
26+
27+
FlutterError *error;
28+
[hostApi
29+
addObserverForObjectWithIdentifier:@0
30+
observerIdentifier:@1
31+
keyPath:@"myKey"
32+
options:@[
33+
[FWFNSKeyValueObservingOptionsEnumData
34+
makeWithValue:FWFNSKeyValueObservingOptionsEnumOldValue],
35+
[FWFNSKeyValueObservingOptionsEnumData
36+
makeWithValue:FWFNSKeyValueObservingOptionsEnumNewValue]
37+
]
38+
error:&error];
39+
40+
OCMVerify([mockObject addObserver:observerObject
41+
forKeyPath:@"myKey"
42+
options:(NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew)
43+
context:nil]);
44+
XCTAssertNil(error);
45+
}
46+
47+
- (void)testRemoveObserver {
48+
NSObject *mockObject = OCMClassMock([NSObject class]);
49+
50+
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
51+
[instanceManager addInstance:mockObject withIdentifier:0];
52+
53+
FWFObjectHostApiImpl *hostApi =
54+
[[FWFObjectHostApiImpl alloc] initWithInstanceManager:instanceManager];
55+
56+
NSObject *observerObject = [[NSObject alloc] init];
57+
[instanceManager addInstance:observerObject withIdentifier:1];
58+
59+
FlutterError *error;
60+
[hostApi removeObserverForObjectWithIdentifier:@0
61+
observerIdentifier:@1
62+
keyPath:@"myKey"
63+
error:&error];
64+
OCMVerify([mockObject removeObserver:observerObject forKeyPath:@"myKey"]);
65+
XCTAssertNil(error);
66+
}
67+
68+
- (void)testDispose {
69+
NSObject *object = [[NSObject alloc] init];
70+
71+
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
72+
[instanceManager addInstance:object withIdentifier:0];
73+
74+
FWFObjectHostApiImpl *hostApi =
75+
[[FWFObjectHostApiImpl alloc] initWithInstanceManager:instanceManager];
76+
77+
FlutterError *error;
78+
[hostApi disposeObjectWithIdentifier:@0 error:&error];
79+
XCTAssertEqual([instanceManager identifierForInstance:object], NSNotFound);
80+
XCTAssertNil(error);
81+
}
82+
@end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
@import Flutter;
6+
@import XCTest;
7+
@import webview_flutter_wkwebview;
8+
9+
#import <OCMock/OCMock.h>
10+
11+
@interface FWFPreferencesHostApiTests : XCTestCase
12+
@end
13+
14+
@implementation FWFPreferencesHostApiTests
15+
- (void)testCreateFromWebViewConfigurationWithIdentifier {
16+
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
17+
FWFPreferencesHostApiImpl *hostApi =
18+
[[FWFPreferencesHostApiImpl alloc] initWithInstanceManager:instanceManager];
19+
20+
[instanceManager addInstance:[[WKWebViewConfiguration alloc] init] withIdentifier:0];
21+
22+
FlutterError *error;
23+
[hostApi createFromWebViewConfigurationWithIdentifier:@1 configurationIdentifier:@0 error:&error];
24+
WKPreferences *preferences = (WKPreferences *)[instanceManager instanceForIdentifier:1];
25+
XCTAssertTrue([preferences isKindOfClass:[WKPreferences class]]);
26+
XCTAssertNil(error);
27+
}
28+
29+
- (void)testSetJavaScriptEnabled {
30+
WKPreferences *mockPreferences = OCMClassMock([WKPreferences class]);
31+
32+
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
33+
[instanceManager addInstance:mockPreferences withIdentifier:0];
34+
35+
FWFPreferencesHostApiImpl *hostApi =
36+
[[FWFPreferencesHostApiImpl alloc] initWithInstanceManager:instanceManager];
37+
38+
FlutterError *error;
39+
[hostApi setJavaScriptEnabledForPreferencesWithIdentifier:@0 isEnabled:@YES error:&error];
40+
OCMVerify([mockPreferences setJavaScriptEnabled:YES]);
41+
XCTAssertNil(error);
42+
}
43+
@end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
@import Flutter;
6+
@import XCTest;
7+
@import webview_flutter_wkwebview;
8+
9+
#import <OCMock/OCMock.h>
10+
11+
@interface FWFScriptMessageHandlerHostApiTests : XCTestCase
12+
@end
13+
14+
@implementation FWFScriptMessageHandlerHostApiTests
15+
- (void)testCreateWithIdentifier {
16+
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
17+
FWFScriptMessageHandlerHostApiImpl *hostApi =
18+
[[FWFScriptMessageHandlerHostApiImpl alloc] initWithInstanceManager:instanceManager];
19+
20+
FlutterError *error;
21+
[hostApi createWithIdentifier:@0 error:&error];
22+
23+
FWFScriptMessageHandler *scriptMessageHandler =
24+
(FWFScriptMessageHandler *)[instanceManager instanceForIdentifier:0];
25+
26+
XCTAssertTrue([scriptMessageHandler conformsToProtocol:@protocol(WKScriptMessageHandler)]);
27+
XCTAssertNil(error);
28+
}
29+
@end

0 commit comments

Comments
 (0)