How to use testTraitsEmbeddedInTabNavigation method of CancellingWKWebViewNavigationDelegate class

Best Swift-snapshot-testing code snippet using CancellingWKWebViewNavigationDelegate.testTraitsEmbeddedInTabNavigation

SnapshotTestingTests.swift

Source:SnapshotTestingTests.swift Github

copy

Full Screen

...514      #endif515    }516    #endif517  }518  func testTraitsEmbeddedInTabNavigation() {519    #if os(iOS)520    if #available(iOS 11.0, *) {521      class MyViewController: UIViewController {522        let topLabel = UILabel()523        let leadingLabel = UILabel()524        let trailingLabel = UILabel()525        let bottomLabel = UILabel()526        override func viewDidLoad() {527          super.viewDidLoad()528          self.navigationItem.leftBarButtonItem = .init(barButtonSystemItem: .add, target: nil, action: nil)529          self.view.backgroundColor = .white530          self.topLabel.text = "What's"531          self.leadingLabel.text = "the"532          self.trailingLabel.text = "point"533          self.bottomLabel.text = "?"534          self.topLabel.translatesAutoresizingMaskIntoConstraints = false535          self.leadingLabel.translatesAutoresizingMaskIntoConstraints = false536          self.trailingLabel.translatesAutoresizingMaskIntoConstraints = false537          self.bottomLabel.translatesAutoresizingMaskIntoConstraints = false538          self.view.addSubview(self.topLabel)539          self.view.addSubview(self.leadingLabel)540          self.view.addSubview(self.trailingLabel)541          self.view.addSubview(self.bottomLabel)542          NSLayoutConstraint.activate([543            self.topLabel.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),544            self.topLabel.centerXAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.centerXAnchor),545            self.leadingLabel.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor),546            self.leadingLabel.trailingAnchor.constraint(lessThanOrEqualTo: self.view.safeAreaLayoutGuide.centerXAnchor),547//            self.leadingLabel.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.centerXAnchor),548            self.leadingLabel.centerYAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.centerYAnchor),549            self.trailingLabel.leadingAnchor.constraint(greaterThanOrEqualTo: self.view.safeAreaLayoutGuide.centerXAnchor),550            self.trailingLabel.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor),551            self.trailingLabel.centerYAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.centerYAnchor),552            self.bottomLabel.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor),553            self.bottomLabel.centerXAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.centerXAnchor),554            ])555        }556        override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {557          super.traitCollectionDidChange(previousTraitCollection)558          self.topLabel.font = .preferredFont(forTextStyle: .headline, compatibleWith: self.traitCollection)559          self.leadingLabel.font = .preferredFont(forTextStyle: .body, compatibleWith: self.traitCollection)560          self.trailingLabel.font = .preferredFont(forTextStyle: .body, compatibleWith: self.traitCollection)561          self.bottomLabel.font = .preferredFont(forTextStyle: .subheadline, compatibleWith: self.traitCollection)562          self.view.setNeedsUpdateConstraints()563          self.view.updateConstraintsIfNeeded()564        }565      }566      let myViewController = MyViewController()567      let navController = UINavigationController(rootViewController: myViewController)568      let viewController = UITabBarController()569      viewController.setViewControllers([navController], animated: false)570      assertSnapshot(matching: viewController, as: .image(on: .iPhoneSe), named: "iphone-se")571      assertSnapshot(matching: viewController, as: .image(on: .iPhone8), named: "iphone-8")572      assertSnapshot(matching: viewController, as: .image(on: .iPhone8Plus), named: "iphone-8-plus")573      assertSnapshot(matching: viewController, as: .image(on: .iPhoneX), named: "iphone-x")574      assertSnapshot(matching: viewController, as: .image(on: .iPhoneXr), named: "iphone-xr")575      assertSnapshot(matching: viewController, as: .image(on: .iPhoneXsMax), named: "iphone-xs-max")576      assertSnapshot(matching: viewController, as: .image(on: .iPadMini), named: "ipad-mini")577      assertSnapshot(matching: viewController, as: .image(on: .iPad9_7), named: "ipad-9-7")578      assertSnapshot(matching: viewController, as: .image(on: .iPad10_2), named: "ipad-10-2")579      assertSnapshot(matching: viewController, as: .image(on: .iPadPro10_5), named: "ipad-pro-10-5")580      assertSnapshot(matching: viewController, as: .image(on: .iPadPro11), named: "ipad-pro-11")581      assertSnapshot(matching: viewController, as: .image(on: .iPadPro12_9), named: "ipad-pro-12-9")582      assertSnapshot(matching: viewController, as: .image(on: .iPhoneSe(.portrait)), named: "iphone-se")583      assertSnapshot(matching: viewController, as: .image(on: .iPhone8(.portrait)), named: "iphone-8")584      assertSnapshot(matching: viewController, as: .image(on: .iPhone8Plus(.portrait)), named: "iphone-8-plus")585      assertSnapshot(matching: viewController, as: .image(on: .iPhoneX(.portrait)), named: "iphone-x")586      assertSnapshot(matching: viewController, as: .image(on: .iPhoneXr(.portrait)), named: "iphone-xr")587      assertSnapshot(matching: viewController, as: .image(on: .iPhoneXsMax(.portrait)), named: "iphone-xs-max")588      assertSnapshot(matching: viewController, as: .image(on: .iPadMini(.landscape)), named: "ipad-mini")589      assertSnapshot(matching: viewController, as: .image(on: .iPad9_7(.landscape)), named: "ipad-9-7")590      assertSnapshot(matching: viewController, as: .image(on: .iPad10_2(.landscape)), named: "ipad-10-2")591      assertSnapshot(matching: viewController, as: .image(on: .iPadPro10_5(.landscape)), named: "ipad-pro-10-5")592      assertSnapshot(matching: viewController, as: .image(on: .iPadPro11(.landscape)), named: "ipad-pro-11")593      assertSnapshot(matching: viewController, as: .image(on: .iPadPro12_9(.landscape)), named: "ipad-pro-12-9")594      assertSnapshot(595        matching: viewController, as: .image(on: .iPhoneSe(.landscape)), named: "iphone-se-alternative")596      assertSnapshot(597        matching: viewController, as: .image(on: .iPhone8(.landscape)), named: "iphone-8-alternative")598      assertSnapshot(599        matching: viewController, as: .image(on: .iPhone8Plus(.landscape)), named: "iphone-8-plus-alternative")600      assertSnapshot(601        matching: viewController, as: .image(on: .iPhoneX(.landscape)), named: "iphone-x-alternative")602      assertSnapshot(603        matching: viewController, as: .image(on: .iPhoneXr(.landscape)), named: "iphone-xr-alternative")604      assertSnapshot(605        matching: viewController, as: .image(on: .iPhoneXsMax(.landscape)), named: "iphone-xs-max-alternative")606      assertSnapshot(607        matching: viewController, as: .image(on: .iPadMini(.portrait)), named: "ipad-mini-alternative")608      assertSnapshot(609        matching: viewController, as: .image(on: .iPad9_7(.portrait)), named: "ipad-9-7-alternative")610      assertSnapshot(611        matching: viewController, as: .image(on: .iPad10_2(.portrait)), named: "ipad-10-2-alternative")612      assertSnapshot(613        matching: viewController, as: .image(on: .iPadPro10_5(.portrait)), named: "ipad-pro-10-5-alternative")614      assertSnapshot(615        matching: viewController, as: .image(on: .iPadPro11(.portrait)), named: "ipad-pro-11-alternative")616      assertSnapshot(617        matching: viewController, as: .image(on: .iPadPro12_9(.portrait)), named: "ipad-pro-12-9-alternative")618    }619    #endif620  }621  func testCollectionViewsWithMultipleScreenSizes() {622    #if os(iOS)623    final class CollectionViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {624      let flowLayout: UICollectionViewFlowLayout = {625        let layout = UICollectionViewFlowLayout()626        layout.scrollDirection = .horizontal627        layout.minimumLineSpacing = 20628        return layout629      }()630      lazy var collectionView = UICollectionView(frame: .zero, collectionViewLayout: flowLayout)631      override func viewDidLoad() {632        super.viewDidLoad()633        view.backgroundColor = .white634        view.addSubview(collectionView)635        collectionView.backgroundColor = .white636        collectionView.dataSource = self637        collectionView.delegate = self638        collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")639        collectionView.translatesAutoresizingMaskIntoConstraints = false640        NSLayoutConstraint.activate([641          collectionView.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor),642          collectionView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor),643          collectionView.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor),644          collectionView.bottomAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor)645        ])646        collectionView.reloadData()647      }648      override func viewDidLayoutSubviews() {649        super.viewDidLayoutSubviews()650        collectionView.collectionViewLayout.invalidateLayout()651      }652      override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {653        super.traitCollectionDidChange(previousTraitCollection)654        collectionView.collectionViewLayout.invalidateLayout()655      }656      func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {657        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)658        cell.contentView.backgroundColor = .orange659        return cell660      }661      func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {662        return 20663      }664      func collectionView(665        _ collectionView: UICollectionView,666        layout collectionViewLayout: UICollectionViewLayout,667        sizeForItemAt indexPath: IndexPath668        ) -> CGSize {669        return CGSize(670          width: min(collectionView.frame.width - 50, 300),671          height: collectionView.frame.height672        )673      }674    }675    let viewController = CollectionViewController()676    assertSnapshots(matching: viewController, as: [677      "ipad": .image(on: .iPadPro12_9),678      "iphoneSe": .image(on: .iPhoneSe),679      "iphone8": .image(on: .iPhone8),680      "iphoneMax": .image(on: .iPhoneXsMax)681    ])682    #endif683  }684  func testTraitsWithView() {685    #if os(iOS)686    if #available(iOS 11.0, *) {687      let label = UILabel()688      label.font = .preferredFont(forTextStyle: .title1)689      label.adjustsFontForContentSizeCategory = true690      label.text = "What's the point?"691      allContentSizes.forEach { name, contentSize in692        assertSnapshot(693          matching: label,694          as: .image(traits: .init(preferredContentSizeCategory: contentSize)),695          named: "label-\(name)"696        )697      }698    }699    #endif700  }701  func testTraitsWithViewController() {702    #if os(iOS)703    let label = UILabel()704    label.font = .preferredFont(forTextStyle: .title1)705    label.adjustsFontForContentSizeCategory = true706    label.text = "What's the point?"707    let viewController = UIViewController()708    viewController.view.addSubview(label)709    label.translatesAutoresizingMaskIntoConstraints = false710    NSLayoutConstraint.activate([711      label.leadingAnchor.constraint(equalTo: viewController.view.layoutMarginsGuide.leadingAnchor),712      label.topAnchor.constraint(equalTo: viewController.view.layoutMarginsGuide.topAnchor),713      label.trailingAnchor.constraint(equalTo: viewController.view.layoutMarginsGuide.trailingAnchor)714    ])715    allContentSizes.forEach { name, contentSize in716      assertSnapshot(717        matching: viewController,718        as: .recursiveDescription(on: .iPhoneSe, traits: .init(preferredContentSizeCategory: contentSize)),719        named: "label-\(name)"720      )721    }722    #endif723  }724  func testUIBezierPath() {725    #if os(iOS) || os(tvOS)726    let path = UIBezierPath.heart727    let osName: String728    #if os(iOS)729    osName = "iOS"730    #elseif os(tvOS)731    osName = "tvOS"732    #endif733    if !ProcessInfo.processInfo.environment.keys.contains("GITHUB_WORKFLOW") {734      assertSnapshot(matching: path, as: .image, named: osName)735    }736    if #available(iOS 11.0, tvOS 11.0, *) {737      assertSnapshot(matching: path, as: .elementsDescription, named: osName)738    }739    #endif740  }741  func testUIView() {742    #if os(iOS)743    let view = UIButton(type: .contactAdd)744    assertSnapshot(matching: view, as: .image)745    assertSnapshot(matching: view, as: .recursiveDescription)746    #endif747  }748  func testUIViewControllerLifeCycle() {749    #if os(iOS)750    class ViewController: UIViewController {751      let viewDidLoadExpectation: XCTestExpectation752      let viewWillAppearExpectation: XCTestExpectation753      let viewDidAppearExpectation: XCTestExpectation754      let viewWillDisappearExpectation: XCTestExpectation755      let viewDidDisappearExpectation: XCTestExpectation756      init(viewDidLoadExpectation: XCTestExpectation,757           viewWillAppearExpectation: XCTestExpectation,758           viewDidAppearExpectation: XCTestExpectation,759           viewWillDisappearExpectation: XCTestExpectation,760           viewDidDisappearExpectation: XCTestExpectation){761        self.viewDidLoadExpectation = viewDidLoadExpectation762        self.viewWillAppearExpectation = viewWillAppearExpectation763        self.viewDidAppearExpectation = viewDidAppearExpectation764        self.viewWillDisappearExpectation = viewWillDisappearExpectation765        self.viewDidDisappearExpectation = viewDidDisappearExpectation766        super.init(nibName: nil, bundle: nil)767      }768      required init?(coder: NSCoder) {769        fatalError("init(coder:) has not been implemented")770      }771      override func viewDidLoad() {772        super.viewDidLoad()773        viewDidLoadExpectation.fulfill()774      }775      override func viewWillAppear(_ animated: Bool) {776        super.viewWillAppear(animated)777        viewWillAppearExpectation.fulfill()778      }779      override func viewDidAppear(_ animated: Bool) {780        super.viewDidAppear(animated)781        viewDidAppearExpectation.fulfill()782      }783      override func viewWillDisappear(_ animated: Bool) {784        super.viewWillDisappear(animated)785        viewWillDisappearExpectation.fulfill()786      }787      override func viewDidDisappear(_ animated: Bool) {788        super.viewDidDisappear(animated)789        viewDidDisappearExpectation.fulfill()790      }791    }792    let viewDidLoadExpectation = expectation(description: "viewDidLoad")793    let viewWillAppearExpectation = expectation(description: "viewWillAppear")794    let viewDidAppearExpectation = expectation(description: "viewDidAppear")795    let viewWillDisappearExpectation = expectation(description: "viewWillDisappear")796    let viewDidDisappearExpectation = expectation(description: "viewDidDisappear")797    viewWillAppearExpectation.expectedFulfillmentCount = 4798    viewDidAppearExpectation.expectedFulfillmentCount = 4799    viewWillDisappearExpectation.expectedFulfillmentCount = 4800    viewDidDisappearExpectation.expectedFulfillmentCount = 4801    let viewController = ViewController(802      viewDidLoadExpectation: viewDidLoadExpectation,803      viewWillAppearExpectation: viewWillAppearExpectation,804      viewDidAppearExpectation: viewDidAppearExpectation,805      viewWillDisappearExpectation: viewWillDisappearExpectation,806      viewDidDisappearExpectation: viewDidDisappearExpectation807    )808    assertSnapshot(matching: viewController, as: .image)809    assertSnapshot(matching: viewController, as: .image)810    wait(for: [811      viewDidLoadExpectation,812      viewWillAppearExpectation,813      viewDidAppearExpectation,814      viewWillDisappearExpectation,815      viewDidDisappearExpectation,816    ], timeout: 1.0, enforceOrder: true)817    #endif818  }819  func testCALayer() {820    #if os(iOS)821    let layer = CALayer()822    layer.frame = CGRect(x: 0, y: 0, width: 100, height: 100)823    layer.backgroundColor = UIColor.red.cgColor824    layer.borderWidth = 4.0825    layer.borderColor = UIColor.black.cgColor826    assertSnapshot(matching: layer, as: .image)827    #endif828  }829  func testCALayerWithGradient() {830    #if os(iOS)831    let baseLayer = CALayer()832    baseLayer.frame = CGRect(x: 0, y: 0, width: 100, height: 100)833    let gradientLayer = CAGradientLayer()834    gradientLayer.colors = [UIColor.red.cgColor, UIColor.yellow.cgColor]835    gradientLayer.frame = baseLayer.frame836    baseLayer.addSublayer(gradientLayer)837    assertSnapshot(matching: baseLayer, as: .image)838    #endif839  }840  func testViewControllerHierarchy() {841    #if os(iOS)842    let page = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal)843    page.setViewControllers([UIViewController()], direction: .forward, animated: false)844    let tab = UITabBarController()845    tab.viewControllers = [846      UINavigationController(rootViewController: page),847      UINavigationController(rootViewController: UIViewController()),848      UINavigationController(rootViewController: UIViewController()),849      UINavigationController(rootViewController: UIViewController()),850      UINavigationController(rootViewController: UIViewController())851    ]852    assertSnapshot(matching: tab, as: .hierarchy)853    #endif854  }855  func testURLRequest() {856    var get = URLRequest(url: URL(string: "https://www.pointfree.co/")!)857    get.addValue("pf_session={}", forHTTPHeaderField: "Cookie")858    get.addValue("text/html", forHTTPHeaderField: "Accept")859    get.addValue("application/json", forHTTPHeaderField: "Content-Type")860    assertSnapshot(matching: get, as: .raw, named: "get")861    assertSnapshot(matching: get, as: .curl, named: "get-curl")862    var getWithQuery = URLRequest(url: URL(string: "https://www.pointfree.co?key_2=value_2&key_1=value_1&key_3=value_3")!)863    getWithQuery.addValue("pf_session={}", forHTTPHeaderField: "Cookie")864    getWithQuery.addValue("text/html", forHTTPHeaderField: "Accept")865    getWithQuery.addValue("application/json", forHTTPHeaderField: "Content-Type")866    assertSnapshot(matching: getWithQuery, as: .raw, named: "get-with-query")867    assertSnapshot(matching: getWithQuery, as: .curl, named: "get-with-query-curl")868    var post = URLRequest(url: URL(string: "https://www.pointfree.co/subscribe")!)869    post.httpMethod = "POST"870    post.addValue("pf_session={\"user_id\":\"0\"}", forHTTPHeaderField: "Cookie")871    post.addValue("text/html", forHTTPHeaderField: "Accept")872    post.httpBody = Data("pricing[billing]=monthly&pricing[lane]=individual".utf8)873    assertSnapshot(matching: post, as: .raw, named: "post")874    assertSnapshot(matching: post, as: .curl, named: "post-curl")875    876    var postWithJSON = URLRequest(url: URL(string: "http://dummy.restapiexample.com/api/v1/create")!)877    postWithJSON.httpMethod = "POST"878    postWithJSON.addValue("application/json", forHTTPHeaderField: "Content-Type")879    postWithJSON.addValue("application/json", forHTTPHeaderField: "Accept")880    postWithJSON.httpBody = Data("{\"name\":\"tammy134235345235\", \"salary\":0, \"age\":\"tammy133\"}".utf8)881    assertSnapshot(matching: postWithJSON, as: .raw, named: "post-with-json")882    assertSnapshot(matching: postWithJSON, as: .curl, named: "post-with-json-curl")883    var head = URLRequest(url: URL(string: "https://www.pointfree.co/")!)884    head.httpMethod = "HEAD"885    head.addValue("pf_session={}", forHTTPHeaderField: "Cookie")886    assertSnapshot(matching: head, as: .raw, named: "head")887    assertSnapshot(matching: head, as: .curl, named: "head-curl")888    post = URLRequest(url: URL(string: "https://www.pointfree.co/subscribe")!)889    post.httpMethod = "POST"890    post.addValue("pf_session={\"user_id\":\"0\"}", forHTTPHeaderField: "Cookie")891    post.addValue("application/json", forHTTPHeaderField: "Accept")892    post.httpBody = Data("""893                         {"pricing": {"lane": "individual","billing": "monthly"}}894                         """.utf8)895    _assertInlineSnapshot(matching: post, as: .raw(pretty: true), with: """896    POST https://www.pointfree.co/subscribe897    Accept: application/json898    Cookie: pf_session={"user_id":"0"}899    900    {901      "pricing" : {902        "billing" : "monthly",903        "lane" : "individual"904      }905    }906    """)907  }908  func testWebView() throws {909    #if os(iOS) || os(macOS)910    let fixtureUrl = URL(fileURLWithPath: String(#file), isDirectory: false)911      .deletingLastPathComponent()912      .appendingPathComponent("__Fixtures__/pointfree.html")913    let html = try String(contentsOf: fixtureUrl)914    let webView = WKWebView()915    webView.loadHTMLString(html, baseURL: nil)916    if !ProcessInfo.processInfo.environment.keys.contains("GITHUB_WORKFLOW") {917      assertSnapshot(918        matching: webView,919        as: .image(size: .init(width: 800, height: 600)),920        named: platform921      )922    }923    #endif924  }925  func testViewWithZeroHeightOrWidth() {926    #if os(iOS) || os(tvOS)927    var rect = CGRect(x: 0, y: 0, width: 350, height: 0)928    var view = UIView(frame: rect)929    view.backgroundColor = .red930    assertSnapshot(matching: view, as: .image, named: "noHeight")931    932    rect = CGRect(x: 0, y: 0, width: 0, height: 350)933    view = UIView(frame: rect)934    view.backgroundColor = .green935    assertSnapshot(matching: view, as: .image, named: "noWidth")936    rect = CGRect(x: 0, y: 0, width: 0, height: 0)937    view = UIView(frame: rect)938    view.backgroundColor = .blue939    assertSnapshot(matching: view, as: .image, named: "noWidth.noHeight")940    #endif941  }942  func testEmbeddedWebView() throws {943    #if os(iOS)944    let label = UILabel()945    label.text = "Hello, Blob!"946    let fixtureUrl = URL(fileURLWithPath: String(#file), isDirectory: false)947      .deletingLastPathComponent()948      .appendingPathComponent("__Fixtures__/pointfree.html")949    let html = try String(contentsOf: fixtureUrl)950    let webView = WKWebView()951    webView.loadHTMLString(html, baseURL: nil)952    webView.isHidden = true953    let stackView = UIStackView(arrangedSubviews: [label, webView])954    stackView.axis = .vertical955    if !ProcessInfo.processInfo.environment.keys.contains("GITHUB_WORKFLOW") {956      assertSnapshot(957        matching: stackView,958        as: .image(size: .init(width: 800, height: 600)),959        named: platform960      )961    }962    #endif963  }964  #if os(iOS) || os(macOS)965  final class ManipulatingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {966    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {967      webView.evaluateJavaScript("document.body.children[0].classList.remove(\"hero\")") // Change layout968    }969  }970  func testWebViewWithManipulatingNavigationDelegate() throws {971    let manipulatingWKWebViewNavigationDelegate = ManipulatingWKWebViewNavigationDelegate()972    let webView = WKWebView()973    webView.navigationDelegate = manipulatingWKWebViewNavigationDelegate974    let fixtureUrl = URL(fileURLWithPath: String(#file), isDirectory: false)975      .deletingLastPathComponent()976      .appendingPathComponent("__Fixtures__/pointfree.html")977    let html = try String(contentsOf: fixtureUrl)978    webView.loadHTMLString(html, baseURL: nil)979    if !ProcessInfo.processInfo.environment.keys.contains("GITHUB_WORKFLOW") {980      assertSnapshot(981        matching: webView,982        as: .image(size: .init(width: 800, height: 600)),983        named: platform984      )985    }986    _ = manipulatingWKWebViewNavigationDelegate987  }988  #if os(iOS) || os(macOS)989  func testWebViewWithRealUrl() throws {990    let manipulatingWKWebViewNavigationDelegate = ManipulatingWKWebViewNavigationDelegate()991    let webView = WKWebView()992    webView.navigationDelegate = manipulatingWKWebViewNavigationDelegate993    webView.load(URLRequest(url: URL(string: "https://www.pointfree.co")!))994    if !ProcessInfo.processInfo.environment.keys.contains("GITHUB_WORKFLOW") {995      assertSnapshot(996        matching: webView,997        as: .image(size: .init(width: 800, height: 600)),998        named: platform999      )1000    }1001    _ = manipulatingWKWebViewNavigationDelegate1002  }1003  #endif1004  final class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {1005    func webView(1006      _ webView: WKWebView,1007      decidePolicyFor navigationAction: WKNavigationAction,1008      decisionHandler: @escaping (WKNavigationActionPolicy) -> Void1009    ) {1010      decisionHandler(.cancel)1011    }1012  }1013  func testWebViewWithCancellingNavigationDelegate() throws {1014    let cancellingWKWebViewNavigationDelegate = CancellingWKWebViewNavigationDelegate()1015    let webView = WKWebView()1016    webView.navigationDelegate = cancellingWKWebViewNavigationDelegate1017    let fixtureUrl = URL(fileURLWithPath: String(#file), isDirectory: false)1018      .deletingLastPathComponent()1019      .appendingPathComponent("__Fixtures__/pointfree.html")1020    let html = try String(contentsOf: fixtureUrl)1021    webView.loadHTMLString(html, baseURL: nil)1022    if !ProcessInfo.processInfo.environment.keys.contains("GITHUB_WORKFLOW") {1023      assertSnapshot(1024        matching: webView,1025        as: .image(size: .init(width: 800, height: 600)),1026        named: platform1027      )1028    }1029    _ = cancellingWKWebViewNavigationDelegate1030  }1031  #endif1032  @available(iOS 13.0, *)1033  func testSwiftUIView_iOS() {1034    #if os(iOS)1035    struct MyView: SwiftUI.View {1036      var body: some SwiftUI.View {1037        HStack {1038          Image(systemName: "checkmark.circle.fill")1039            Text("Checked").fixedSize()1040        }1041        .padding(5)1042        .background(RoundedRectangle(cornerRadius: 5.0).fill(Color.blue))1043        .padding(10)1044      }1045    }1046    let view = MyView().background(Color.yellow)1047    assertSnapshot(matching: view, as: .image(traits: .init(userInterfaceStyle: .light)))1048    assertSnapshot(matching: view, as: .image(layout: .sizeThatFits, traits: .init(userInterfaceStyle: .light)), named: "size-that-fits")1049    assertSnapshot(matching: view, as: .image(layout: .fixed(width: 200.0, height: 100.0), traits: .init(userInterfaceStyle: .light)), named: "fixed")1050    assertSnapshot(matching: view, as: .image(layout: .device(config: .iPhoneSe), traits: .init(userInterfaceStyle: .light)), named: "device")1051    #endif1052  }1053  @available(tvOS 13.0, *)1054  func testSwiftUIView_tvOS() {1055    #if os(tvOS)1056    struct MyView: SwiftUI.View {1057      var body: some SwiftUI.View {1058        HStack {1059          Image(systemName: "checkmark.circle.fill")1060            Text("Checked").fixedSize()1061        }1062        .padding(5)1063        .background(RoundedRectangle(cornerRadius: 5.0).fill(Color.blue))1064        .padding(10)1065      }1066    }1067    let view = MyView().background(Color.yellow)1068    assertSnapshot(matching: view, as: .image())1069    assertSnapshot(matching: view, as: .image(layout: .sizeThatFits), named: "size-that-fits")1070    assertSnapshot(matching: view, as: .image(layout: .fixed(width: 300.0, height: 100.0)), named: "fixed")1071    assertSnapshot(matching: view, as: .image(layout: .device(config: .tv)), named: "device")1072    #endif1073  }1074  @available(*, deprecated)1075  func testIsRecordingProxy() {1076    SnapshotTesting.record = true1077    XCTAssertEqual(isRecording, true)1078    SnapshotTesting.record = false1079    XCTAssertEqual(isRecording, false)1080  }1081}1082#if os(iOS)1083private let allContentSizes =1084  [1085    "extra-small": UIContentSizeCategory.extraSmall,1086    "small": .small,1087    "medium": .medium,1088    "large": .large,1089    "extra-large": .extraLarge,1090    "extra-extra-large": .extraExtraLarge,1091    "extra-extra-extra-large": .extraExtraExtraLarge,1092    "accessibility-medium": .accessibilityMedium,1093    "accessibility-large": .accessibilityLarge,1094    "accessibility-extra-large": .accessibilityExtraLarge,1095    "accessibility-extra-extra-large": .accessibilityExtraExtraLarge,1096    "accessibility-extra-extra-extra-large": .accessibilityExtraExtraExtraLarge,1097    ]1098#endif1099#if os(Linux) || os(Windows)1100extension SnapshotTestingTests {1101  static var allTests : [(String, (SnapshotTestingTests) -> () throws -> Void)] {1102    return [1103      ("testAny", testAny),1104      ("testAnySnapshotStringConvertible", testAnySnapshotStringConvertible),1105      ("testAutolayout", testAutolayout),1106      ("testDeterministicDictionaryAndSetSnapshots", testDeterministicDictionaryAndSetSnapshots),1107      ("testEncodable", testEncodable),1108      ("testMixedViews", testMixedViews),1109      ("testMultipleSnapshots", testMultipleSnapshots),1110      ("testNamedAssertion", testNamedAssertion),1111      ("testPrecision", testPrecision),1112      ("testSCNView", testSCNView),1113      ("testSKView", testSKView),1114      ("testTableViewController", testTableViewController),1115      ("testTraits", testTraits),1116      ("testTraitsEmbeddedInTabNavigation", testTraitsEmbeddedInTabNavigation),1117      ("testTraitsWithView", testTraitsWithView),1118      ("testUIView", testUIView),1119      ("testURLRequest", testURLRequest),1120      ("testWebView", testWebView),1121    ]1122  }1123}1124#endif...

Full Screen

Full Screen

testTraitsEmbeddedInTabNavigation

Using AI Code Generation

copy

Full Screen

1testTraitsEmbeddedInTabNavigation()2testTraitsEmbeddedInTabNavigation()3testTraitsEmbeddedInTabNavigation()4testTraitsEmbeddedInTabNavigation()5testTraitsEmbeddedInTabNavigation()6testTraitsEmbeddedInTabNavigation()7testTraitsEmbeddedInTabNavigation()8testTraitsEmbeddedInTabNavigation()9testTraitsEmbeddedInTabNavigation()10testTraitsEmbeddedInTabNavigation()11testTraitsEmbeddedInTabNavigation()12testTraitsEmbeddedInTabNavigation()13testTraitsEmbeddedInTabNavigation()14testTraitsEmbeddedInTabNavigation()15testTraitsEmbeddedInTabNavigation()

Full Screen

Full Screen

testTraitsEmbeddedInTabNavigation

Using AI Code Generation

copy

Full Screen

1import UIKit2import WebKit3class ViewController: UIViewController {4    override func viewDidLoad() {5        super.viewDidLoad()6        let webConfiguration = WKWebViewConfiguration()7        webView = WKWebView(frame: .zero, configuration: webConfiguration)8        webViewNavigationDelegate = CancellingWKWebViewNavigationDelegate(webView: webView!)9        let myRequest = URLRequest(url: myURL!)10        webView?.load(myRequest)11    }12}13import UIKit14import WebKit15class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {16    init(webView: WKWebView) {17    }18    func testTraitsEmbeddedInTabNavigation() {19        if (traits?.userInterfaceIdiom == .phone && traits?.horizontalSizeClass == .compact) {20            webView?.stopLoading()21        }22    }23    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {24        testTraitsEmbeddedInTabNavigation()25    }26    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {27        testTraitsEmbeddedInTabNavigation()28    }29}

Full Screen

Full Screen

testTraitsEmbeddedInTabNavigation

Using AI Code Generation

copy

Full Screen

1import UIKit2import WebKit3class ViewController: UIViewController, WKNavigationDelegate {4    override func viewDidLoad() {5        super.viewDidLoad()6        navigationDelegate = CancellingWKWebViewNavigationDelegate()7        webView.load(URLRequest(url: url))8    }9}10extension ViewController: CancellingWKWebViewNavigationDelegateDelegate {11    func testTraitsEmbeddedInTabNavigation(_ navigation: WKNavigation!, withError error: Error!) {12        print("testTraitsEmbeddedInTabNavigation")13    }14}15import UIKit16import WebKit17protocol CancellingWKWebViewNavigationDelegateDelegate: class {18    func testTraitsEmbeddedInTabNavigation(_ navigation: WKNavigation!, withError error: Error!)19}20class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {21    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {22        delegate?.testTraitsEmbeddedInTabNavigation(navigation, withError: error)23    }24}

Full Screen

Full Screen

testTraitsEmbeddedInTabNavigation

Using AI Code Generation

copy

Full Screen

1let webview = WKWebView()2let delegate = CancellingWKWebViewNavigationDelegate()3let request = URLRequest(url: url)4webview.load(request)5delegate.testTraitsEmbeddedInTabNavigation(webview: webview, completion: { (result) in6    print(result)7})8import Foundation9import WebKit10class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {11    public var tabNavigationTraitsCompletion: (([String]) -> Void)?12    public func testTraitsEmbeddedInTabNavigation(webview: WKWebView, completion: @escaping (([String]) -> Void)) {13        let request = URLRequest(url: url)14        webview.load(request)15    }16    public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {17        if !tabNavigationTraitsCompletionCalled {18            tabNavigationTraitsCompletion?(tabNavigationTraits)19        }20    }21}22import Foundation23import WebKit24extension WKWebView {25    public func testTraitsEmbeddedInTabNavigation(completion: @escaping (([String]) -> Void)) {26        if let delegate = navigationDelegate as? CancellingWKWebViewNavigationDelegate {27            delegate.testTraitsEmbeddedInTabNavigation(webview: self, completion: completion)28        }29    }30}31import XCTest32import WebKit33class WKWebView_TabNavigationTests: XCTestCase {34    func testTraitsEmbeddedInTabNavigation() {35        let webview = WKWebView()36        let delegate = CancellingWKWebViewNavigationDelegate()37        webview.testTraitsEmbeddedInTabNavigation { (result) in38            print(result)39        }40    }41}42I have a WKWebView embedded in a tabbed view. I have a custom WKNavigationDelegate that I use to cancel the navigation to a particular URL. I also have a method on WKWebView that calls the WKNavigationDelegate method to test the navigation delegate (this is for

Full Screen

Full Screen

testTraitsEmbeddedInTabNavigation

Using AI Code Generation

copy

Full Screen

1import UIKit2import WebKit3class ViewController: UIViewController {4    let cancellingWKWebViewNavigationDelegate = CancellingWKWebViewNavigationDelegate()5    override func viewDidLoad() {6        super.viewDidLoad()7        let config = WKWebViewConfiguration()8        config.websiteDataStore = WKWebsiteDataStore.nonPersistent()9        webView = WKWebView(frame: .zero, configuration: config)10        view.addSubview(webView)11        webView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true12        webView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true13        webView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true14        webView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true15        webView.load(URLRequest(url: url))16    }17}18class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {19    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {20        testTraitsEmbeddedInTabNavigation(navigationAction: navigationAction, decisionHandler: decisionHandler)21    }22    func testTraitsEmbeddedInTabNavigation(navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {23        guard let url = navigationAction.request.url else {24            decisionHandler(.allow)25        }26        if url.scheme == "https" {27            decisionHandler(.cancel)28        }29        decisionHandler(.allow)30    }31}32import UIKit33import WebKit34class ViewController: UIViewController {35    let cancellingWKWebViewNavigationDelegate = CancellingWKWebViewNavigationDelegate()36    override func viewDidLoad() {37        super.viewDidLoad()38        let config = WKWebViewConfiguration()39        config.websiteDataStore = WKWebsiteDataStore.nonPersistent()40        webView = WKWebView(frame: .zero, configuration: config)41        view.addSubview(webView)42        webView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true43        webView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true44        webView.topAnchor.constraint(equalTo: view.topAnchor).isActive

Full Screen

Full Screen

testTraitsEmbeddedInTabNavigation

Using AI Code Generation

copy

Full Screen

1class ViewController: UIViewController {2    override func viewDidLoad() {3        super.viewDidLoad()4    }5    override func viewDidAppear(_ animated: Bool) {6        super.viewDidAppear(animated)7        let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))8        let delegate = CancellingWKWebViewNavigationDelegate()9        self.view.addSubview(webView)10        webView.load(URLRequest(url: url))11        delegate.testTraitsEmbeddedInTabNavigation(webView: webView)12    }13}14class ViewController: UIViewController {15    override func viewDidLoad() {16        super.viewDidLoad()17    }18    override func viewDidAppear(_ animated: Bool) {19        super.viewDidAppear(animated)20        let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))21        let delegate = CancellingWKWebViewNavigationDelegate()22        self.view.addSubview(webView)23        webView.load(URLRequest(url: url))24        delegate.testTraitsEmbeddedInTabNavigation(webView: webView)25    }26}27class ViewController: UIViewController {28    override func viewDidLoad() {29        super.viewDidLoad()30    }31    override func viewDidAppear(_ animated: Bool) {32        super.viewDidAppear(animated)33        let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))34        let delegate = CancellingWKWebViewNavigationDelegate()35        self.view.addSubview(webView)36        webView.load(URLRequest(url: url))37        delegate.testTraitsEmbeddedInTabNavigation(webView: webView)

Full Screen

Full Screen

testTraitsEmbeddedInTabNavigation

Using AI Code Generation

copy

Full Screen

1import UIKit2import WebKit3class ViewController: UIViewController {4    override func viewDidLoad() {5        super.viewDidLoad()6        let webConfiguration = WKWebViewConfiguration()7        webConfiguration.websiteDataStore = WKWebsiteDataStore.default()8        webView = WKWebView(frame: .zero, configuration: webConfiguration)9        webView?.navigationDelegate = CancellingWKWebViewNavigationDelegate()10    }11}12class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {13    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {14        if navigationAction.request.url?.host == "www.google.com" {15            decisionHandler(.cancel)16        } else {17            decisionHandler(.allow)18        }19    }20}21import UIKit22import WebKit23class ViewController: UIViewController {24    override func viewDidLoad() {25        super.viewDidLoad()26        let webConfiguration = WKWebViewConfiguration()27        webConfiguration.websiteDataStore = WKWebsiteDataStore.default()28        webView = WKWebView(frame: .zero, configuration: webConfiguration)29        webView?.navigationDelegate = CancellingWKWebViewNavigationDelegate()30    }31}32class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {33    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {34        if navigationAction.request.url?.host == "www.google.com" {35            decisionHandler(.cancel)36        } else {37            decisionHandler(.allow)38        }39    }40}41import UIKit

Full Screen

Full Screen

testTraitsEmbeddedInTabNavigation

Using AI Code Generation

copy

Full Screen

1import  UIKit2 import  WebKit3 class   ViewController :  UIViewController {4     override   func   viewDidLoad () {5         super . viewDidLoad()6        navigationDelegate = CancellingWKWebViewNavigationDelegate()7        webView = WKWebView(frame:  CGRect (x:  0 , y:  0 , width:  100 , height:  100 ))8    }9}10import  UIKit11 import  WebKit12 class   CancellingWKWebViewNavigationDelegate :  NSObject ,  WKNavigationDelegate {13     func   webView (_ webView: WKWebView,  decidePolicyFor navigationAction: WKNavigationAction,14                  decisionHandler:  @escaping  (WKNavigationActionPolicy) ->  Void ) {15        decisionHandler(.cancel)16    }17}

Full Screen

Full Screen

testTraitsEmbeddedInTabNavigation

Using AI Code Generation

copy

Full Screen

1import XCTest2class CancellingWKWebViewNavigationDelegateUITests: XCTestCase {3    override func setUp() {4        XCUIApplication().launch()5    }6    override func tearDown() {7    }8    func testTraitsEmbeddedInTabNavigation() {9        let app = XCUIApplication()10        tabBarsQuery.buttons["Tab 1"].tap()11        tabBarsQuery.buttons["Tab 2"].tap()12        tabBarsQuery.buttons["Tab 1"].tap()13        tabBarsQuery.buttons["Tab 2"].tap()14        tabBarsQuery.buttons["Tab 1"].tap()15        tabBarsQuery.buttons["Tab 2"].tap()16        tabBarsQuery.buttons["Tab 1"].tap()17        tabBarsQuery.buttons["Tab 2"].tap()18        tabBarsQuery.buttons["Tab 1"].tap()19        tabBarsQuery.buttons["Tab 2"].tap()20        tabBarsQuery.buttons["Tab 1"].tap()21        tabBarsQuery.buttons["Tab 2"].tap()22        tabBarsQuery.buttons["Tab 1"].tap()23        tabBarsQuery.buttons["Tab 2"].tap()24        tabBarsQuery.buttons["Tab 1"].tap()25        tabBarsQuery.buttons["Tab 2"].tap()26        tabBarsQuery.buttons["Tab 1"].tap()

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful