FLTWebViewTests.m 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // Copyright 2019 The Chromium 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. @import Flutter;
  5. @import OCMock;
  6. @import XCTest;
  7. @import webview_flutter;
  8. static bool feq(CGFloat a, CGFloat b) { return fabs(b - a) < FLT_EPSILON; }
  9. @interface FLTWebViewTests : XCTestCase
  10. @property(strong, nonatomic) NSObject<FlutterBinaryMessenger> *mockBinaryMessenger;
  11. @end
  12. @implementation FLTWebViewTests
  13. - (void)setUp {
  14. [super setUp];
  15. self.mockBinaryMessenger = OCMProtocolMock(@protocol(FlutterBinaryMessenger));
  16. }
  17. - (void)testCanInitFLTWebViewController {
  18. FLTWebViewController *controller =
  19. [[FLTWebViewController alloc] initWithFrame:CGRectMake(0, 0, 300, 400)
  20. viewIdentifier:1
  21. arguments:nil
  22. binaryMessenger:self.mockBinaryMessenger];
  23. XCTAssertNotNil(controller);
  24. }
  25. - (void)testCanInitFLTWebViewFactory {
  26. FLTWebViewFactory *factory =
  27. [[FLTWebViewFactory alloc] initWithMessenger:self.mockBinaryMessenger];
  28. XCTAssertNotNil(factory);
  29. }
  30. - (void)webViewContentInsetBehaviorShouldBeNeverOnIOS11 {
  31. if (@available(iOS 11, *)) {
  32. FLTWebViewController *controller =
  33. [[FLTWebViewController alloc] initWithFrame:CGRectMake(0, 0, 300, 400)
  34. viewIdentifier:1
  35. arguments:nil
  36. binaryMessenger:self.mockBinaryMessenger];
  37. UIView *view = controller.view;
  38. XCTAssertTrue([view isKindOfClass:WKWebView.class]);
  39. WKWebView *webView = (WKWebView *)view;
  40. XCTAssertEqual(webView.scrollView.contentInsetAdjustmentBehavior,
  41. UIScrollViewContentInsetAdjustmentNever);
  42. }
  43. }
  44. - (void)testWebViewScrollIndicatorAticautomaticallyAdjustsScrollIndicatorInsetsShouldbeNoOnIOS13 {
  45. if (@available(iOS 13, *)) {
  46. FLTWebViewController *controller =
  47. [[FLTWebViewController alloc] initWithFrame:CGRectMake(0, 0, 300, 400)
  48. viewIdentifier:1
  49. arguments:nil
  50. binaryMessenger:self.mockBinaryMessenger];
  51. UIView *view = controller.view;
  52. XCTAssertTrue([view isKindOfClass:WKWebView.class]);
  53. WKWebView *webView = (WKWebView *)view;
  54. XCTAssertFalse(webView.scrollView.automaticallyAdjustsScrollIndicatorInsets);
  55. }
  56. }
  57. - (void)testContentInsetsSumAlwaysZeroAfterSetFrame {
  58. FLTWKWebView *webView = [[FLTWKWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 400)];
  59. webView.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 300, 0);
  60. XCTAssertFalse(UIEdgeInsetsEqualToEdgeInsets(webView.scrollView.contentInset, UIEdgeInsetsZero));
  61. webView.frame = CGRectMake(0, 0, 300, 200);
  62. XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(webView.scrollView.contentInset, UIEdgeInsetsZero));
  63. XCTAssertTrue(CGRectEqualToRect(webView.frame, CGRectMake(0, 0, 300, 200)));
  64. if (@available(iOS 11, *)) {
  65. // After iOS 11, we need to make sure the contentInset compensates the adjustedContentInset.
  66. UIScrollView *partialMockScrollView = OCMPartialMock(webView.scrollView);
  67. UIEdgeInsets insetToAdjust = UIEdgeInsetsMake(0, 0, 300, 0);
  68. OCMStub(partialMockScrollView.adjustedContentInset).andReturn(insetToAdjust);
  69. XCTAssertTrue(UIEdgeInsetsEqualToEdgeInsets(webView.scrollView.contentInset, UIEdgeInsetsZero));
  70. webView.frame = CGRectMake(0, 0, 300, 100);
  71. XCTAssertTrue(feq(webView.scrollView.contentInset.bottom, -insetToAdjust.bottom));
  72. XCTAssertTrue(CGRectEqualToRect(webView.frame, CGRectMake(0, 0, 300, 100)));
  73. }
  74. }
  75. @end