blob: 4f523e6da40268989a338592ca0c3a0296ec5a38 [file] [log] [blame]
// Copyright 2013 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 Flutter;
@import XCTest;
@import webview_flutter_wkwebview;
#import <OCMock/OCMock.h>
@interface FWFUserContentControllerHostApiTests : XCTestCase
@end
@implementation FWFUserContentControllerHostApiTests
- (void)testCreateFromWebViewConfigurationWithIdentifier {
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
FWFUserContentControllerHostApiImpl *hostAPI =
[[FWFUserContentControllerHostApiImpl alloc] initWithInstanceManager:instanceManager];
[instanceManager addDartCreatedInstance:[[WKWebViewConfiguration alloc] init] withIdentifier:0];
FlutterError *error;
[hostAPI createFromWebViewConfigurationWithIdentifier:@1 configurationIdentifier:@0 error:&error];
WKUserContentController *userContentController =
(WKUserContentController *)[instanceManager instanceForIdentifier:1];
XCTAssertTrue([userContentController isKindOfClass:[WKUserContentController class]]);
XCTAssertNil(error);
}
- (void)testAddScriptMessageHandler {
WKUserContentController *mockUserContentController =
OCMClassMock([WKUserContentController class]);
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
[instanceManager addDartCreatedInstance:mockUserContentController withIdentifier:0];
FWFUserContentControllerHostApiImpl *hostAPI =
[[FWFUserContentControllerHostApiImpl alloc] initWithInstanceManager:instanceManager];
id<WKScriptMessageHandler> mockMessageHandler =
OCMProtocolMock(@protocol(WKScriptMessageHandler));
[instanceManager addDartCreatedInstance:mockMessageHandler withIdentifier:1];
FlutterError *error;
[hostAPI addScriptMessageHandlerForControllerWithIdentifier:@0
handlerIdentifier:@1
ofName:@"apple"
error:&error];
OCMVerify([mockUserContentController addScriptMessageHandler:mockMessageHandler name:@"apple"]);
XCTAssertNil(error);
}
- (void)testRemoveScriptMessageHandler {
WKUserContentController *mockUserContentController =
OCMClassMock([WKUserContentController class]);
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
[instanceManager addDartCreatedInstance:mockUserContentController withIdentifier:0];
FWFUserContentControllerHostApiImpl *hostAPI =
[[FWFUserContentControllerHostApiImpl alloc] initWithInstanceManager:instanceManager];
FlutterError *error;
[hostAPI removeScriptMessageHandlerForControllerWithIdentifier:@0 name:@"apple" error:&error];
OCMVerify([mockUserContentController removeScriptMessageHandlerForName:@"apple"]);
XCTAssertNil(error);
}
- (void)testRemoveAllScriptMessageHandlers API_AVAILABLE(ios(14.0)) {
WKUserContentController *mockUserContentController =
OCMClassMock([WKUserContentController class]);
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
[instanceManager addDartCreatedInstance:mockUserContentController withIdentifier:0];
FWFUserContentControllerHostApiImpl *hostAPI =
[[FWFUserContentControllerHostApiImpl alloc] initWithInstanceManager:instanceManager];
FlutterError *error;
[hostAPI removeAllScriptMessageHandlersForControllerWithIdentifier:@0 error:&error];
OCMVerify([mockUserContentController removeAllScriptMessageHandlers]);
XCTAssertNil(error);
}
- (void)testAddUserScript {
WKUserContentController *mockUserContentController =
OCMClassMock([WKUserContentController class]);
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
[instanceManager addDartCreatedInstance:mockUserContentController withIdentifier:0];
FWFUserContentControllerHostApiImpl *hostAPI =
[[FWFUserContentControllerHostApiImpl alloc] initWithInstanceManager:instanceManager];
FlutterError *error;
[hostAPI
addUserScriptForControllerWithIdentifier:@0
userScript:
[FWFWKUserScriptData
makeWithSource:@"runAScript"
injectionTime:
[FWFWKUserScriptInjectionTimeEnumData
makeWithValue:
FWFWKUserScriptInjectionTimeEnumAtDocumentEnd]
isMainFrameOnly:@YES]
error:&error];
OCMVerify([mockUserContentController addUserScript:[OCMArg isKindOfClass:[WKUserScript class]]]);
XCTAssertNil(error);
}
- (void)testRemoveAllUserScripts {
WKUserContentController *mockUserContentController =
OCMClassMock([WKUserContentController class]);
FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init];
[instanceManager addDartCreatedInstance:mockUserContentController withIdentifier:0];
FWFUserContentControllerHostApiImpl *hostAPI =
[[FWFUserContentControllerHostApiImpl alloc] initWithInstanceManager:instanceManager];
FlutterError *error;
[hostAPI removeAllUserScriptsForControllerWithIdentifier:@0 error:&error];
OCMVerify([mockUserContentController removeAllUserScripts]);
XCTAssertNil(error);
}
@end