@@ -167,28 +167,25 @@ static char* ps_string_as_cstr(PostscriptString string, Arena* arena) {
167167 TEST_ASSERT_EQ(tokenizer->data_len, tokenizer->offset); \
168168 arena_free(arena);
169169
170- #define GET_TOKEN_WITH_DATA (expected_type , data_field , expected_value ) \
170+ #define GET_TOKEN_NO_DATA (expected_type ) \
171171 TEST_PDF_REQUIRE(postscript_next_token(tokenizer, &token, &got_token)); \
172172 TEST_ASSERT(got_token, "Expected token"); \
173173 TEST_ASSERT_EQ( \
174174 (int)(expected_type), \
175175 (int)(token.type), \
176176 "Incorrect token type" \
177- ); \
177+ );
178+
179+ #define GET_TOKEN_WITH_DATA (expected_type , data_field , expected_value ) \
180+ GET_TOKEN_NO_DATA(expected_type) \
178181 TEST_ASSERT_EQ( \
179182 expected_value, \
180183 token.data.data_field, \
181184 "Incorrect token value" \
182185 );
183186
184187#define GET_STR_TOKEN_WITH_DATA (expected_type , expected_value ) \
185- TEST_PDF_REQUIRE(postscript_next_token(tokenizer, &token, &got_token)); \
186- TEST_ASSERT(got_token, "Expected token"); \
187- TEST_ASSERT_EQ( \
188- (int)(expected_type), \
189- (int)(token.type), \
190- "Incorrect token type" \
191- ); \
188+ GET_TOKEN_NO_DATA(expected_type) \
192189 TEST_ASSERT_EQ( \
193190 expected_value, \
194191 ps_string_as_cstr(token.data.string, arena), \
@@ -549,4 +546,62 @@ TEST_FUNC(test_postscript_tokenize_imm_name) {
549546 return TEST_RESULT_PASS ;
550547}
551548
549+ TEST_FUNC (test_postscript_tokenize_array ) {
550+ SETUP_TOKENIZER ("[ 123 /abc (xyz) ]" )
551+ GET_TOKEN_NO_DATA (POSTSCRIPT_TOKEN_START_ARRAY )
552+ GET_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_INTEGER , integer , 123 )
553+ GET_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_LIT_NAME , name , "abc ")
554+ GET_STR_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_LIT_STRING , "xyz ")
555+ GET_TOKEN_NO_DATA (POSTSCRIPT_TOKEN_END_ARRAY )
556+ CHECK_STREAM_CONSUMED ()
557+
558+ return TEST_RESULT_PASS ;
559+ }
560+
561+ TEST_FUNC (test_postscript_tokenize_array_minspace ) {
562+ SETUP_TOKENIZER ("[123 /abc (xyz )]")
563+ GET_TOKEN_NO_DATA (POSTSCRIPT_TOKEN_START_ARRAY )
564+ GET_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_INTEGER , integer , 123 )
565+ GET_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_LIT_NAME , name , "abc ")
566+ GET_STR_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_LIT_STRING , "xyz ")
567+ GET_TOKEN_NO_DATA (POSTSCRIPT_TOKEN_END_ARRAY )
568+ CHECK_STREAM_CONSUMED ()
569+
570+ return TEST_RESULT_PASS ;
571+ }
572+
573+ TEST_FUNC (test_postscript_tokenize_proc ) {
574+ SETUP_TOKENIZER ("{add 2 div }")
575+ GET_TOKEN_NO_DATA (POSTSCRIPT_TOKEN_START_PROC )
576+ GET_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_EXE_NAME , name , "add ")
577+ GET_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_INTEGER , integer , 2 )
578+ GET_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_EXE_NAME , name , "div ")
579+ GET_TOKEN_NO_DATA (POSTSCRIPT_TOKEN_END_PROC )
580+ CHECK_STREAM_CONSUMED ()
581+
582+ return TEST_RESULT_PASS ;
583+ }
584+
585+ TEST_FUNC (test_postscript_tokenize_dict ) {
586+ SETUP_TOKENIZER ("<<key1 4 /key2 (value)>>" )
587+ GET_TOKEN_NO_DATA (POSTSCRIPT_TOKEN_START_DICT )
588+ GET_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_EXE_NAME , name , "key1" )
589+ GET_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_INTEGER , integer , 4 )
590+ GET_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_LIT_NAME , name , "key2" )
591+ GET_STR_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_LIT_STRING , "value" )
592+ CHECK_STREAM_CONSUMED ()
593+
594+ return TEST_RESULT_PASS ;
595+ }
596+
597+ TEST_FUNC (test_postscript_comments ) {
598+ SETUP_TOKENIZER (" % This is a comment\ntest (test2)\n3 % test" )
599+ GET_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_EXE_NAME , name , "test" )
600+ GET_STR_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_LIT_STRING , "test2" )
601+ GET_TOKEN_WITH_DATA (POSTSCRIPT_TOKEN_INTEGER , integer , 3 )
602+ CHECK_STREAM_CONSUMED ()
603+
604+ return TEST_RESULT_PASS ;
605+ }
606+
552607#endif // TEST
0 commit comments