Skip to content

Commit 5ef2405

Browse files
committed
Adding location tests
1 parent b12b3dc commit 5ef2405

File tree

3 files changed

+68
-50
lines changed

3 files changed

+68
-50
lines changed

SwiftDraw/LayerTree.A.Path.swift

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,52 @@ extension LayerTree {
5353
}
5454
}
5555
}
56+
57+
extension LayerTree.Path {
58+
var lastControl: LayerTree.Point? {
59+
guard let lastSegment = segments.last else { return nil }
60+
switch lastSegment {
61+
case .cubic(_, _, let p): return p
62+
default: return nil
63+
}
64+
}
65+
66+
var location: LayerTree.Point? {
67+
guard let location = segments.last?.location else {
68+
return lastStart
69+
}
70+
71+
return location
72+
}
73+
74+
var lastStart: LayerTree.Point? {
75+
let rev = segments.reversed().dropFirst()
76+
guard
77+
let closeIdx = rev.index(where: { $0.isClose }),
78+
closeIdx != rev.startIndex else {
79+
return segments.first?.location
80+
}
81+
82+
let point = rev.index(before: closeIdx)
83+
return rev[point].location
84+
}
85+
}
86+
87+
private extension LayerTree.Path.Segment {
88+
89+
var isClose: Bool {
90+
guard case .close = self else {
91+
return false
92+
}
93+
return true
94+
}
95+
96+
var location: LayerTree.Point? {
97+
switch self {
98+
case .move(to: let p): return p
99+
case .line(let p): return p
100+
case .cubic(let p, _, _): return p
101+
case .close: return nil
102+
}
103+
}
104+
}

SwiftDraw/LayerTree.Builder.Path.swift

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ extension LayerTree.Builder {
4343

4444
for s in element.segments {
4545
let segment = try createSegment(from: s,
46-
last: path.last ?? Point.zero,
46+
last: path.location ?? Point.zero,
4747
previous: path.lastControl)
4848
path.segments.append(segment)
4949
}
@@ -224,52 +224,3 @@ extension LayerTree.Point {
224224
return LayerTree.Point(base.x + x, base.y + y)
225225
}
226226
}
227-
228-
extension LayerTree.Path {
229-
var lastControl: LayerTree.Point? {
230-
guard let lastSegment = segments.last else { return nil }
231-
switch lastSegment {
232-
case .cubic(_, _, let p): return p
233-
default: return nil
234-
}
235-
}
236-
237-
var last: LayerTree.Point? {
238-
guard let last = segments.last?.last else {
239-
return lastStart
240-
}
241-
242-
return last
243-
}
244-
245-
var lastStart: LayerTree.Point? {
246-
let rev = segments.reversed().dropFirst()
247-
guard
248-
let closeIdx = rev.index(where: { $0.isClose }),
249-
closeIdx != rev.startIndex else {
250-
return segments.first?.last
251-
}
252-
253-
let point = rev.index(before: closeIdx)
254-
return rev[point].last
255-
}
256-
}
257-
258-
private extension LayerTree.Path.Segment {
259-
260-
var isClose: Bool {
261-
guard case .close = self else {
262-
return false
263-
}
264-
return true
265-
}
266-
267-
var last: LayerTree.Point? {
268-
switch self {
269-
case .move(to: let p): return p
270-
case .line(let p): return p
271-
case .cubic(let p, _, _): return p
272-
case .close: return nil
273-
}
274-
}
275-
}

SwiftDrawTests/LayerTree.PathTests.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,24 @@ final class LayerTreePathTests: XCTestCase {
3838

3939
let twoThirds = Float(2.0/3.0)
4040

41+
42+
func testLocation() {
43+
let path = Path()
44+
XCTAssertNil(path.location)
45+
46+
path.segments.append(move(110, 90))
47+
XCTAssertEqual(path.location, Point(110, 90))
48+
49+
path.segments.append(line(200, 200))
50+
XCTAssertEqual(path.location, Point(200, 200))
51+
52+
path.segments.append(.cubic(to: Point(300, 300), control1: Point(200, 200), control2: Point(250, 250)))
53+
XCTAssertEqual(path.location, Point(300, 300))
54+
55+
path.segments.append(.close)
56+
XCTAssertEqual(path.location, Point(110, 90))
57+
}
58+
4159
func testMove() {
4260

4361
var m = LayerTree.Builder.createMove(from: .move(x: 10, y: 10, space: .absolute), last: .zero)

0 commit comments

Comments
 (0)