diff --git a/package/c/hmpl/test/test.c b/package/c/hmpl/test/test.c index 367ab9e..cbcedc1 100644 --- a/package/c/hmpl/test/test.c +++ b/package/c/hmpl/test/test.c @@ -4,6 +4,93 @@ #include "hmpl.h" #include "hectic.h" +#define TEST_DATA_INTERPOLATION_CONTEXT \ + "{\n" \ + " \"persona\": {\n" \ + " \"name\": \"John\",\n" \ + " \"surname\": \"Doe\",\n" \ + " \"address\": {\n" \ + " \"home\": {\n" \ + " \"street\": \"123 Main St\",\n" \ + " \"city\": \"Springfield\",\n" \ + " \"zip\": \"12345\"\n" \ + " },\n" \ + " \"work\": {\n" \ + " \"street\": \"456 Business Rd\",\n" \ + " \"city\": \"Metropolis\",\n" \ + " \"zip\": \"67890\"\n" \ + " }\n" \ + " },\n" \ + " \"contact\": {\n" \ + " \"email\": \"john@example.com\",\n" \ + " \"phone\": {\n" \ + " \"home\": \"555-1234\",\n" \ + " \"mobile\": \"555-5678\"\n" \ + " }\n" \ + " }\n" \ + " }\n" \ + "}" + +#define TEST_DATA_INTERPOLATION_TEMPLATE \ + "Hello {{persona.name}} {{persona.surname}},\n" \ + "\n" \ + "Your home address:\n" \ + "{{persona.address.home.street}},\n" \ + "{{persona.address.home.city}},\n" \ + "{{persona.address.home.zip}}\n" \ + "\n" \ + "Your work address:\n" \ + "{{persona.address.work.street}},\n" \ + "{{persona.address.work.city}},\n" \ + "{{persona.address.work.zip}}\n" \ + "\n" \ + "Contact information:\n" \ + "Email: {{persona.contact.email}}\n" \ + "Home Phone: {{persona.contact.phone.home}}\n" \ + "Mobile Phone: {{persona.contact.phone.mobile}}\n" + +#define TEST_DATA_INTERPOLATION_RESULT \ + "Hello John Doe,\n" \ + "\n" \ + "Your home address:\n" \ + "123 Main St,\n" \ + "Springfield,\n" \ + "12345\n" \ + "\n" \ + "Your work address:\n" \ + "456 Business Rd,\n" \ + "Metropolis,\n" \ + "67890\n" \ + "\n" \ + "Contact information:\n" \ + "Email: john@example.com\n" \ + "Home Phone: 555-1234\n" \ + "Mobile Phone: 555-5678\n" + +#define TEST_DATA_INTERPOLATION_WITH_PREFIX_CONTEXT \ + TEST_DATA_INTERPOLATION_CONTEXT + +#define TEST_DATA_INTERPOLATION_WITH_PREFIX_TEMPLATE \ + "Hello {{.persona.name}} {{.persona.surname}},\n" \ + "\n" \ + "Your home address:\n" \ + "{{.persona.address.home.street}},\n" \ + "{{.persona.address.home.city}},\n" \ + "{{.persona.address.home.zip}}\n" \ + "\n" \ + "Your work address:\n" \ + "{{.persona.address.work.street}},\n" \ + "{{.persona.address.work.city}},\n" \ + "{{.persona.address.work.zip}}\n" \ + "\n" \ + "Contact information:\n" \ + "Email: {{.persona.contact.email}}\n" \ + "Home Phone: {{.persona.contact.phone.home}}\n" \ + "Mobile Phone: {{.persona.contact.phone.mobile}}\n" + +#define TEST_DATA_INTERPOLATION_WITH_PREFIX_RESULT \ + TEST_DATA_INTERPOLATION_RESULT + void test_eval_single_level_key(Arena *arena) { char *context_text = arena_strdup(arena, "{\"name\": \"world\"}"); Json *context = json_parse(arena, &context_text); @@ -25,73 +112,26 @@ void test_eval_nested_key(Arena *arena) { } void test_render_interpolation_tags(Arena *arena) { - char *context_text = arena_strdup(arena, - "{\n" - " \"persona\": {\n" - " \"name\": \"John\",\n" - " \"surname\": \"Doe\",\n" - " \"address\": {\n" - " \"home\": {\n" - " \"street\": \"123 Main St\",\n" - " \"city\": \"Springfield\",\n" - " \"zip\": \"12345\"\n" - " },\n" - " \"work\": {\n" - " \"street\": \"456 Business Rd\",\n" - " \"city\": \"Metropolis\",\n" - " \"zip\": \"67890\"\n" - " }\n" - " },\n" - " \"contact\": {\n" - " \"email\": \"john@example.com\",\n" - " \"phone\": {\n" - " \"home\": \"555-1234\",\n" - " \"mobile\": \"555-5678\"\n" - " }\n" - " }\n" - " }\n" - "}"); + char *context_text = arena_strdup(arena, TEST_DATA_INTERPOLATION_CONTEXT); Json *context = json_parse(arena, &context_text); if (!context) { raise_exception("Malformed json"); exit(1); } - char *text = arena_strdup(arena, - "Hello {{persona.name}} {{persona.surname}},\n" - "\n" - "Your home address:\n" - "{{persona.address.home.street}},\n" - "{{persona.address.home.city}},\n" - "{{persona.address.home.zip}}\n" - "\n" - "Your work address:\n" - "{{persona.address.work.street}},\n" - "{{persona.address.work.city}},\n" - "{{persona.address.work.zip}}\n" - "\n" - "Contact information:\n" - "Email: {{persona.contact.email}}\n" - "Home Phone: {{persona.contact.phone.home}}\n" - "Mobile Phone: {{persona.contact.phone.mobile}}\n"); + char *text = arena_strdup(arena, TEST_DATA_INTERPOLATION_TEMPLATE); - hmpl_render_with_arena(arena, &text, context); - assert(strcmp(text, - "Hello John Doe,\n" - "\n" - "Your home address:\n" - "123 Main St,\n" - "Springfield,\n" - "12345\n" - "\n" - "Your work address:\n" - "456 Business Rd,\n" - "Metropolis,\n" - "67890\n" - "\n" - "Contact information:\n" - "Email: john@example.com\n" - "Home Phone: 555-1234\n" - "Mobile Phone: 555-5678\n") == 0); + hmpl_render_interpolation_tags(arena, &text, context, ""); + assert(strcmp(text, TEST_DATA_INTERPOLATION_RESULT) == 0); } +void test_render_interpolation_tags_with_prefix(Arena *arena) { + char *context_text = arena_strdup(arena, TEST_DATA_INTERPOLATION_WITH_PREFIX_CONTEXT); + Json *context = json_parse(arena, &context_text); + if (!context) { raise_exception("Malformed json"); exit(1); } + + char *text = arena_strdup(arena, TEST_DATA_INTERPOLATION_WITH_PREFIX_TEMPLATE); + + hmpl_render_interpolation_tags(arena, &text, context, "."); + assert(strcmp(text, TEST_DATA_INTERPOLATION_WITH_PREFIX_RESULT) == 0); +} int main(void) { Arena arena = arena_init(1024 * 1024); @@ -99,6 +139,7 @@ int main(void) { test_eval_single_level_key(&arena); test_eval_nested_key(&arena); test_render_interpolation_tags(&arena); + test_render_interpolation_tags_with_prefix(&arena); printf("All tests passed.\n");