Skip to content

Commit bd88bc2

Browse files
committed
Remaining postscript tests
1 parent e851a04 commit bd88bc2

1 file changed

Lines changed: 64 additions & 9 deletions

File tree

libs/postscript/src/tokenizer.c

Lines changed: 64 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)