@@ -292,7 +292,7 @@ class BlockDirectiveArgumentParserTests: XCTestCase {
292
292
293
293
let expectedDump = """
294
294
Document @1:1-3:4
295
- ├─ BlockDirective @1:1-1:8 name: " Outer "
295
+ ├─ BlockDirective @1:1-1:13 name: " Outer "
296
296
│ ├─ Argument text segments:
297
297
│ | @1:8-1:12: " x: 1 "
298
298
└─ Paragraph @2:3-3:2
@@ -867,4 +867,92 @@ class BlockDirectiveArgumentParserTests: XCTestCase {
867
867
XCTAssertEqual ( x. value, " " )
868
868
}
869
869
}
870
+
871
+
872
+ func testSingleLineRange( ) {
873
+ let source = """
874
+ @Image(source: 1.png, alt: " hello " )
875
+ """
876
+
877
+ let document = Document ( parsing: source, options: . parseBlockDirectives)
878
+ let directive = document. child ( at: 0 ) as! BlockDirective
879
+ XCTAssertEqual ( 1 , directive. argumentText. segments. count)
880
+
881
+ var parseErrors = [ DirectiveArgumentText . ParseError] ( )
882
+ let arguments = directive. argumentText. parseNameValueArguments ( parseErrors: & parseErrors)
883
+ XCTAssertTrue ( parseErrors. isEmpty)
884
+
885
+ XCTAssertEqual ( arguments. count, 2 )
886
+ arguments [ " source " ] . map { x in
887
+ XCTAssertEqual ( x. name, " source " )
888
+ XCTAssertEqual ( x. value, " 1.png " )
889
+ }
890
+ arguments [ " alt " ] . map { x in
891
+ XCTAssertEqual ( x. name, " alt " )
892
+ XCTAssertEqual ( x. value, " hello " )
893
+ }
894
+
895
+ let expectedDump = #"""
896
+ Document @1:1-1:36
897
+ └─ BlockDirective @1:1-1:36 name: "Image"
898
+ ├─ Argument text segments:
899
+ | @1:8-1:35: "source: 1.png, alt: \"hello\""
900
+ """#
901
+ XCTAssertEqual ( document. debugDescription ( options: . printSourceLocations) , expectedDump)
902
+ }
903
+
904
+ func testSingleLineMissingCloseParenthesis( ) {
905
+ let source = """
906
+ @Image(source: 1.png,
907
+ alt: " hello "
908
+ @Image(source: 2.png, alt: " hello2 " )
909
+ """
910
+
911
+ let document = Document ( parsing: source, options: . parseBlockDirectives)
912
+ let expectedDump = #"""
913
+ Document @1:1-3:37
914
+ ├─ BlockDirective @1:1-2:13 name: "Image"
915
+ │ ├─ Argument text segments:
916
+ │ | @1:8-1:22: "source: 1.png,"
917
+ │ | @2:1-2:13: "alt: \"hello\""
918
+ └─ BlockDirective @3:1-3:37 name: "Image"
919
+ ├─ Argument text segments:
920
+ | @3:8-3:36: "source: 2.png, alt: \"hello2\""
921
+ """#
922
+ XCTAssertEqual ( document. debugDescription ( options: . printSourceLocations) , expectedDump)
923
+ }
924
+
925
+ func testSingleLineOnlyOpenParenthesis( ) {
926
+ let source = """
927
+ @Image(
928
+ @Image(source: 2.png, alt: " hello2 " )
929
+ """
930
+
931
+ let document = Document ( parsing: source, options: . parseBlockDirectives)
932
+ let expectedDump = #"""
933
+ Document @1:1-2:37
934
+ ├─ BlockDirective @1:1-1:8 name: "Image"
935
+ └─ BlockDirective @2:1-2:37 name: "Image"
936
+ ├─ Argument text segments:
937
+ | @2:8-2:36: "source: 2.png, alt: \"hello2\""
938
+ """#
939
+ XCTAssertEqual ( document. debugDescription ( options: . printSourceLocations) , expectedDump)
940
+ }
941
+
942
+ func testSingleLineMissingParenthesis( ) {
943
+ let source = """
944
+ @Image
945
+ @Image(source: 2.png, alt: " hello2 " )
946
+ """
947
+
948
+ let document = Document ( parsing: source, options: . parseBlockDirectives)
949
+ let expectedDump = #"""
950
+ Document @1:1-2:37
951
+ ├─ BlockDirective @1:1-1:7 name: "Image"
952
+ └─ BlockDirective @2:1-2:37 name: "Image"
953
+ ├─ Argument text segments:
954
+ | @2:8-2:36: "source: 2.png, alt: \"hello2\""
955
+ """#
956
+ XCTAssertEqual ( document. debugDescription ( options: . printSourceLocations) , expectedDump)
957
+ }
870
958
}
0 commit comments