|  | // Copyright 2019 The Chromium 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; | 
|  |  | 
|  | // OCMock library doesn't generate a valid modulemap. | 
|  | #import <OCMock/OCMock.h> | 
|  |  | 
|  | static bool feq(CGFloat a, CGFloat b) { return fabs(b - a) < FLT_EPSILON; } | 
|  |  | 
|  | @interface FLTWebViewTests : XCTestCase | 
|  |  | 
|  | @property(strong, nonatomic) NSObject<FlutterBinaryMessenger> *mockBinaryMessenger; | 
|  |  | 
|  | @end | 
|  |  | 
|  | @implementation FLTWebViewTests | 
|  |  | 
|  | - (void)setUp { | 
|  | [super setUp]; | 
|  | self.mockBinaryMessenger = OCMProtocolMock(@protocol(FlutterBinaryMessenger)); | 
|  | } | 
|  |  | 
|  | - (void)testCanInitFLTWebViewController { | 
|  | FLTWebViewController *controller = | 
|  | [[FLTWebViewController alloc] initWithFrame:CGRectMake(0, 0, 300, 400) | 
|  | viewIdentifier:1 | 
|  | arguments:nil | 
|  | binaryMessenger:self.mockBinaryMessenger]; | 
|  | XCTAssertNotNil(controller); | 
|  | } | 
|  |  | 
|  | - (void)testCanInitFLTWebViewFactory { | 
|  | FLTWebViewFactory *factory = | 
|  | [[FLTWebViewFactory alloc] initWithMessenger:self.mockBinaryMessenger]; | 
|  | XCTAssertNotNil(factory); | 
|  | } | 
|  |  | 
|  | - (void)webViewContentInsetBehaviorShouldBeNeverOnIOS11 { | 
|  | if (@available(iOS 11, *)) { | 
|  | FLTWebViewController *controller = | 
|  | [[FLTWebViewController alloc] initWithFrame:CGRectMake(0, 0, 300, 400) | 
|  | viewIdentifier:1 | 
|  | arguments:nil | 
|  | binaryMessenger:self.mockBinaryMessenger]; | 
|  | UIView *view = controller.view; | 
|  | XCTAssertTrue([view isKindOfClass:WKWebView.class]); | 
|  | WKWebView *webView = (WKWebView *)view; | 
|  | XCTAssertEqual(webView.scrollView.contentInsetAdjustmentBehavior, | 
|  | UIScrollViewContentInsetAdjustmentNever); | 
|  | } | 
|  | } | 
|  |  | 
|  | - (void)testWebViewScrollIndicatorAticautomaticallyAdjustsScrollIndicatorInsetsShouldbeNoOnIOS13 { | 
|  | if (@available(iOS 13, *)) { | 
|  | FLTWebViewController *controller = | 
|  | [[FLTWebViewController alloc] initWithFrame:CGRectMake(0, 0, 300, 400) | 
|  | viewIdentifier:1 | 
|  | arguments:nil | 
|  | binaryMessenger:self.mockBinaryMessenger]; | 
|  | UIView *view = controller.view; | 
|  | XCTAssertTrue([view isKindOfClass:WKWebView.class]); | 
|  | WKWebView *webView = (WKWebView *)view; | 
|  | XCTAssertFalse(webView.scrollView.automaticallyAdjustsScrollIndicatorInsets); | 
|  | } | 
|  | } | 
|  |  | 
|  | - (void)testContentInsetsSumAlwaysZeroAfterSetFrame { | 
|  | FLTWKWebView *webView = [[FLTWKWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 400)]; | 
|  | webView.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 300, 0); | 
|  | XCTAssertFalse(UIEdgeInsetsEqualToEdgeInsets(webView.scrollView.contentInset, UIEdgeInsetsZero)); | 
|  | webView.frame = CGRectMake(0, 0, 300, 200); | 
|  | XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(webView.scrollView.contentInset, UIEdgeInsetsZero)); | 
|  | XCTAssertTrue(CGRectEqualToRect(webView.frame, CGRectMake(0, 0, 300, 200))); | 
|  |  | 
|  | if (@available(iOS 11, *)) { | 
|  | // After iOS 11, we need to make sure the contentInset compensates the adjustedContentInset. | 
|  | UIScrollView *partialMockScrollView = OCMPartialMock(webView.scrollView); | 
|  | UIEdgeInsets insetToAdjust = UIEdgeInsetsMake(0, 0, 300, 0); | 
|  | OCMStub(partialMockScrollView.adjustedContentInset).andReturn(insetToAdjust); | 
|  | XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(webView.scrollView.contentInset, UIEdgeInsetsZero)); | 
|  | webView.frame = CGRectMake(0, 0, 300, 100); | 
|  | XCTAssertTrue(feq(webView.scrollView.contentInset.bottom, -insetToAdjust.bottom)); | 
|  | XCTAssertTrue(CGRectEqualToRect(webView.frame, CGRectMake(0, 0, 300, 100))); | 
|  | } | 
|  | } | 
|  |  | 
|  | @end |