@@ -32,18 +32,76 @@ func TestConsumeComment(t *testing.T) {
3232}
3333
3434func TestConsumeString (t * testing.T ) {
35- strs := []string {
36- "'hello world'" ,
37- "'123'" ,
38- }
39- for _ , s := range strs {
40- lexer := NewLexer (s )
41- err := lexer .consumeToken ()
42- require .NoError (t , err )
43- require .Equal (t , TokenKindString , lexer .lastToken .Kind )
44- require .Equal (t , strings .Trim (s , "'" ), lexer .lastToken .String )
45- require .True (t , lexer .isEOF ())
46- }
35+ t .Run ("Simple strings" , func (t * testing.T ) {
36+ strs := []string {
37+ "'hello world'" ,
38+ "'123'" ,
39+ }
40+ for _ , s := range strs {
41+ lexer := NewLexer (s )
42+ err := lexer .consumeToken ()
43+ require .NoError (t , err )
44+ require .Equal (t , TokenKindString , lexer .lastToken .Kind )
45+ require .Equal (t , strings .Trim (s , "'" ), lexer .lastToken .String )
46+ require .True (t , lexer .isEOF ())
47+ }
48+ })
49+
50+ t .Run ("Strings with backslash-escaped quotes" , func (t * testing.T ) {
51+ testCases := []struct {
52+ input string
53+ expected string
54+ }{
55+ {`'hello\'world'` , `hello\'world` },
56+ {`'test\''` , `test\'` },
57+ {`'\'abc\''` , `\'abc\'` },
58+ }
59+ for _ , tc := range testCases {
60+ lexer := NewLexer (tc .input )
61+ err := lexer .consumeToken ()
62+ require .NoError (t , err , "Failed to parse: %s" , tc .input )
63+ require .Equal (t , TokenKindString , lexer .lastToken .Kind )
64+ require .Equal (t , tc .expected , lexer .lastToken .String )
65+ require .True (t , lexer .isEOF ())
66+ }
67+ })
68+
69+ t .Run ("Strings with double single quotes" , func (t * testing.T ) {
70+ testCases := []struct {
71+ input string
72+ expected string
73+ }{
74+ {`'hello''world'` , `hello''world` },
75+ {`'test''123'` , `test''123` },
76+ {`'abc''def''ghi'` , `abc''def''ghi` },
77+ }
78+ for _ , tc := range testCases {
79+ lexer := NewLexer (tc .input )
80+ err := lexer .consumeToken ()
81+ require .NoError (t , err , "Failed to parse: %s" , tc .input )
82+ require .Equal (t , TokenKindString , lexer .lastToken .Kind )
83+ require .Equal (t , tc .expected , lexer .lastToken .String )
84+ require .True (t , lexer .isEOF ())
85+ }
86+ })
87+
88+ t .Run ("Strings with backslash-escaped backslashes" , func (t * testing.T ) {
89+ testCases := []struct {
90+ input string
91+ expected string
92+ }{
93+ {`'a\\b'` , `a\\b` },
94+ {`'test\\123'` , `test\\123` },
95+ }
96+ for _ , tc := range testCases {
97+ lexer := NewLexer (tc .input )
98+ err := lexer .consumeToken ()
99+ require .NoError (t , err , "Failed to parse: %s" , tc .input )
100+ require .Equal (t , TokenKindString , lexer .lastToken .Kind )
101+ require .Equal (t , tc .expected , lexer .lastToken .String )
102+ require .True (t , lexer .isEOF ())
103+ }
104+ })
47105}
48106
49107func TestConsumeNumber (t * testing.T ) {
0 commit comments