How to use viewDidLoad method of CancellingWKWebViewNavigationDelegate class

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

SnapshotTestingTests.swift

Source:SnapshotTestingTests.swift Github

copy

Full Screen

...316  }317  func testTableViewController() {318    #if os(iOS)319    class TableViewController: UITableViewController {320      override func viewDidLoad() {321        super.viewDidLoad()322        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")323      }324      override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {325        return 10326      }327      override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {328        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)329        cell.textLabel?.text = "\(indexPath.row)"330        return cell331      }332    }333    let tableViewController = TableViewController()334    assertSnapshot(matching: tableViewController, as: .image(on: .iPhoneSe))335    #endif336  }337  func testAssertMultipleSnapshot() {338    #if os(iOS)339    class TableViewController: UITableViewController {340      override func viewDidLoad() {341        super.viewDidLoad()342        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")343      }344      override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {345        return 10346      }347      override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {348        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)349        cell.textLabel?.text = "\(indexPath.row)"350        return cell351      }352    }353    let tableViewController = TableViewController()354    assertSnapshots(matching: tableViewController, as: ["iPhoneSE-image" : .image(on: .iPhoneSe), "iPad-image" : .image(on: .iPadMini)])355    assertSnapshots(matching: tableViewController, as: [.image(on: .iPhoneX), .image(on: .iPhoneXsMax)])356    #endif357  }358  func testTraits() {359    #if os(iOS) || os(tvOS)360    if #available(iOS 11.0, tvOS 11.0, *) {361      class MyViewController: UIViewController {362        let topLabel = UILabel()363        let leadingLabel = UILabel()364        let trailingLabel = UILabel()365        let bottomLabel = UILabel()366        override func viewDidLoad() {367          super.viewDidLoad()368          self.navigationItem.leftBarButtonItem = .init(barButtonSystemItem: .add, target: nil, action: nil)369          self.view.backgroundColor = .white370          self.topLabel.text = "What's"371          self.leadingLabel.text = "the"372          self.trailingLabel.text = "point"373          self.bottomLabel.text = "?"374          self.topLabel.translatesAutoresizingMaskIntoConstraints = false375          self.leadingLabel.translatesAutoresizingMaskIntoConstraints = false376          self.trailingLabel.translatesAutoresizingMaskIntoConstraints = false377          self.bottomLabel.translatesAutoresizingMaskIntoConstraints = false378          self.view.addSubview(self.topLabel)379          self.view.addSubview(self.leadingLabel)380          self.view.addSubview(self.trailingLabel)381          self.view.addSubview(self.bottomLabel)382          NSLayoutConstraint.activate([383            self.topLabel.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor),384            self.topLabel.centerXAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.centerXAnchor),385            self.leadingLabel.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor),386            self.leadingLabel.trailingAnchor.constraint(lessThanOrEqualTo: self.view.safeAreaLayoutGuide.centerXAnchor),387//            self.leadingLabel.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.centerXAnchor),388            self.leadingLabel.centerYAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.centerYAnchor),389            self.trailingLabel.leadingAnchor.constraint(greaterThanOrEqualTo: self.view.safeAreaLayoutGuide.centerXAnchor),390            self.trailingLabel.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor),391            self.trailingLabel.centerYAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.centerYAnchor),392            self.bottomLabel.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor),393            self.bottomLabel.centerXAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.centerXAnchor),394            ])395        }396        override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {397          super.traitCollectionDidChange(previousTraitCollection)398          self.topLabel.font = .preferredFont(forTextStyle: .headline, compatibleWith: self.traitCollection)399          self.leadingLabel.font = .preferredFont(forTextStyle: .body, compatibleWith: self.traitCollection)400          self.trailingLabel.font = .preferredFont(forTextStyle: .body, compatibleWith: self.traitCollection)401          self.bottomLabel.font = .preferredFont(forTextStyle: .subheadline, compatibleWith: self.traitCollection)402          self.view.setNeedsUpdateConstraints()403          self.view.updateConstraintsIfNeeded()404        }405      }406      let viewController = MyViewController()407      #if os(iOS)408      assertSnapshot(matching: viewController, as: .image(on: .iPhoneSe), named: "iphone-se")409      assertSnapshot(matching: viewController, as: .image(on: .iPhone8), named: "iphone-8")410      assertSnapshot(matching: viewController, as: .image(on: .iPhone8Plus), named: "iphone-8-plus")411      assertSnapshot(matching: viewController, as: .image(on: .iPhoneX), named: "iphone-x")412      assertSnapshot(matching: viewController, as: .image(on: .iPhoneXr), named: "iphone-xr")413      assertSnapshot(matching: viewController, as: .image(on: .iPhoneXsMax), named: "iphone-xs-max")414      assertSnapshot(matching: viewController, as: .image(on: .iPadMini), named: "ipad-mini")415      assertSnapshot(matching: viewController, as: .image(on: .iPad9_7), named: "ipad-9-7")416      assertSnapshot(matching: viewController, as: .image(on: .iPad10_2), named: "ipad-10-2")417      assertSnapshot(matching: viewController, as: .image(on: .iPadPro10_5), named: "ipad-pro-10-5")418      assertSnapshot(matching: viewController, as: .image(on: .iPadPro11), named: "ipad-pro-11")419      assertSnapshot(matching: viewController, as: .image(on: .iPadPro12_9), named: "ipad-pro-12-9")420      assertSnapshot(matching: viewController, as: .recursiveDescription(on: .iPhoneSe), named: "iphone-se")421      assertSnapshot(matching: viewController, as: .recursiveDescription(on: .iPhone8), named: "iphone-8")422      assertSnapshot(matching: viewController, as: .recursiveDescription(on: .iPhone8Plus), named: "iphone-8-plus")423      assertSnapshot(matching: viewController, as: .recursiveDescription(on: .iPhoneX), named: "iphone-x")424      assertSnapshot(matching: viewController, as: .recursiveDescription(on: .iPhoneXr), named: "iphone-xr")425      assertSnapshot(matching: viewController, as: .recursiveDescription(on: .iPhoneXsMax), named: "iphone-xs-max")426      assertSnapshot(matching: viewController, as: .recursiveDescription(on: .iPadMini), named: "ipad-mini")427      assertSnapshot(matching: viewController, as: .recursiveDescription(on: .iPad9_7), named: "ipad-9-7")428      assertSnapshot(matching: viewController, as: .recursiveDescription(on: .iPad10_2), named: "ipad-10-2")429      assertSnapshot(matching: viewController, as: .recursiveDescription(on: .iPadPro10_5), named: "ipad-pro-10-5")430      assertSnapshot(matching: viewController, as: .recursiveDescription(on: .iPadPro11), named: "ipad-pro-11")431      assertSnapshot(matching: viewController, as: .recursiveDescription(on: .iPadPro12_9), named: "ipad-pro-12-9")432      assertSnapshot(matching: viewController, as: .image(on: .iPhoneSe(.portrait)), named: "iphone-se")433      assertSnapshot(matching: viewController, as: .image(on: .iPhone8(.portrait)), named: "iphone-8")434      assertSnapshot(matching: viewController, as: .image(on: .iPhone8Plus(.portrait)), named: "iphone-8-plus")435      assertSnapshot(matching: viewController, as: .image(on: .iPhoneX(.portrait)), named: "iphone-x")436      assertSnapshot(matching: viewController, as: .image(on: .iPhoneXr(.portrait)), named: "iphone-xr")437      assertSnapshot(matching: viewController, as: .image(on: .iPhoneXsMax(.portrait)), named: "iphone-xs-max")438      assertSnapshot(matching: viewController, as: .image(on: .iPadMini(.landscape)), named: "ipad-mini")439      assertSnapshot(matching: viewController, as: .image(on: .iPad9_7(.landscape)), named: "ipad-9-7")440      assertSnapshot(matching: viewController, as: .image(on: .iPad10_2(.landscape)), named: "ipad-10-2")441      assertSnapshot(matching: viewController, as: .image(on: .iPadPro10_5(.landscape)), named: "ipad-pro-10-5")442      assertSnapshot(matching: viewController, as: .image(on: .iPadPro11(.landscape)), named: "ipad-pro-11")443      assertSnapshot(matching: viewController, as: .image(on: .iPadPro12_9(.landscape)), named: "ipad-pro-12-9")444      assertSnapshot(matching: viewController, as: .image(on: .iPadMini(.landscape(splitView: .oneThird))), named: "ipad-mini-33-split-landscape")445      assertSnapshot(matching: viewController, as: .image(on: .iPadMini(.landscape(splitView: .oneHalf))), named: "ipad-mini-50-split-landscape")446      assertSnapshot(matching: viewController, as: .image(on: .iPadMini(.landscape(splitView: .twoThirds))), named: "ipad-mini-66-split-landscape")447      assertSnapshot(matching: viewController, as: .image(on: .iPadMini(.portrait(splitView: .oneThird))), named: "ipad-mini-33-split-portrait")448      assertSnapshot(matching: viewController, as: .image(on: .iPadMini(.portrait(splitView: .twoThirds))), named: "ipad-mini-66-split-portrait")449      assertSnapshot(matching: viewController, as: .image(on: .iPad9_7(.landscape(splitView: .oneThird))), named: "ipad-9-7-33-split-landscape")450      assertSnapshot(matching: viewController, as: .image(on: .iPad9_7(.landscape(splitView: .oneHalf))), named: "ipad-9-7-50-split-landscape")451      assertSnapshot(matching: viewController, as: .image(on: .iPad9_7(.landscape(splitView: .twoThirds))), named: "ipad-9-7-66-split-landscape")452      assertSnapshot(matching: viewController, as: .image(on: .iPad9_7(.portrait(splitView: .oneThird))), named: "ipad-9-7-33-split-portrait")453      assertSnapshot(matching: viewController, as: .image(on: .iPad9_7(.portrait(splitView: .twoThirds))), named: "ipad-9-7-66-split-portrait")454      assertSnapshot(matching: viewController, as: .image(on: .iPad10_2(.landscape(splitView: .oneThird))), named: "ipad-10-2-split-landscape")455      assertSnapshot(matching: viewController, as: .image(on: .iPad10_2(.landscape(splitView: .oneHalf))), named: "ipad-10-2-50-split-landscape")456      assertSnapshot(matching: viewController, as: .image(on: .iPad10_2(.landscape(splitView: .twoThirds))), named: "ipad-10-2-66-split-landscape")457      assertSnapshot(matching: viewController, as: .image(on: .iPad10_2(.portrait(splitView: .oneThird))), named: "ipad-10-2-33-split-portrait")458      assertSnapshot(matching: viewController, as: .image(on: .iPad10_2(.portrait(splitView: .twoThirds))), named: "ipad-10-2-66-split-portrait")459      460      assertSnapshot(matching: viewController, as: .image(on: .iPadPro10_5(.landscape(splitView: .oneThird))), named: "ipad-pro-10inch-33-split-landscape")461      assertSnapshot(matching: viewController, as: .image(on: .iPadPro10_5(.landscape(splitView: .oneHalf))), named: "ipad-pro-10inch-50-split-landscape")462      assertSnapshot(matching: viewController, as: .image(on: .iPadPro10_5(.landscape(splitView: .twoThirds))), named: "ipad-pro-10inch-66-split-landscape")463      assertSnapshot(matching: viewController, as: .image(on: .iPadPro10_5(.portrait(splitView: .oneThird))), named: "ipad-pro-10inch-33-split-portrait")464      assertSnapshot(matching: viewController, as: .image(on: .iPadPro10_5(.portrait(splitView: .twoThirds))), named: "ipad-pro-10inch-66-split-portrait")465      466      assertSnapshot(matching: viewController, as: .image(on: .iPadPro11(.landscape(splitView: .oneThird))), named: "ipad-pro-11inch-33-split-landscape")467      assertSnapshot(matching: viewController, as: .image(on: .iPadPro11(.landscape(splitView: .oneHalf))), named: "ipad-pro-11inch-50-split-landscape")468      assertSnapshot(matching: viewController, as: .image(on: .iPadPro11(.landscape(splitView: .twoThirds))), named: "ipad-pro-11inch-66-split-landscape")469      assertSnapshot(matching: viewController, as: .image(on: .iPadPro11(.portrait(splitView: .oneThird))), named: "ipad-pro-11inch-33-split-portrait")470      assertSnapshot(matching: viewController, as: .image(on: .iPadPro11(.portrait(splitView: .twoThirds))), named: "ipad-pro-11inch-66-split-portrait")471      472      assertSnapshot(matching: viewController, as: .image(on: .iPadPro12_9(.landscape(splitView: .oneThird))), named: "ipad-pro-12inch-33-split-landscape")473      assertSnapshot(matching: viewController, as: .image(on: .iPadPro12_9(.landscape(splitView: .oneHalf))), named: "ipad-pro-12inch-50-split-landscape")474      assertSnapshot(matching: viewController, as: .image(on: .iPadPro12_9(.landscape(splitView: .twoThirds))), named: "ipad-pro-12inch-66-split-landscape")475      assertSnapshot(matching: viewController, as: .image(on: .iPadPro12_9(.portrait(splitView: .oneThird))), named: "ipad-pro-12inch-33-split-portrait")476      assertSnapshot(matching: viewController, as: .image(on: .iPadPro12_9(.portrait(splitView: .twoThirds))), named: "ipad-pro-12inch-66-split-portrait")477      478      assertSnapshot(479        matching: viewController, as: .image(on: .iPhoneSe(.landscape)), named: "iphone-se-alternative")480      assertSnapshot(481        matching: viewController, as: .image(on: .iPhone8(.landscape)), named: "iphone-8-alternative")482      assertSnapshot(483        matching: viewController, as: .image(on: .iPhone8Plus(.landscape)), named: "iphone-8-plus-alternative")484      assertSnapshot(485        matching: viewController, as: .image(on: .iPhoneX(.landscape)), named: "iphone-x-alternative")486      assertSnapshot(487        matching: viewController, as: .image(on: .iPhoneXr(.landscape)), named: "iphone-xr-alternative")488      assertSnapshot(489        matching: viewController, as: .image(on: .iPhoneXsMax(.landscape)), named: "iphone-xs-max-alternative")490      assertSnapshot(491        matching: viewController, as: .image(on: .iPadMini(.portrait)), named: "ipad-mini-alternative")492      assertSnapshot(493        matching: viewController, as: .image(on: .iPad9_7(.portrait)), named: "ipad-9-7-alternative")494      assertSnapshot(495        matching: viewController, as: .image(on: .iPad10_2(.portrait)), named: "ipad-10-2-alternative")496      assertSnapshot(497        matching: viewController, as: .image(on: .iPadPro10_5(.portrait)), named: "ipad-pro-10-5-alternative")498      assertSnapshot(499        matching: viewController, as: .image(on: .iPadPro11(.portrait)), named: "ipad-pro-11-alternative")500      assertSnapshot(501        matching: viewController, as: .image(on: .iPadPro12_9(.portrait)), named: "ipad-pro-12-9-alternative")502      allContentSizes.forEach { name, contentSize in503          assertSnapshot(504            matching: viewController,505            as: .image(on: .iPhoneSe, traits: .init(preferredContentSizeCategory: contentSize)),506            named: "iphone-se-\(name)"507          )508      }509      #elseif os(tvOS)510      assertSnapshot(511        matching: viewController, as: .image(on: .tv), named: "tv")512      assertSnapshot(513        matching: viewController, as: .image(on: .tv4K), named: "tv4k")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.cgColor...

Full Screen

Full Screen

SnapshotKitTests.swift

Source:SnapshotKitTests.swift Github

copy

Full Screen

...348                layout.minimumLineSpacing = 20349                return layout350            }()351            lazy var collectionView = UICollectionView(frame: .zero, collectionViewLayout: flowLayout)352            override func viewDidLoad() {353                super.viewDidLoad()354                view.backgroundColor = .white355                view.addSubview(collectionView)356                collectionView.backgroundColor = .white357                collectionView.dataSource = self358                collectionView.delegate = self359                collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")360                collectionView.translatesAutoresizingMaskIntoConstraints = false361                NSLayoutConstraint.activate([362                    collectionView.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor),363                    collectionView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor),364                    collectionView.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor),365                    collectionView.bottomAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor)366                ])367                collectionView.reloadData()368            }369            override func viewDidLayoutSubviews() {370                super.viewDidLayoutSubviews()371                collectionView.collectionViewLayout.invalidateLayout()372            }373            override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {374                super.traitCollectionDidChange(previousTraitCollection)375                collectionView.collectionViewLayout.invalidateLayout()376            }377            func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {378                let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)379                cell.contentView.backgroundColor = .orange380                return cell381            }382            func collectionView(_: UICollectionView, numberOfItemsInSection _: Int) -> Int {383                20384            }385            func collectionView(386                _ collectionView: UICollectionView,387                layout _: UICollectionViewLayout,388                sizeForItemAt _: IndexPath389            ) -> CGSize {390                CGSize(391                    width: min(collectionView.frame.width - 50, 300),392                    height: collectionView.frame.height393                )394            }395        }396        let viewController = CollectionViewController()397        assertSnapshots(matching: viewController, as: [398            "ipad": .image(on: .iPadPro12_9),399            "iphoneSe": .image(on: .iPhoneSe),400            "iphone8": .image(on: .iPhone8),401            "iphoneMax": .image(on: .iPhoneXsMax)402        ])403    }404    func testUIView() {405        let view = UIView()406        view.frame = .init(origin: .zero, size: .init(width: 20, height: 20))407        view.backgroundColor = .cyan408        view.layer.cornerRadius = 10409        assertSnapshot(matching: view, as: .image)410        assertSnapshot(matching: view, as: .recursiveDescription)411    }412    func testUIViewController() {413        let view = UIView()414        view.backgroundColor = .cyan415        view.layer.cornerRadius = 10416        view.translatesAutoresizingMaskIntoConstraints = false417        let viewController = UIViewController()418        viewController.view.addSubview(view)419        NSLayoutConstraint.activate([420            view.topAnchor.constraint(equalTo: viewController.view.topAnchor),421            view.bottomAnchor.constraint(equalTo: viewController.view.bottomAnchor),422            view.leftAnchor.constraint(equalTo: viewController.view.leftAnchor),423            view.rightAnchor.constraint(equalTo: viewController.view.rightAnchor)424        ])425        assertSnapshot(matching: viewController, as: .image(size: .init(width: 100, height: 100)))426    }427    func testUIViewControllerLifeCycle() {428        class ViewController: UIViewController {429            let viewDidLoadExpectation: XCTestExpectation430            let viewWillAppearExpectation: XCTestExpectation431            let viewDidAppearExpectation: XCTestExpectation432            let viewWillDisappearExpectation: XCTestExpectation433            let viewDidDisappearExpectation: XCTestExpectation434            init(435                viewDidLoadExpectation: XCTestExpectation,436                viewWillAppearExpectation: XCTestExpectation,437                viewDidAppearExpectation: XCTestExpectation,438                viewWillDisappearExpectation: XCTestExpectation,439                viewDidDisappearExpectation: XCTestExpectation440            ) {441                self.viewDidLoadExpectation = viewDidLoadExpectation442                self.viewWillAppearExpectation = viewWillAppearExpectation443                self.viewDidAppearExpectation = viewDidAppearExpectation444                self.viewWillDisappearExpectation = viewWillDisappearExpectation445                self.viewDidDisappearExpectation = viewDidDisappearExpectation446                super.init(nibName: nil, bundle: nil)447            }448            @available(*, unavailable)449            required init?(coder _: NSCoder) {450                fatalError("init(coder:) has not been implemented")451            }452            override func viewDidLoad() {453                super.viewDidLoad()454                viewDidLoadExpectation.fulfill()455            }456            override func viewWillAppear(_ animated: Bool) {457                super.viewWillAppear(animated)458                viewWillAppearExpectation.fulfill()459            }460            override func viewDidAppear(_ animated: Bool) {461                super.viewDidAppear(animated)462                viewDidAppearExpectation.fulfill()463            }464            override func viewWillDisappear(_ animated: Bool) {465                super.viewWillDisappear(animated)466                viewWillDisappearExpectation.fulfill()467            }468            override func viewDidDisappear(_ animated: Bool) {469                super.viewDidDisappear(animated)470                viewDidDisappearExpectation.fulfill()471            }472        }473        let viewDidLoadExpectation = expectation(description: "viewDidLoad")474        let viewWillAppearExpectation = expectation(description: "viewWillAppear")475        let viewDidAppearExpectation = expectation(description: "viewDidAppear")476        let viewWillDisappearExpectation = expectation(description: "viewWillDisappear")477        let viewDidDisappearExpectation = expectation(description: "viewDidDisappear")478        viewWillAppearExpectation.expectedFulfillmentCount = 2479        viewDidAppearExpectation.expectedFulfillmentCount = 2480        viewWillDisappearExpectation.expectedFulfillmentCount = 2481        viewDidDisappearExpectation.expectedFulfillmentCount = 2482        let viewController = ViewController(483            viewDidLoadExpectation: viewDidLoadExpectation,484            viewWillAppearExpectation: viewWillAppearExpectation,485            viewDidAppearExpectation: viewDidAppearExpectation,486            viewWillDisappearExpectation: viewWillDisappearExpectation,487            viewDidDisappearExpectation: viewDidDisappearExpectation488        )489        assertSnapshot(matching: viewController, as: .image)490        assertSnapshot(matching: viewController, as: .image)491        wait(492            for: [493                viewDidLoadExpectation,494                viewWillAppearExpectation,495                viewDidAppearExpectation,496                viewWillDisappearExpectation,497                viewDidDisappearExpectation498            ],499            timeout: 1,500            enforceOrder: true501        )502    }503    func testCALayer() {504        let layer = CALayer()505        layer.frame = CGRect(x: 0, y: 0, width: 100, height: 100)506        layer.backgroundColor = UIColor.red.cgColor507        layer.borderWidth = 4.0508        layer.borderColor = UIColor.black.cgColor509        assertSnapshot(matching: layer, as: .image)510    }511    func testCALayerWithGradient() {512        let baseLayer = CALayer()513        baseLayer.frame = CGRect(x: 0, y: 0, width: 100, height: 100)514        let gradientLayer = CAGradientLayer()515        gradientLayer.colors = [UIColor.red.cgColor, UIColor.yellow.cgColor]516        gradientLayer.frame = baseLayer.frame517        baseLayer.addSublayer(gradientLayer)518        assertSnapshot(matching: baseLayer, as: .image(subpixelThreshold: 1))519    }520    func testViewControllerHierarchy() {521        let page = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal)522        page.setViewControllers([UIViewController()], direction: .forward, animated: false)523        let tab = UITabBarController()524        tab.viewControllers = [525            UINavigationController(rootViewController: page),526            UINavigationController(rootViewController: UIViewController()),527            UINavigationController(rootViewController: UIViewController()),528            UINavigationController(rootViewController: UIViewController()),529            UINavigationController(rootViewController: UIViewController())530        ]531        assertSnapshot(matching: tab, as: .hierarchy)532    }533    #endif534    #if os(iOS) || os(tvOS)535    func testUIBezierPath() {536        let path = UIBezierPath.heart537        let osName: String538        #if os(iOS)539        osName = "iOS"540        #elseif os(tvOS)541        osName = "tvOS"542        #endif543        assertSnapshot(matching: path, as: .image, named: osName)544        assertSnapshot(matching: path, as: .elementsDescription, named: osName)545    }546    #endif547    func testURLRequest() {548        var get = URLRequest(url: URL(string: "https://www.pointfree.co/")!)549        get.addValue("pf_session={}", forHTTPHeaderField: "Cookie")550        get.addValue("text/html", forHTTPHeaderField: "Accept")551        get.addValue("application/json", forHTTPHeaderField: "Content-Type")552        assertSnapshot(matching: get, as: .raw, named: "get")553        assertSnapshot(matching: get, as: .curl, named: "get-curl")554        var getWithQuery = URLRequest(url: URL(string: "https://www.pointfree.co?key_2=value_2&key_1=value_1&key_3=value_3")!)555        getWithQuery.addValue("pf_session={}", forHTTPHeaderField: "Cookie")556        getWithQuery.addValue("text/html", forHTTPHeaderField: "Accept")557        getWithQuery.addValue("application/json", forHTTPHeaderField: "Content-Type")558        assertSnapshot(matching: getWithQuery, as: .raw, named: "get-with-query")559        assertSnapshot(matching: getWithQuery, as: .curl, named: "get-with-query-curl")560        var post = URLRequest(url: URL(string: "https://www.pointfree.co/subscribe")!)561        post.httpMethod = "POST"562        post.addValue("pf_session={\"user_id\":\"0\"}", forHTTPHeaderField: "Cookie")563        post.addValue("text/html", forHTTPHeaderField: "Accept")564        post.httpBody = Data("pricing[billing]=monthly&pricing[lane]=individual".utf8)565        assertSnapshot(matching: post, as: .raw, named: "post")566        assertSnapshot(matching: post, as: .curl, named: "post-curl")567        var postWithJSON = URLRequest(url: URL(string: "http://dummy.restapiexample.com/api/v1/create")!)568        postWithJSON.httpMethod = "POST"569        postWithJSON.addValue("application/json", forHTTPHeaderField: "Content-Type")570        postWithJSON.addValue("application/json", forHTTPHeaderField: "Accept")571        postWithJSON.httpBody = Data("{\"name\":\"tammy134235345235\", \"salary\":0, \"age\":\"tammy133\"}".utf8)572        assertSnapshot(matching: postWithJSON, as: .raw, named: "post-with-json")573        assertSnapshot(matching: postWithJSON, as: .curl, named: "post-with-json-curl")574        var head = URLRequest(url: URL(string: "https://www.pointfree.co/")!)575        head.httpMethod = "HEAD"576        head.addValue("pf_session={}", forHTTPHeaderField: "Cookie")577        assertSnapshot(matching: head, as: .raw, named: "head")578        assertSnapshot(matching: head, as: .curl, named: "head-curl")579        post = URLRequest(url: URL(string: "https://www.pointfree.co/subscribe")!)580        post.httpMethod = "POST"581        post.addValue("pf_session={\"user_id\":\"0\"}", forHTTPHeaderField: "Cookie")582        post.addValue("application/json", forHTTPHeaderField: "Accept")583        post.httpBody = Data("""584        {"pricing": {"lane": "individual","billing": "monthly"}}585        """.utf8)586        _assertInlineSnapshot(matching: post, as: .raw(pretty: true), with: """587        POST https://www.pointfree.co/subscribe588        Accept: application/json589        Cookie: pf_session={"user_id":"0"}590        {591          "pricing" : {592            "billing" : "monthly",593            "lane" : "individual"594          }595        }596        """)597    }598    #if os(iOS) || os(macOS)599    func testWebView() throws {600        let fixtureUrl = URL(fileURLWithPath: String(#file), isDirectory: false)601            .deletingLastPathComponent()602            .appendingPathComponent("__Fixtures__/pointfree.html")603        let html = try String(contentsOf: fixtureUrl)604        let webView = WKWebView()605        webView.loadHTMLString(html, baseURL: nil)606        assertSnapshot(607            matching: webView,608            as: .image(precision: 0.9, size: .init(width: 800, height: 600)),609            named: platform610        )611    }612    #endif613    #if os(iOS) || os(tvOS)614    func testViewWithZeroHeightOrWidth() {615        var rect = CGRect(x: 0, y: 0, width: 350, height: 0)616        var view = UIView(frame: rect)617        view.backgroundColor = .red618        assertSnapshot(matching: view, as: .image, named: "noHeight")619        rect = CGRect(x: 0, y: 0, width: 0, height: 350)620        view = UIView(frame: rect)621        view.backgroundColor = .green622        assertSnapshot(matching: view, as: .image, named: "noWidth")623        rect = CGRect(x: 0, y: 0, width: 0, height: 0)624        view = UIView(frame: rect)625        view.backgroundColor = .blue626        assertSnapshot(matching: view, as: .image, named: "noWidth.noHeight")627    }628    #endif629    #if os(iOS)630    func testEmbeddedWebView() throws {631        let label = UILabel()632        label.text = "Hello, Blob!"633        let fixtureUrl = URL(fileURLWithPath: String(#file), isDirectory: false)634            .deletingLastPathComponent()635            .appendingPathComponent("__Fixtures__/pointfree.html")636        let html = try String(contentsOf: fixtureUrl)637        let webView = WKWebView()638        webView.loadHTMLString(html, baseURL: nil)639        webView.isHidden = true640        let stackView = UIStackView(arrangedSubviews: [label, webView])641        stackView.axis = .vertical642        assertSnapshot(643            matching: stackView,644            as: .image(size: .init(width: 800, height: 600)),645            named: platform646        )647    }648    #endif649    #if os(iOS) || os(macOS)650    final class ManipulatingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {651        func webView(_ webView: WKWebView, didFinish _: WKNavigation!) {652            webView.evaluateJavaScript("document.body.children[0].classList.remove(\"hero\")") // Change layout653        }654    }655    func testWebViewWithManipulatingNavigationDelegate() throws {656        let manipulatingWKWebViewNavigationDelegate = ManipulatingWKWebViewNavigationDelegate()657        let webView = WKWebView()658        webView.navigationDelegate = manipulatingWKWebViewNavigationDelegate659        let fixtureUrl = URL(fileURLWithPath: String(#file), isDirectory: false)660            .deletingLastPathComponent()661            .appendingPathComponent("__Fixtures__/pointfree.html")662        let html = try String(contentsOf: fixtureUrl)663        webView.loadHTMLString(html, baseURL: nil)664        assertSnapshot(665            matching: webView,666            as: .image(precision: 0.9, size: .init(width: 800, height: 600)),667            named: platform668        )669        _ = manipulatingWKWebViewNavigationDelegate670    }671    final class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {672        func webView(673            _: WKWebView,674            decidePolicyFor _: WKNavigationAction,675            decisionHandler: @escaping (WKNavigationActionPolicy) -> Void676        ) {677            decisionHandler(.cancel)678        }679    }680    func testWebViewWithCancellingNavigationDelegate() throws {681        let cancellingWKWebViewNavigationDelegate = CancellingWKWebViewNavigationDelegate()682        let webView = WKWebView()683        webView.navigationDelegate = cancellingWKWebViewNavigationDelegate684        let fixtureUrl = URL(fileURLWithPath: String(#file), isDirectory: false)685            .deletingLastPathComponent()686            .appendingPathComponent("__Fixtures__/pointfree.html")687        let html = try String(contentsOf: fixtureUrl)688        webView.loadHTMLString(html, baseURL: nil)689        assertSnapshot(690            matching: webView,691            as: .image(size: .init(width: 800, height: 600)),692            named: platform693        )694        _ = cancellingWKWebViewNavigationDelegate695    }696    #endif697    #if os(iOS)698    @available(iOS 13.0, *)699    func testSwiftUIView_iOS() {700        let view = TestView().environment(\.colorScheme, .light)701        let precision: Float = 0.99702        assertSnapshot(matching: view, as: .image(precision: precision, traits: .init(userInterfaceStyle: .light)))703        assertSnapshot(matching: view, as: .image(precision: precision, layout: .sizeThatFits, traits: .init(userInterfaceStyle: .light)), named: "size-that-fits")704        assertSnapshot(matching: view, as: .image(precision: precision, layout: .fixed(width: 200, height: 100), traits: .init(userInterfaceStyle: .light)), named: "fixed")705        assertSnapshot(matching: view, as: .image(precision: precision, layout: .device(config: .iPhoneSe), traits: .init(userInterfaceStyle: .light)), named: "device")706    }707    #endif708    #if os(macOS)709    @available(macOS 11.0, *)710    func testSwiftUIView_macOS() {711        let view = TestView().environment(\.colorScheme, .light)712        assertSnapshot(matching: view, as: .image(size: .init(width: 100, height: 50), precision: 0.98))713    }714    #endif715    #if os(tvOS)716    @available(tvOS 13.0, *)717    func testSwiftUIView_tvOS() {718        let view = TestView().environment(\.colorScheme, .light)719        let precision: Float = 0.98720        assertSnapshot(matching: view, as: .image(precision: precision))721        assertSnapshot(matching: view, as: .image(precision: precision, layout: .sizeThatFits), named: "size-that-fits")722        assertSnapshot(matching: view, as: .image(precision: precision, layout: .fixed(width: 300, height: 100)), named: "fixed")723        assertSnapshot(matching: view, as: .image(precision: precision, layout: .device(config: .tv)), named: "device")724    }725    #endif726}727#if os(iOS) || os(tvOS)728class TestViewController: UIViewController {729    override func viewDidLoad() {730        super.viewDidLoad()731        let topView = UIView()732        let leadingView = UIView()733        let trailingView = UIView()734        let bottomView = UIView()735        navigationItem.leftBarButtonItem = .init(barButtonSystemItem: .add, target: nil, action: nil)736        view.backgroundColor = .white737        topView.backgroundColor = .blue738        leadingView.backgroundColor = .green739        trailingView.backgroundColor = .red740        bottomView.backgroundColor = .magenta741        topView.translatesAutoresizingMaskIntoConstraints = false742        leadingView.translatesAutoresizingMaskIntoConstraints = false743        trailingView.translatesAutoresizingMaskIntoConstraints = false744        bottomView.translatesAutoresizingMaskIntoConstraints = false...

Full Screen

Full Screen

viewDidLoad

Using AI Code Generation

copy

Full Screen

1override func viewDidLoad() {2    super.viewDidLoad()3    let myRequest = URLRequest(url: myURL!)4    webView.load(myRequest)5    webView.navigationDelegate = CancellingWKWebViewNavigationDelegate()6}7class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {8    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {9        print("didStartProvisionalNavigation")10        webView.stopLoading()11    }12}13class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {14    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {15        print("didFailProvisionalNavigation")16        webView.stopLoading()17    }18}19class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {20    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {21        print("didFail")22        webView.stopLoading()23    }24}25class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {26    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {27        print("didFail")28        webView.stopLoading()29    }30}31class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {32    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {33        print("didFail")34        webView.stopLoading()35    }36}

Full Screen

Full Screen

viewDidLoad

Using AI Code Generation

copy

Full Screen

1override func viewDidLoad() {2    super.viewDidLoad()3    let webView = WKWebView(frame: view.bounds)4    webView.navigationDelegate = CancellingWKWebViewNavigationDelegate()5    view.addSubview(webView)6}7class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {8    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {9        decisionHandler(.cancel)10    }11}12override func viewDidLoad() {13    super.viewDidLoad()14    let webView = WKWebView(frame: view.bounds)15    webView.navigationDelegate = CancellingWKWebViewNavigationDelegate()16    view.addSubview(webView)17}18class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {19    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {20        decisionHandler(.cancel)21    }22}23override func viewDidLoad() {24    super.viewDidLoad()25    let webView = WKWebView(frame: view.bounds)26    webView.navigationDelegate = CancellingWKWebViewNavigationDelegate()27    view.addSubview(webView)28}29class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {30    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {31        decisionHandler(.cancel)32    }33}

Full Screen

Full Screen

viewDidLoad

Using AI Code Generation

copy

Full Screen

1import UIKit2import WebKit3class ViewController: UIViewController {4    override func viewDidLoad() {5        super.viewDidLoad()6        let request = URLRequest(url: url)7        webView.load(request)8    }9}10import UIKit11import WebKit12class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {13    var completion: (() -> Void)?14    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {15        if let completion = completion {16            completion()17        }18    }19}20import UIKit21import WebKit22class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {23    var completion: (() -> Void)?24    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {25        if let completion = completion {26            completion()27        }28    }29}30import UIKit31import WebKit32class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {33    var completion: (() -> Void)?34    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {35        if let completion = completion {36            completion()37        }38    }39}40import UIKit41import WebKit42class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {43    var completion: (() -> Void)?44    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {45        if let completion = completion {46            completion()47        }48    }49}50import UIKit51import WebKit52class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {53    var completion: (() -> Void)?54    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {55        if let completion = completion {56            completion()57        }58    }59}

Full Screen

Full Screen

viewDidLoad

Using AI Code Generation

copy

Full Screen

1import UIKit2import WebKit3class ViewController: UIViewController {4    override func viewDidLoad() {5        super.viewDidLoad()6        cancellingWKWebViewNavigationDelegate = CancellingWKWebViewNavigationDelegate(webView: webView)7        webView.load(URLRequest(url: url))8    }9}10import UIKit11import WebKit12class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {13    init(webView: WKWebView) {14        super.init()15    }16    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {17        delegate?.webViewDidStartNavigation(webView)18    }19    func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {20        delegate?.webViewDidCommitNavigation(webView)21    }22    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {23        delegate?.webViewDidFinishNavigation(webView)24    }25    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {26        delegate?.webViewDidFailNavigation(webView, withError: error)27    }28    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {29        delegate?.webViewDidFailProvisionalNavigation(webView, withError: error)30    }31    func webViewWebContentProcessDidTerminate(_ webView: WKWebView) {32        delegate?.webViewWebContentProcessDidTerminate(webView)33    }34    func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {35        delegate?.webViewDidReceiveServerRedirectForProvisionalNavigation(webView)36    }37    func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {38        delegate?.webView(webView

Full Screen

Full Screen

viewDidLoad

Using AI Code Generation

copy

Full Screen

1import UIKit2import WebKit3class ViewController: UIViewController {4    override func viewDidLoad() {5        super.viewDidLoad()6        let request = URLRequest(url: url!)7        webView.load(request)8        webView.navigationDelegate = CancellingWKWebViewNavigationDelegate()9    }10}11import UIKit12import WebKit13class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {14    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {15        print("Started Provisional Navigation")16    }17    func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {18        print("Received Server Redirect For Provisional Navigation")19    }20    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {21        print("Failed Provisional Navigation")22    }23    func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {24        print("Committed Navigation")25    }26    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {27        print("Finished Navigation")28    }29    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {30        print("Failed Navigation")31    }32}33import UIKit34import WebKit35class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {36    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {37        print("Started Provisional Navigation")38    }39    func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {40        print("Received Server Redirect For Provisional Navigation")41    }42    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {43        print("Failed Provisional Navigation")44    }45    func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {46        print("Committed Navigation")47    }48    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {49        print("

Full Screen

Full Screen

viewDidLoad

Using AI Code Generation

copy

Full Screen

1override func viewDidLoad() {2    super.viewDidLoad()3    let webView = WKWebView(frame: view.bounds)4    webView.navigationDelegate = CancellingWKWebViewNavigationDelegate()5    view.addSubview(webView)6}7override func viewDidLoad() {8    super.viewDidLoad()9    let webView = WKWebView(frame: view.bounds)10    webView.navigationDelegate = CancellingWKWebViewNavigationDelegate()11    view.addSubview(webView)12}13override func viewDidLoad() {14    super.viewDidLoad()15    let webView = WKWebView(frame: view.bounds)16    webView.navigationDelegate = CancellingWKWebViewNavigationDelegate()17    view.addSubview(webView)18}19override func viewDidLoad() {20    super.viewDidLoad()21    let webView = WKWebView(frame: view.bounds)22    webView.navigationDelegate = CancellingWKWebViewNavigationDelegate()23    view.addSubview(webView)24}25override func viewDidLoad() {26    super.viewDidLoad()27    let webView = WKWebView(frame: view.bounds)28    webView.navigationDelegate = CancellingWKWebViewNavigationDelegate()29    view.addSubview(webView)30}31override func viewDidLoad() {32    super.viewDidLoad()33    let webView = WKWebView(frame: view.bounds)34    webView.navigationDelegate = CancellingWKWebViewNavigationDelegate()

Full Screen

Full Screen

viewDidLoad

Using AI Code Generation

copy

Full Screen

1class ViewController: UIViewController, CancellingWKWebViewNavigationDelegate {2    override func viewDidLoad() {3        super.viewDidLoad()4        cancellingWKWebViewNavigationDelegate = CancellingWKWebViewNavigationDelegate()5    }6}7class CancellingWKWebViewNavigationDelegate: NSObject, WKNavigationDelegate {8    override init() {9        super.init()10        webView = WKWebView()11    }12    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {13        print("didStartProvisionalNavigation")14    }15    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {16        print("didFail")17    }18    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {19        print("didFailProvisionalNavigation")20    }21    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {22        print("didFinish")23    }24    func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {25        print("didCommit")26    }27    func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {28        print("didReceiveServerRedirectForProvisionalNavigation")29    }30    func webViewWebContentProcessDidTerminate(_ webView: WKWebView) {31        print("webViewWebContentProcessDidTerminate")32    }33    func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {34        print("didReceive")35    }36}

Full Screen

Full Screen

viewDidLoad

Using AI Code Generation

copy

Full Screen

1override func viewDidLoad() {2    super.viewDidLoad()3    let request = URLRequest(url: url!)4    webView.load(request)5}6func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {7    print("Started")8}9func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {10    print("Committed")11}12func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {13    print("Finished")14}15func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {16    print("Failed")17}18func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {19    print("Failed Provisional")20}21func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {22    decisionHandler(.cancel)23}24func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {25    decisionHandler(.cancel)26}27func webViewWebContentProcessDidTerminate(_ webView: WKWebView) {28    print("Terminated")29}30func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {31    print("Received Server Redirect")32}33func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {34    print("Received Authentication Challenge")35    completionHandler(.performDefaultHandling, nil)36}37func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {38    print("Received Authentication Challenge")39    completionHandler(.performDefaultHandling, nil)40}41func webView(_ webView: WKWebView, didReceive

Full Screen

Full Screen

viewDidLoad

Using AI Code Generation

copy

Full Screen

1override func viewDidLoad() {2    super.viewDidLoad()3    let webView = WKWebView(frame: view.frame)4    webView.navigationDelegate = CancellingWKWebViewNavigationDelegate()5    webView.load(URLRequest(url: url))6    view.addSubview(webView)7}8extension CancellingWKWebViewNavigationDelegate: WKNavigationDelegate {9    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {10        decisionHandler(.cancel)11    }12}13extension CancellingWKWebViewNavigationDelegate: WKNavigationDelegate {14    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {15        print(error)16    }17}18extension CancellingWKWebViewNavigationDelegate: WKNavigationDelegate {19    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {20        print(error)21    }22}23extension CancellingWKWebViewNavigationDelegate: WKNavigationDelegate {24    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {25        print("didStartProvisionalNavigation")26    }27}28extension CancellingWKWebViewNavigationDelegate: WKNavigationDelegate {29    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {30        print("didFinish")31    }32}33extension CancellingWKWebViewNavigationDelegate: WKNavigationDelegate {34    func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {35        print("didCommit")36    }37}38extension CancellingWKWebViewNavigationDelegate: WKNavigationDelegate {39    func webView(_ webView

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