import Testing @testable import WmapParser @Test func shouldParseABasicComponent() { let source = "Dominoes (0.9, 0.5)" let result = WmapParser.parse(source) #expect(result.components.count == 1) #expect( result.components.first == WmapParser.Component( label: "Dominoes", coordinates: WmapParser.MapPoint(xCoordinate: 0.9, yCoordinate: 0.5), shape: .circle ) ) } @Test func shouldParseAComponentWithAShape() { let source = "Database (0.33, 0.81) [Square]" let result = WmapParser.parse(source) #expect(result.components.count == 1) #expect( result.components.first == WmapParser.Component( label: "Database", coordinates: WmapParser.MapPoint(xCoordinate: 0.33, yCoordinate: 0.81), shape: .square) ) } @Test func shouldParseAComponentWithXShape() { let source = "API (0.5, 0.6) [x]" let result = WmapParser.parse(source) #expect(result.components.count == 1) #expect( result.components.first == WmapParser.Component( label: "API", coordinates: WmapParser.MapPoint(xCoordinate: 0.5, yCoordinate: 0.6), shape: .xMark) ) } @Test func shouldParseAComponentWithTriangleShape() { let source = "Service (0.4, 0.7) [Triangle]" let result = WmapParser.parse(source) #expect(result.components.count == 1) #expect( result.components.first == WmapParser.Component( label: "Service", coordinates: WmapParser.MapPoint(xCoordinate: 0.4, yCoordinate: 0.7), shape: .triangle) ) } @Test func shouldParseAComponentWithCircleShape() { let source = "Process (0.2, 0.9) [CIRCLE]" let result = WmapParser.parse(source) #expect(result.components.count == 1) #expect( result.components.first == WmapParser.Component( label: "Process", coordinates: WmapParser.MapPoint(xCoordinate: 0.2, yCoordinate: 0.9), shape: .circle) ) } @Test func shouldDefaultShapeToCircleIfInvalid() { let source = "Figures (0.12, 0.711) [" let result = WmapParser.parse(source) #expect(result.components.count == 1) #expect( result.components.first == WmapParser.Component( label: "Figures", coordinates: WmapParser.MapPoint(xCoordinate: 0.12, yCoordinate: 0.711), shape: .circle) ) } @Test func shouldHandleDecimalNumbers() { let source = "Item (.5, .123)" let result = WmapParser.parse(source) #expect(result.components.count == 1) #expect( result.components.first == WmapParser.Component( label: "Item", coordinates: WmapParser.MapPoint(xCoordinate: 0.5, yCoordinate: 0.123), shape: .circle) ) } @Test func shouldHandleIntegersAsCoordinates() { let source = "Item (1, 0)" let result = WmapParser.parse(source) #expect(result.components.count == 1) #expect( result.components.first == WmapParser.Component( label: "Item", coordinates: WmapParser.MapPoint(xCoordinate: 1.0, yCoordinate: 0.0), shape: .circle) ) } @Test func shouldPreserveCaseInComponentLabels() { let source = "RubberGaskets (0.5, 0.5)" let result = WmapParser.parse(source) #expect(result.components.count == 1) #expect( result.components.first == WmapParser.Component( label: "RubberGaskets", coordinates: WmapParser.MapPoint(xCoordinate: 0.5, yCoordinate: 0.5), shape: .circle) ) } @Test func shouldHandleComponentLabelsWithSpaces() { let source = "Big Lawnmowers (0.5, 0.5)" let result = WmapParser.parse(source) #expect(result.components.count == 1) #expect( result.components.first == WmapParser.Component( label: "Big Lawnmowers", coordinates: WmapParser.MapPoint(xCoordinate: 0.5, yCoordinate: 0.5), shape: .circle) ) } @Test func shouldHandleWhitespaceAroundTokens() { let source = " Outer Space ( 0.9 , 0.5 ) [ Square ] " let result = WmapParser.parse(source) #expect(result.components.count == 1) #expect( result.components.first == WmapParser.Component( label: "Outer Space", coordinates: WmapParser.MapPoint(xCoordinate: 0.9, yCoordinate: 0.5), shape: .square) ) }