Files
SwiftFormat/Snapshots/Layout/LayoutTests/Loading/LayoutViewControllerTests.swift
2025-10-04 08:46:46 +01:00

62 lines
2.2 KiB
Swift
Executable File

// Copyright © 2017 Schibsted. All rights reserved.
import XCTest
@testable import Layout
private func url(forXml name: String) throws -> URL {
guard let url = Bundle(for: LayoutViewControllerTests.self)
.url(forResource: name, withExtension: "xml")
else {
throw NSError(domain: "Could not locate: \(name).xml", code: 0)
}
return url
}
final class LayoutViewControllerTests: XCTestCase {
/// Test class which overrides layoutDidLoad(_:)
private final class TestLayoutViewController: UIViewController, LayoutLoading {
var layoutDidLoadLayoutNode: LayoutNode?
var layoutDidLoadLayoutNodeCallCount = 0
func layoutDidLoad(_ layoutNode: LayoutNode) {
layoutDidLoadLayoutNodeCallCount += 1
layoutDidLoadLayoutNode = layoutNode
}
}
func testLayoutDidLoadWithValidXML() throws {
let viewController = TestLayoutViewController()
try viewController.loadLayout(withContentsOfURL: url(forXml: "LayoutDidLoad_Valid"))
XCTAssertNotNil(viewController.layoutDidLoadLayoutNode)
XCTAssertEqual(viewController.layoutNode, viewController.layoutDidLoadLayoutNode)
XCTAssertEqual(viewController.layoutDidLoadLayoutNodeCallCount, 1)
}
func testLayoutDidLoadWithInvalidXML() throws {
let viewController = TestLayoutViewController()
try viewController.loadLayout(withContentsOfURL: url(forXml: "LayoutDidLoad_Invalid"))
XCTAssertNil(viewController.layoutDidLoadLayoutNode)
XCTAssertEqual(viewController.layoutDidLoadLayoutNodeCallCount, 0)
}
func testLoadedLayoutDoesNotRetainItself() throws {
weak var controller: TestLayoutViewController?
weak var view: UIView?
weak var node: LayoutNode?
try autoreleasepool {
let vc = TestLayoutViewController()
try vc.loadLayout(withContentsOfURL: url(forXml: "LayoutDidLoad_Valid"))
node = vc.layoutNode
XCTAssertNotNil(node)
view = node?.view
XCTAssertNotNil(view)
controller = vc
}
XCTAssertNil(controller)
XCTAssertNil(view)
XCTAssertNil(node)
}
}