aboutsummaryrefslogtreecommitdiff
path: root/Tests/WmapParserTests/ComponentParserTests.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/WmapParserTests/ComponentParserTests.swift')
-rw-r--r--Tests/WmapParserTests/ComponentParserTests.swift131
1 files changed, 131 insertions, 0 deletions
diff --git a/Tests/WmapParserTests/ComponentParserTests.swift b/Tests/WmapParserTests/ComponentParserTests.swift
new file mode 100644
index 0000000..52e347a
--- /dev/null
+++ b/Tests/WmapParserTests/ComponentParserTests.swift
@@ -0,0 +1,131 @@
+import Testing
+
+@testable import WmapParser
+
+@Test func shouldParseABasicComponent() {
+ let source = "Dominoes (0.9, 0.5)"
+ let result = parse(source)
+ #expect(result.components.count == 1)
+ #expect(
+ result.components.first
+ == Component(
+ label: "Dominoes", coordinates: MapPoint(xCoordinate: 0.9, yCoordinate: 0.5), shape: .circle
+ )
+ )
+}
+
+@Test func shouldParseAComponentWithAShape() {
+ let source = "Database (0.33, 0.81) [Square]"
+ let result = parse(source)
+ #expect(result.components.count == 1)
+ #expect(
+ result.components.first
+ == Component(
+ label: "Database", coordinates: MapPoint(xCoordinate: 0.33, yCoordinate: 0.81),
+ shape: .square)
+ )
+}
+
+@Test func shouldParseAComponentWithXShape() {
+ let source = "API (0.5, 0.6) [x]"
+ let result = parse(source)
+ #expect(result.components.count == 1)
+ #expect(
+ result.components.first
+ == Component(
+ label: "API", coordinates: MapPoint(xCoordinate: 0.5, yCoordinate: 0.6), shape: .xMark)
+ )
+}
+
+@Test func shouldParseAComponentWithTriangleShape() {
+ let source = "Service (0.4, 0.7) [Triangle]"
+ let result = parse(source)
+ #expect(result.components.count == 1)
+ #expect(
+ result.components.first
+ == Component(
+ label: "Service", coordinates: MapPoint(xCoordinate: 0.4, yCoordinate: 0.7),
+ shape: .triangle)
+ )
+}
+
+@Test func shouldParseAComponentWithCircleShape() {
+ let source = "Process (0.2, 0.9) [CIRCLE]"
+ let result = parse(source)
+ #expect(result.components.count == 1)
+ #expect(
+ result.components.first
+ == Component(
+ label: "Process", coordinates: MapPoint(xCoordinate: 0.2, yCoordinate: 0.9), shape: .circle)
+ )
+}
+
+@Test func shouldDefaultShapeToCircleIfInvalid() {
+ let source = "Figures (0.12, 0.711) ["
+ let result = parse(source)
+ #expect(result.components.count == 1)
+ #expect(
+ result.components.first
+ == Component(
+ label: "Figures", coordinates: MapPoint(xCoordinate: 0.12, yCoordinate: 0.711),
+ shape: .circle)
+ )
+}
+
+@Test func shouldHandleDecimalNumbers() {
+ let source = "Item (.5, .123)"
+ let result = parse(source)
+ #expect(result.components.count == 1)
+ #expect(
+ result.components.first
+ == Component(
+ label: "Item", coordinates: MapPoint(xCoordinate: 0.5, yCoordinate: 0.123), shape: .circle)
+ )
+}
+
+@Test func shouldHandleIntegersAsCoordinates() {
+ let source = "Item (1, 0)"
+ let result = parse(source)
+ #expect(result.components.count == 1)
+ #expect(
+ result.components.first
+ == Component(
+ label: "Item", coordinates: MapPoint(xCoordinate: 1.0, yCoordinate: 0.0), shape: .circle)
+ )
+}
+
+@Test func shouldPreserveCaseInComponentLabels() {
+ let source = "RubberGaskets (0.5, 0.5)"
+ let result = parse(source)
+ #expect(result.components.count == 1)
+ #expect(
+ result.components.first
+ == Component(
+ label: "RubberGaskets", coordinates: MapPoint(xCoordinate: 0.5, yCoordinate: 0.5),
+ shape: .circle)
+ )
+}
+
+@Test func shouldHandleComponentLabelsWithSpaces() {
+ let source = "Big Lawnmowers (0.5, 0.5)"
+ let result = parse(source)
+ #expect(result.components.count == 1)
+ #expect(
+ result.components.first
+ == Component(
+ label: "Big Lawnmowers", coordinates: MapPoint(xCoordinate: 0.5, yCoordinate: 0.5),
+ shape: .circle)
+ )
+}
+
+@Test func shouldHandleWhitespaceAroundTokens() {
+ let source = " Outer Space ( 0.9 , 0.5 ) [ Square ] "
+ let result = parse(source)
+ #expect(result.components.count == 1)
+ #expect(
+ result.components.first
+ == Component(
+ label: "Outer Space", coordinates: MapPoint(xCoordinate: 0.9, yCoordinate: 0.5),
+ shape: .square)
+ )
+}