1- use crate :: parser:: { Lexer , LexerError , ScalarToken , SourcePosition , Spanning , Token } ;
1+ use crate :: parser:: { Lexer , LexerError , ScalarToken , SourcePosition , Spanning , StringValue , Token } ;
22
33fn tokenize_to_vec ( s : & str ) -> Vec < Spanning < Token < ' _ > > > {
44 let mut tokens = Vec :: new ( ) ;
@@ -21,6 +21,7 @@ fn tokenize_to_vec(s: &str) -> Vec<Spanning<Token<'_>>> {
2121 tokens
2222}
2323
24+ #[ track_caller]
2425fn tokenize_single ( s : & str ) -> Spanning < Token < ' _ > > {
2526 let mut tokens = tokenize_to_vec ( s) ;
2627
@@ -151,7 +152,7 @@ fn strings() {
151152 Spanning :: start_end(
152153 & SourcePosition :: new( 0 , 0 , 0 ) ,
153154 & SourcePosition :: new( 8 , 0 , 8 ) ,
154- Token :: Scalar ( ScalarToken :: String ( "simple" ) )
155+ Token :: Scalar ( ScalarToken :: String ( StringValue :: Quoted ( "simple" ) ) )
155156 )
156157 ) ;
157158
@@ -160,7 +161,7 @@ fn strings() {
160161 Spanning :: start_end(
161162 & SourcePosition :: new( 0 , 0 , 0 ) ,
162163 & SourcePosition :: new( 15 , 0 , 15 ) ,
163- Token :: Scalar ( ScalarToken :: String ( " white space " ) )
164+ Token :: Scalar ( ScalarToken :: String ( StringValue :: Quoted ( " white space " ) ) )
164165 )
165166 ) ;
166167
@@ -169,7 +170,7 @@ fn strings() {
169170 Spanning :: start_end(
170171 & SourcePosition :: new( 0 , 0 , 0 ) ,
171172 & SourcePosition :: new( 10 , 0 , 10 ) ,
172- Token :: Scalar ( ScalarToken :: String ( r#"quote \""# ) )
173+ Token :: Scalar ( ScalarToken :: String ( StringValue :: Quoted ( r#"quote \""# ) ) )
173174 )
174175 ) ;
175176
@@ -178,7 +179,9 @@ fn strings() {
178179 Spanning :: start_end(
179180 & SourcePosition :: new( 0 , 0 , 0 ) ,
180181 & SourcePosition :: new( 20 , 0 , 20 ) ,
181- Token :: Scalar ( ScalarToken :: String ( r"escaped \n\r\b\t\f" ) )
182+ Token :: Scalar ( ScalarToken :: String ( StringValue :: Quoted (
183+ r"escaped \n\r\b\t\f"
184+ ) ) )
182185 )
183186 ) ;
184187
@@ -187,7 +190,7 @@ fn strings() {
187190 Spanning :: start_end(
188191 & SourcePosition :: new( 0 , 0 , 0 ) ,
189192 & SourcePosition :: new( 15 , 0 , 15 ) ,
190- Token :: Scalar ( ScalarToken :: String ( r"slashes \\ \/" ) )
193+ Token :: Scalar ( ScalarToken :: String ( StringValue :: Quoted ( r"slashes \\ \/" ) ) )
191194 )
192195 ) ;
193196
@@ -196,7 +199,21 @@ fn strings() {
196199 Spanning :: start_end(
197200 & SourcePosition :: new( 0 , 0 , 0 ) ,
198201 & SourcePosition :: new( 34 , 0 , 34 ) ,
199- Token :: Scalar ( ScalarToken :: String ( r"unicode \u1234\u5678\u90AB\uCDEF" ) ) ,
202+ Token :: Scalar ( ScalarToken :: String ( StringValue :: Quoted (
203+ r"unicode \u1234\u5678\u90AB\uCDEF"
204+ ) ) ) ,
205+ )
206+ ) ;
207+ }
208+
209+ #[ test]
210+ fn block_strings ( ) {
211+ assert_eq ! (
212+ tokenize_single( r#""""""# ) ,
213+ Spanning :: start_end(
214+ & SourcePosition :: new( 0 , 0 , 0 ) ,
215+ & SourcePosition :: new( 8 , 0 , 8 ) ,
216+ Token :: Scalar ( ScalarToken :: String ( StringValue :: Block ( "" . into( ) ) ) ) ,
200217 )
201218 ) ;
202219}
@@ -665,13 +682,16 @@ fn display() {
665682 ( Token :: Scalar ( ScalarToken :: Int ( "123" ) ) , "123" ) ,
666683 ( Token :: Scalar ( ScalarToken :: Float ( "4.5" ) ) , "4.5" ) ,
667684 (
668- Token :: Scalar ( ScalarToken :: String ( "some string" ) ) ,
685+ Token :: Scalar ( ScalarToken :: String ( StringValue :: Quoted ( "some string" ) ) ) ,
669686 "\" some string\" " ,
670687 ) ,
671688 (
672- Token :: Scalar ( ScalarToken :: String ( "string with \\ escape and \" quote" ) ) ,
689+ Token :: Scalar ( ScalarToken :: String ( StringValue :: Quoted (
690+ "string with \\ escape and \" quote" ,
691+ ) ) ) ,
673692 "\" string with \\ \\ escape and \\ \" quote\" " ,
674693 ) ,
694+ // TODO: tests for block string
675695 ( Token :: ExclamationMark , "!" ) ,
676696 ( Token :: Dollar , "$" ) ,
677697 ( Token :: ParenOpen , "(" ) ,
0 commit comments