forked from ra1028/Carbon
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAnyComponentTests.swift
135 lines (104 loc) · 4.57 KB
/
AnyComponentTests.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import XCTest
@testable import Carbon
final class AnyComponentTests: XCTestCase {
func testBase() {
let component = A.Component()
let anyComponent = AnyComponent(component)
XCTAssertEqual(component, anyComponent.as(A.Component.self))
}
func testRedundantWrapping() {
let component = A.Component()
let anyComponent1 = AnyComponent(component)
let anyComponent2 = AnyComponent(anyComponent1)
XCTAssertEqual(anyComponent1.as(A.Component.self), component)
XCTAssertEqual(anyComponent2.as(A.Component.self), component)
XCTAssertEqual(anyComponent1.as(A.Component.self), anyComponent2.as(A.Component.self))
}
func testReuseIdentifier() {
let component = A.Component()
let anyComponent = AnyComponent(component)
XCTAssertEqual(component.reuseIdentifier, anyComponent.reuseIdentifier)
}
func testRenderContent() {
let component = A.Component()
let anyComponent = AnyComponent(component)
let anyContent = anyComponent.renderContent()
XCTAssertTrue(anyContent is A.Component.Content)
}
func testRenderInContent() {
let component = MockComponent()
let anyComponent = AnyComponent(component)
let anyContent = anyComponent.renderContent()
anyComponent.render(in: anyContent)
let expectedContent = anyContent as? MockComponent.Content
XCTAssertEqual(component.contentCapturedOnRender, expectedContent)
}
func testReferenceSize() {
let expectedSize = CGSize(width: 100, height: 200)
let component = MockComponent(referenceSize: expectedSize)
let anyComponent = AnyComponent(component)
XCTAssertEqual(component.referenceSize(in: .zero), anyComponent.referenceSize(in: .zero))
XCTAssertEqual(anyComponent.referenceSize(in: .zero), expectedSize)
}
func testLayout() {
let component = A.Component()
let anyComponent = AnyComponent(component)
let anyContent = anyComponent.renderContent()
let frame = CGRect(x: 0, y: 0, width: 200, height: 300)
let container = UIView(frame: frame)
anyComponent.layout(content: anyContent, in: container)
container.layoutIfNeeded()
XCTAssertEqual((anyContent as? MockComponent.Content)?.frame, frame)
}
func testIntrinsicContentSizeForView() {
struct TestComponent: Component {
func renderContent() -> UILabel {
return UILabel()
}
func render(in content: UILabel) {
content.text = "Test"
}
}
let component = TestComponent()
let content = component.renderContent()
let anyComponent = AnyComponent(component)
let anyContent = anyComponent.renderContent()
component.render(in: content)
anyComponent.render(in: anyContent)
XCTAssertEqual(
component.intrinsicContentSize(for: content),
anyComponent.intrinsicContentSize(for: anyContent)
)
}
func testShouldContentUpdate() {
let component1 = MockComponent(shouldContentUpdate: true)
let component2 = MockComponent(shouldContentUpdate: false)
let anyComponent1 = AnyComponent(component1)
let anyComponent2 = AnyComponent(component2)
XCTAssertEqual(anyComponent1.shouldContentUpdate(with: anyComponent1), true)
XCTAssertEqual(anyComponent2.shouldContentUpdate(with: anyComponent2), false)
}
func testShouldRender() {
let component1 = MockComponent(shouldRender: true)
let component2 = MockComponent(shouldRender: false)
let anyComponent1 = AnyComponent(component1)
let anyComponent2 = AnyComponent(component2)
let dummyContent = component1.renderContent()
XCTAssertEqual(anyComponent1.shouldRender(next: anyComponent1, in: dummyContent), true)
XCTAssertEqual(anyComponent2.shouldRender(next: anyComponent2, in: dummyContent), false)
}
func testContentWillDisplay() {
let component = MockComponent()
let content = component.renderContent()
let anyComponent = AnyComponent(component)
anyComponent.contentWillDisplay(content)
XCTAssertEqual(component.contentCapturedOnWillDisplay, content)
}
func testContentDidEndDisplay() {
let component = MockComponent()
let content = component.renderContent()
let anyComponent = AnyComponent(component)
anyComponent.contentDidEndDisplay(content)
XCTAssertEqual(component.contentCapturedOnDidEndDisplay, content)
}
}