RIBsTests/MultiStageComponentizedBuilderTests.swift (56 lines of code) (raw):
//
// Copyright (c) 2017. Uber Technologies
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
@testable import RIBs
import XCTest
import CwlPreconditionTesting
class MultiStageComponentizedBuilderTests: XCTestCase {
private var builder: MockMultiStageComponentizedBuilder!
override func setUp() {
super.setUp()
builder = MockMultiStageComponentizedBuilder {
return MockComponent()
}
}
func test_componentForCurrentPass_samePass_verifySameInstance() {
var instance = builder.componentForCurrentBuildPass
for _ in 0 ..< 100 {
XCTAssertTrue(instance === builder.componentForCurrentBuildPass)
instance = builder.componentForCurrentBuildPass
}
}
func test_componentForCurrentPass_multiplePasses_verifyDifferentInstances() {
builder.finalStageBuildHandler = { component, dynamicDep in
XCTAssertEqual(dynamicDep, 92393)
return MockSimpleRouter()
}
let firstPassInstance = builder.componentForCurrentBuildPass
_ = builder.finalStageBuild(withDynamicDependency: 92393)
let secondPassInstance = builder.componentForCurrentBuildPass
XCTAssertFalse(firstPassInstance === secondPassInstance)
}
func test_componentForCurrentPass_builderReturnsSameInstance_verifyAssertion() {
let component = MockComponent()
let sameInstanceBuilder = MockMultiStageComponentizedBuilder {
return component
}
sameInstanceBuilder.finalStageBuildHandler = { component, dynamicDep in
XCTAssertEqual(dynamicDep, 92393)
return MockSimpleRouter()
}
_ = sameInstanceBuilder.finalStageBuild(withDynamicDependency: 92393)
let finalStageBuildFatalErrorException = catchBadInstruction {
_ = sameInstanceBuilder.finalStageBuild(withDynamicDependency: 92393)
}
XCTAssertNotNil(finalStageBuildFatalErrorException, "fatalError expected")
let componentForCurrentBuildPassAssertionFailureException = catchBadInstruction {
_ = sameInstanceBuilder.componentForCurrentBuildPass
}
XCTAssertNotNil(componentForCurrentBuildPassAssertionFailureException, "Assertion failure expected")
}
}
private class MockComponent {}
private class MockSimpleRouter {}
private class MockMultiStageComponentizedBuilder: MultiStageComponentizedBuilder<MockComponent, MockSimpleRouter, Int> {
fileprivate var finalStageBuildHandler: ((MockComponent, Int) -> MockSimpleRouter)?
override func finalStageBuild(with component: MockComponent, _ dynamicDependency: Int) -> MockSimpleRouter {
return finalStageBuildHandler!(component, dynamicDependency)
}
}