@@ -121,3 +121,95 @@ impl ToTokens for EnumVariantFormatInput {
121121 } ) ;
122122 }
123123}
124+
125+ #[ cfg( test) ]
126+ #[ allow( clippy:: expect_used) ]
127+ mod tests {
128+ use super :: * ;
129+
130+ use quote:: quote;
131+
132+ #[ test]
133+ fn struct_format_input_requires_initial_lit_str ( ) {
134+ let empty_stream_res = syn:: parse2 :: < StructFormatInput > ( quote ! { } ) ;
135+ let err = empty_stream_res. expect_err (
136+ "empty stream was parsed successfully as StructFormatInput" ,
137+ ) ;
138+ assert_eq ! (
139+ err. to_string( ) ,
140+ "unexpected end of input, expected string literal"
141+ ) ;
142+ }
143+
144+ #[ test]
145+ fn struct_format_input_requires_initial_arg_to_be_lit_str ( ) {
146+ let empty_stream_res =
147+ syn:: parse2 :: < StructFormatInput > ( quote ! { true } ) ;
148+ let err = empty_stream_res. expect_err (
149+ "stream `true` was parsed successfully as StructFormatInput" ,
150+ ) ;
151+ assert_eq ! ( err. to_string( ) , "expected string literal" ) ;
152+ }
153+
154+ #[ test]
155+ fn struct_format_input_rejects_unexpected_token_after_lit_str ( ) {
156+ let empty_stream_res =
157+ syn:: parse2 :: < StructFormatInput > ( quote ! { "format string" 5 } ) ;
158+ let err = empty_stream_res. expect_err (
159+ "stream `\" format string\" 5` was parsed successfully as StructFormatInput" ,
160+ ) ;
161+ assert_eq ! ( err. to_string( ) , "unexpected token after string literal" ) ;
162+ }
163+
164+ #[ test]
165+ fn struct_format_input_parses_lit_str_with_trailing_comma ( ) {
166+ let empty_stream_res =
167+ syn:: parse2 :: < StructFormatInput > ( quote ! { "format string" , } ) ;
168+ let format_input = empty_stream_res. expect (
169+ "stream `\" format string\" ,` could not be parsed as StructFormatInput" ,
170+ ) ;
171+ assert_eq ! ( format_input. lit_str. value( ) , "format string" ) ;
172+ }
173+
174+ #[ test]
175+ fn enum_variant_format_input_requires_initial_lit_str ( ) {
176+ let empty_stream_res = syn:: parse2 :: < EnumVariantFormatInput > ( quote ! { } ) ;
177+ let err = empty_stream_res. expect_err (
178+ "empty stream was parsed successfully as EnumVariantFormatInput" ,
179+ ) ;
180+ assert_eq ! (
181+ err. to_string( ) ,
182+ "unexpected end of input, expected string literal"
183+ ) ;
184+ }
185+
186+ #[ test]
187+ fn enum_variant_format_input_requires_initial_arg_to_be_lit_str ( ) {
188+ let empty_stream_res =
189+ syn:: parse2 :: < EnumVariantFormatInput > ( quote ! { true } ) ;
190+ let err = empty_stream_res. expect_err (
191+ "stream `true` was parsed successfully as EnumVariantFormatInput" ,
192+ ) ;
193+ assert_eq ! ( err. to_string( ) , "expected string literal" ) ;
194+ }
195+
196+ #[ test]
197+ fn enum_variant_format_input_rejects_unexpected_token_after_lit_str ( ) {
198+ let empty_stream_res =
199+ syn:: parse2 :: < EnumVariantFormatInput > ( quote ! { "format string" 5 } ) ;
200+ let err = empty_stream_res. expect_err (
201+ "stream `\" format string\" 5` was parsed successfully as EnumVariantFormatInput" ,
202+ ) ;
203+ assert_eq ! ( err. to_string( ) , "unexpected token after string literal" ) ;
204+ }
205+
206+ #[ test]
207+ fn enum_variant_format_input_parses_lit_str_with_trailing_comma ( ) {
208+ let empty_stream_res =
209+ syn:: parse2 :: < EnumVariantFormatInput > ( quote ! { "format string" , } ) ;
210+ let format_input = empty_stream_res. expect (
211+ "stream `\" format string\" ,` could not be parsed as EnumVariantFormatInput" ,
212+ ) ;
213+ assert_eq ! ( format_input. lit_str. value( ) , "format string" ) ;
214+ }
215+ }
0 commit comments