@@ -763,7 +763,7 @@ class LexerTests : XCTestCase {
763763 end: 66 ,
764764 line: 1 ,
765765 column: 1 ,
766- value: " TopLevel { \n indented \n alsoIndented \n } \n " ,
766+ value: " \n TopLevel { \n indented \n alsoIndented \n } \n " ,
767767 prev: nil , next: nil )
768768
769769 let source = Source ( body: sourceStr, name: " TestSource " )
@@ -777,25 +777,43 @@ class LexerTests : XCTestCase {
777777 }
778778
779779 func testBlockStringIndentationAndBlankLine( ) throws {
780- let rawString = " \n \n \n TopLevel { \n indented \n alsoIndented \n } \n \n \n \t \t \n " // from testReadRawString() above
780+ let rawString = " \n \n \n TopLevel { \n indented \n alsoIndented \n } \n \n \n \t \t \n "
781781 let cleanedString = blockStringValue ( rawValue: rawString)
782782
783- XCTAssertEqual ( cleanedString, " TopLevel {\n indented \n alsoIndented \n } " )
783+ XCTAssertEqual ( cleanedString, " TopLevel { \n indented \n alsoIndented \n } " )
784784 }
785785
786786 func testBlockStringDoubleIndentationAndBlankLine( ) throws {
787- let rawString = " \n \n \n TopLevel { \n indented: { \n foo: String \n } \n alsoIndented \n } \n \n \n \t \t \n " // from testReadRawString() above
787+ let rawString = " \n \n \n TopLevel { \n indented: { \n foo: String \n } \n alsoIndented \n } \n \n \n \t \t \n "
788788 let cleanedString = blockStringValue ( rawValue: rawString)
789789
790- XCTAssertEqual ( cleanedString, " TopLevel {\n indented: { \n foo: String \n } \n alsoIndented \n } " )
790+ XCTAssertEqual ( cleanedString, " TopLevel { \n indented: { \n foo: String \n } \n alsoIndented \n } " )
791791 }
792792
793793 func testBlockStringIndentationAndBlankLineFirstLineNotIndentedWeird( ) throws {
794- let rawString = " \n \n \n TopLevel { \n indented \n alsoIndented \n } \n \n \n \t \t \n " // from testReadRawString() above
794+ let rawString = " \n \n \n TopLevel { \n indented \n alsoIndented \n } \n \n \n \t \t \n "
795+ let cleanedString = blockStringValue ( rawValue: rawString)
796+
797+ XCTAssertEqual ( cleanedString, " TopLevel { \n indented \n alsoIndented \n } " )
798+ }
799+
800+ func testBlockStringIndentationMultilineAndBlankLineFirstLineNotIndentedWeird( ) throws {
801+ let rawString = """
802+
803+
804+ TopLevel {
805+ indented
806+ alsoIndented
807+ }
808+
809+
810+ \t
811+ """
795812 let cleanedString = blockStringValue ( rawValue: rawString)
796813
797814 XCTAssertEqual ( cleanedString, " TopLevel { \n indented \n alsoIndented \n } " )
798815 }
816+
799817
800818 // Lexer tests for multi-line string token parsing
801819
@@ -869,6 +887,34 @@ class LexerTests : XCTestCase {
869887
870888 XCTAssertEqual ( token, expected, " expected: \n \( dump ( expected) ) \n got: \n \( dump ( token) ) \n " )
871889 }
890+
891+ func testMultilineStrings_stringIndentedInStream( ) throws {
892+ let sourceStr =
893+ #"""
894+ """
895+ Multi-line string {
896+ with Inner "foo"
897+ should be valid indented
898+ }
899+ """
900+ """#
901+
902+ let token = try lexOne ( sourceStr)
903+
904+ let expected = Token (
905+ kind: . string,
906+ start: 4 ,
907+ end: 103 ,
908+ line: 1 ,
909+ column: 5 ,
910+ value: " Multi-line string { \n with Inner \" foo \" \n should be valid indented \n } "
911+ )
912+
913+ print ( sourceStr)
914+
915+ XCTAssertEqual ( token, expected, " expected: \n \( dump ( expected) ) \n got: \n \( dump ( token) ) \n " )
916+ }
917+
872918
873919 // Test empty strings & multi-line string lexer token parsing
874920
0 commit comments