Skip to content

Commit 013d12e

Browse files
authored
Update DisplayListPrinter to add Color and Effect support (#574)
1 parent 81f1787 commit 013d12e

File tree

4 files changed

+166
-84
lines changed

4 files changed

+166
-84
lines changed

Sources/OpenSwiftUICore/Render/DisplayList/DisplayListPrinter.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,20 @@ extension DisplayList.Item {
3232
switch content.value {
3333
case let .placeholder(id: identity):
3434
printer.print("(placeholder \(identity))")
35+
case let .color(resolved):
36+
// FIXME
37+
printer.print("(color \(resolved))")
3538
default:
3639
// TOOD
3740
break
3841
}
42+
case let .effect(effect, displayList):
43+
// FIXME
44+
printer.push("effect")
45+
for item in displayList.items {
46+
item.print(into: &printer)
47+
}
48+
printer.pop()
3949
default:
4050
// TODO
4151
break
@@ -52,10 +62,20 @@ extension DisplayList.Item {
5262
switch content.value {
5363
case let .placeholder(id: identity):
5464
printer.print("@\(identity))")
65+
case let .color(resolved):
66+
// FIXME
67+
printer.print("(c \(resolved))")
5568
default:
5669
// TOOD
5770
break
5871
}
72+
case let .effect(effect, displayList):
73+
// FIXME
74+
printer.push("E")
75+
for item in displayList.items {
76+
item.printMinimally(into: &printer)
77+
}
78+
printer.pop()
5979
default:
6080
// TODO
6181
break

Tests/OpenSwiftUICoreTests/Render/DisplayList/DisplayList+StringTests.swift

Lines changed: 0 additions & 65 deletions
This file was deleted.
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
//
2+
// DisplayListPrinterTests.swift
3+
// OpenSwiftUICoreTests
4+
5+
import OpenSwiftUICore
6+
import Testing
7+
8+
struct DisplayListPrinterTests {
9+
@Test
10+
func plain() {
11+
let emptyList = DisplayList()
12+
#expect(emptyList.description == "(display-list)")
13+
#expect(emptyList.minimalDescription == "(DL)")
14+
}
15+
16+
@Test
17+
func emptyItem() {
18+
let item = DisplayList.Item(
19+
.empty,
20+
frame: .zero,
21+
identity: .init(decodedValue: 1),
22+
version: .init(decodedValue: 0)
23+
)
24+
let d = item.description
25+
print(d)
26+
27+
#expect(item.description == """
28+
(display-list-item
29+
(item #:identity 1 #:version 0
30+
(frame (0.0 0.0; 0.0 0.0))))
31+
""")
32+
33+
let list = DisplayList(item)
34+
#expect(list.description == "(display-list)")
35+
#expect(list.minimalDescription == "(DL)")
36+
37+
let list2 = DisplayList([item])
38+
#expect(list2.description == """
39+
(display-list
40+
(item #:identity 1 #:version 0
41+
(frame (0.0 0.0; 0.0 0.0))))
42+
""")
43+
#expect(list2.minimalDescription == "(DL(I:1))")
44+
}
45+
46+
func placeholderItem() {
47+
let item = DisplayList.Item(
48+
.content(.init(
49+
.placeholder(id: .init(decodedValue: 2)),
50+
seed: .init(decodedValue: 4)
51+
)),
52+
frame: .zero,
53+
identity: .init(decodedValue: 1),
54+
version: .init(decodedValue: 0)
55+
)
56+
let expectedDescription = """
57+
(display-list
58+
(item #:identity 1 #:version 0 #:views true
59+
(frame (0.0 0.0; 0.0 0.0))
60+
(content-seed 4)
61+
(placeholder #2)))
62+
"""
63+
64+
let expectedMinimalDescription = """
65+
(DL(I:1 @#2))
66+
"""
67+
68+
69+
let list = DisplayList(item)
70+
#expect(list.description == expectedDescription)
71+
#expect(list.minimalDescription == expectedMinimalDescription)
72+
73+
let list2 = DisplayList([item])
74+
#expect(list2.description == expectedDescription)
75+
#expect(list2.minimalDescription == expectedMinimalDescription)
76+
}
77+
78+
@Test
79+
func colorItem() {
80+
let item = DisplayList.Item(
81+
.content(.init(
82+
.color(.white),
83+
seed: .init(decodedValue: 2))
84+
),
85+
frame: .zero,
86+
identity: .init(decodedValue: 1),
87+
version: .init(decodedValue: 0)
88+
)
89+
#expect(DisplayList(item).description == """
90+
(display-list
91+
(item #:identity 1 #:version 0
92+
(frame (0.0 0.0; 0.0 0.0))
93+
(content-seed 2)
94+
(color #FFFFFFFF)))
95+
""")
96+
#expect(DisplayList(item).minimalDescription == """
97+
(DL(I:1 (c #FFFFFFFF)))
98+
""")
99+
}
100+
101+
@Test
102+
func effectItem() {
103+
let colorItem = DisplayList.Item(
104+
.content(.init(
105+
.color(.white),
106+
seed: .init(decodedValue: 2))
107+
),
108+
frame: .zero,
109+
identity: .init(decodedValue: 1),
110+
version: .init(decodedValue: 0)
111+
)
112+
let effectItem = DisplayList.Item(
113+
.effect(
114+
.opacity(1),
115+
.init(colorItem)
116+
),
117+
frame: .zero,
118+
identity: .init(decodedValue: 4),
119+
version: .init(decodedValue: 3)
120+
)
121+
// FIXME: opacity value should be printed since it is not canonicalized here
122+
#expect(DisplayList(effectItem).description == """
123+
(display-list
124+
(item #:identity 4 #:version 3
125+
(frame (0.0 0.0; 0.0 0.0))
126+
(effect
127+
(item #:identity 1 #:version 0
128+
(frame (0.0 0.0; 0.0 0.0))
129+
(content-seed 2)
130+
(color #FFFFFFFF)))))
131+
""")
132+
#expect(DisplayList(effectItem).minimalDescription == """
133+
(DL(I:4(E(I:1 (c #FFFFFFFF)))))
134+
""")
135+
}
136+
}

Tests/OpenSwiftUICoreTests/View/IDViewTests.swift

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,30 +35,21 @@ struct IDViewTests {
3535
graph.setRootView(ContentView())
3636
graph.setProposedSize(CGSize(width: 100, height: 100))
3737
let (displayList, _) = graph.displayList()
38-
3938
let expectRegex = try! Regex(#"""
4039
\(display-list
4140
\(item #:identity \d+ #:version \d+
42-
\(frame \([^)]+\)\)\)\)
43-
"""#)
44-
#expect(displayList.description.contains(expectRegex))
45-
withKnownIssue("Blocked by DisplayList.print and canonicalize") {
46-
let expectRegex = try! Regex(#"""
47-
\(display-list
41+
\(frame \([^)]+\)\)
42+
\(effect
4843
\(item #:identity \d+ #:version \d+
4944
\(frame \([^)]+\)\)
50-
\(effect
51-
\(item #:identity \d+ #:version \d+
52-
\(frame \([^)]+\)\)
53-
\(content-seed \d+\)
54-
\(color #[0-9A-F]{8}\)\)
55-
\(item #:identity \d+ #:version \d+
56-
\(frame \([^)]+\)\)
57-
\(content-seed \d+\)
58-
\(color #[0-9A-F]{8}\)\)\)\)\)
59-
"""#)
60-
#expect(displayList.description.contains(expectRegex))
61-
}
45+
\(content-seed \d+\)
46+
\(color #[0-9A-F]{8}\)\)
47+
\(item #:identity \d+ #:version \d+
48+
\(frame \([^)]+\)\)
49+
\(content-seed \d+\)
50+
\(color #[0-9A-F]{8}\)\)\)\)\)
51+
"""#)
52+
#expect(displayList.description.contains(expectRegex))
6253
}
6354
#endif
6455
}

0 commit comments

Comments
 (0)