1818mod parser_tests {
1919 use celma_v0_core:: parser:: specs:: Parse ;
2020 use celma_v0_core:: stream:: char_stream:: CharStream ;
21- use celma_v1:: parser:: { atom_char, atom_code, atom_ident, atom_string, kind, parsec, rule} ;
21+ use celma_v0_core:: stream:: specs:: Len ;
22+ use celma_v1:: parser:: {
23+ atom_char, atom_code, atom_ident, atom_string, code, kind, rcode, parsec, rule,
24+ } ;
2225 use celma_v1_ast:: syntax:: ASTParsec :: {
2326 PAtom , PAtoms , PBind , PCheck , PChoice , PCode , PIdent , PLookahead , PNot , POptional ,
2427 PSequence , PTry ,
@@ -28,9 +31,9 @@ mod parser_tests {
2831
2932 #[ test]
3033 fn should_parse_kind ( ) {
31- let response = kind ( ) . parse ( CharStream :: new ( "{ hello()} " ) ) ;
34+ let response = kind ( ) . parse ( CharStream :: new ( "< hello> " ) ) ;
3235
33- assert_eq ! ( response. fold( |v, _, _| v == "hello() " , |_, _| false ) , true ) ;
36+ assert_eq ! ( response. fold( |v, _, _| v == "hello" , |_, _| false ) , true ) ;
3437 }
3538
3639 #[ test]
@@ -73,6 +76,50 @@ mod parser_tests {
7376 ) ;
7477 }
7578
79+ #[ test]
80+ fn should_parse_ident_empty_rcode ( ) {
81+ let response = rcode ( ) . parse ( CharStream :: new ( "}" ) ) ;
82+
83+ assert_eq ! ( response. fold( |_, s, _| s. len( ) == 1 , |_, _| false ) , true ) ;
84+ }
85+
86+ #[ test]
87+ fn should_parse_ident_body_with_block_rcode ( ) {
88+ let response = rcode ( ) . parse ( CharStream :: new ( "tutu { titi } toto }" ) ) ;
89+
90+ assert_eq ! ( response. fold( |_, s, _| s. len( ) == 1 , |_, _| false ) , true ) ;
91+ }
92+
93+ #[ test]
94+ fn should_parse_ident_body_with_block_unbalanced_rcode ( ) {
95+ let response = rcode ( ) . parse ( CharStream :: new ( "{ titi }" ) ) ;
96+
97+ assert_eq ! ( response. fold( |_, _, _| false , |_, _| true ) , true ) ;
98+ }
99+
100+ #[ test]
101+ fn should_parse_ident_body_code ( ) {
102+ let response = code ( ) . parse ( CharStream :: new ( "{ titi }" ) ) ;
103+
104+ assert_eq ! (
105+ response. fold( |v, _, _| v == String :: from( " titi " ) , |_, _| false ) ,
106+ true
107+ ) ;
108+ }
109+
110+ #[ test]
111+ fn should_parse_ident_body_code_with_block ( ) {
112+ let response = code ( ) . parse ( CharStream :: new ( "{ {titi} }" ) ) ;
113+
114+ assert_eq ! (
115+ response. fold(
116+ |v, s, _| v == String :: from( " {titi} " ) && s. is_empty( ) ,
117+ |_, _| false
118+ ) ,
119+ true
120+ ) ;
121+ }
122+
76123 #[ test]
77124 fn should_parse_ident_body ( ) {
78125 let response = parsec ( ) . parse ( CharStream :: new ( "entry" ) ) ;
0 commit comments