aboutsummaryrefslogtreecommitdiff
path: root/MapTests/MapTests.swift
diff options
context:
space:
mode:
Diffstat (limited to 'MapTests/MapTests.swift')
-rw-r--r--MapTests/MapTests.swift162
1 files changed, 160 insertions, 2 deletions
diff --git a/MapTests/MapTests.swift b/MapTests/MapTests.swift
index 5a8f781..0dbf63b 100644
--- a/MapTests/MapTests.swift
+++ b/MapTests/MapTests.swift
@@ -1,11 +1,169 @@
+import CoreGraphics
import Testing
@testable import Map
struct MapTests {
- @Test func testExample() async throws {
- // Write your test here and use APIs like `#expect(...)` to check expected conditions.
+ @Test func testMapParserWithEmptyInput() async throws {
+ let result = MapParser.parse(content: "")
+ #expect(result.vertices.isEmpty)
+ #expect(result.edges.isEmpty)
+ #expect(result.notes.isEmpty)
+ #expect(result.blockers.isEmpty)
+ #expect(result.opportunities.isEmpty)
+ #expect(result.groups.isEmpty)
+ }
+
+ @Test func testMapParserWithSingleVertex() async throws {
+ let content = "Node A (10, 20)"
+ let result = MapParser.parse(content: content)
+
+ #expect(result.vertices.count == 1)
+ let vertex = result.vertices.first!
+ #expect(vertex.label == "Node A")
+ #expect(vertex.position.x == 10.0)
+ #expect(vertex.position.y == 20.0)
+ #expect(vertex.shape == .circle)
+ }
+
+ @Test func testMapParserWithVertexWithShape() async throws {
+ let content = "Node B (30, 40) [square]"
+ let result = MapParser.parse(content: content)
+
+ #expect(result.vertices.count == 1)
+ let vertex = result.vertices.first!
+ #expect(vertex.label == "Node B")
+ #expect(vertex.position.x == 30.0)
+ #expect(vertex.position.y == 40.0)
+ #expect(vertex.shape == .square)
+ }
+
+ @Test func testMapParserWithEdge() async throws {
+ let content = """
+ Node A (10, 20)
+ Node B (30, 40)
+ Node A -- Node B
+ """
+ let result = MapParser.parse(content: content)
+
+ #expect(result.vertices.count == 2)
+ #expect(result.edges.count == 1)
+ let edge = result.edges.first!
+ #expect(edge.origin.x == 10.0)
+ #expect(edge.origin.y == 20.0)
+ #expect(edge.destination.x == 30.0)
+ #expect(edge.destination.y == 40.0)
+ #expect(edge.arrowhead == false)
+ }
+
+ @Test func testMapParserWithArrowEdge() async throws {
+ let content = """
+ Node A (10, 20)
+ Node B (30, 40)
+ Node A -> Node B
+ """
+ let result = MapParser.parse(content: content)
+
+ #expect(result.edges.count == 1)
+ let edge = result.edges.first!
+ #expect(edge.arrowhead == true)
+ }
+
+ @Test func testMapParserWithNote() async throws {
+ let content = "[Note] (50, 60) This is a test note"
+ let result = MapParser.parse(content: content)
+
+ #expect(result.notes.count == 1)
+ let note = result.notes.first!
+ #expect(note.position.x == 50.0)
+ #expect(note.position.y == 60.0)
+ #expect(note.text == "This is a test note")
+ }
+
+ @Test func testMapParserWithBlocker() async throws {
+ let content = """
+ Node A (10, 20)
+ [Blocker] Node A
+ """
+ let result = MapParser.parse(content: content)
+
+ #expect(result.blockers.count == 1)
+ let blocker = result.blockers.first!
+ #expect(blocker.position.x == 10.0)
+ #expect(blocker.position.y == 20.0)
+ }
+
+ @Test func testMapParserWithOpportunity() async throws {
+ let content = """
+ Node A (10, 20)
+ [Evolution] Node A +15
+ """
+ let result = MapParser.parse(content: content)
+
+ #expect(result.opportunities.count == 1)
+ let opportunity = result.opportunities.first!
+ #expect(opportunity.origin.x == 10.0)
+ #expect(opportunity.origin.y == 20.0)
+ #expect(opportunity.destination.x == 25.0)
+ #expect(opportunity.destination.y == 20.0)
+ }
+
+ @Test func testMapParserWithGroup() async throws {
+ let content = """
+ Node A (10, 20)
+ Node B (30, 40)
+ Node C (50, 60)
+ [Group] Node A, Node B, Node C
+ """
+ let result = MapParser.parse(content: content)
+
+ #expect(result.groups.count == 1)
+ let group = result.groups.first!
+ #expect(group.count == 3)
+ #expect(group.map { $0.label }.contains("Node A"))
+ #expect(group.map { $0.label }.contains("Node B"))
+ #expect(group.map { $0.label }.contains("Node C"))
+ }
+
+ @Test func testMapParserWithStages() async throws {
+ let content = """
+ [I] 15
+ [II] 35
+ [III] 80
+ """
+ let result = MapParser.parse(content: content)
+
+ #expect(result.stages.count == 3)
+ #expect(result.stages[0] == 15.0)
+ #expect(result.stages[1] == 35.0)
+ #expect(result.stages[2] == 80.0)
+ }
+
+ @Test func testMapParserWithComplexMap() async throws {
+ let content = """
+ Node A (10, 20)
+ Node B (30, 40) [square]
+ Node C (50, 60)
+ Node A -> Node B
+ Node B -- Node C
+ [Note] (70, 80) Complex map example
+ [Blocker] Node A
+ [Evolution] Node B +10
+ [Group] Node A, Node C
+ [I] 25
+ [II] 75
+ """
+ let result = MapParser.parse(content: content)
+
+ #expect(result.vertices.count == 3)
+ #expect(result.edges.count == 2)
+ #expect(result.notes.count == 1)
+ #expect(result.blockers.count == 1)
+ #expect(result.opportunities.count == 1)
+ #expect(result.groups.count == 1)
+ #expect(result.stages[0] == 25.0)
+ #expect(result.stages[1] == 75.0)
}
}