RIBsTests/Router/ViewableRouterTests.swift (34 lines of code) (raw):
//
// ViewableRouterTests.swift
// RIBs
//
// Created by Alex Bush on 7/26/25.
//
import RxSwift
import XCTest
@testable import RIBs
import CwlPreconditionTesting
final class ViewControllerMock: ViewControllable {
var uiviewController: UIViewController {
return UIViewController()
}
}
final class ViewableRouterTests: XCTestCase {
private var router: ViewableRouter<PresentableInteractor<PresenterMock>, ViewControllerMock>!
private var leakDetectorMock: LeakDetectorMock = LeakDetectorMock()
override func setUp() {
super.setUp()
leakDetectorMock = LeakDetectorMock()
LeakDetector.setInstance(leakDetectorMock)
}
func test_leakDetection() {
// given
let interactor = PresentableInteractor(presenter: PresenterMock())
let viewController = ViewControllerMock()
router = ViewableRouter(interactor: interactor, viewController: viewController)
router.load()
// when
interactor.deactivate()
// then
XCTAssertEqual(leakDetectorMock.expectViewControllerDisappearCallCount, 1)
}
func test_deinit_triggers_leakDetection() {
// given
let interactor = PresentableInteractor(presenter: PresenterMock())
let viewController = ViewControllerMock()
router = ViewableRouter(interactor: interactor, viewController: viewController)
router.load()
// when
router = nil
// then
XCTAssertEqual(leakDetectorMock.expectDeallocateCallCount, 2)
}
}