test(hmpl): render interpolation tags with prefix
This commit is contained in:
@@ -4,6 +4,93 @@
|
|||||||
#include "hmpl.h"
|
#include "hmpl.h"
|
||||||
#include "hectic.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) {
|
void test_eval_single_level_key(Arena *arena) {
|
||||||
char *context_text = arena_strdup(arena, "{\"name\": \"world\"}");
|
char *context_text = arena_strdup(arena, "{\"name\": \"world\"}");
|
||||||
Json *context = json_parse(arena, &context_text);
|
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) {
|
void test_render_interpolation_tags(Arena *arena) {
|
||||||
char *context_text = arena_strdup(arena,
|
char *context_text = arena_strdup(arena, 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"
|
|
||||||
"}");
|
|
||||||
Json *context = json_parse(arena, &context_text);
|
Json *context = json_parse(arena, &context_text);
|
||||||
if (!context) { raise_exception("Malformed json"); exit(1); }
|
if (!context) { raise_exception("Malformed json"); exit(1); }
|
||||||
|
|
||||||
char *text = arena_strdup(arena,
|
char *text = arena_strdup(arena, 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");
|
|
||||||
|
|
||||||
hmpl_render_with_arena(arena, &text, context);
|
hmpl_render_interpolation_tags(arena, &text, context, "");
|
||||||
assert(strcmp(text,
|
assert(strcmp(text, TEST_DATA_INTERPOLATION_RESULT) == 0);
|
||||||
"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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) {
|
int main(void) {
|
||||||
Arena arena = arena_init(1024 * 1024);
|
Arena arena = arena_init(1024 * 1024);
|
||||||
@@ -99,6 +139,7 @@ int main(void) {
|
|||||||
test_eval_single_level_key(&arena);
|
test_eval_single_level_key(&arena);
|
||||||
test_eval_nested_key(&arena);
|
test_eval_nested_key(&arena);
|
||||||
test_render_interpolation_tags(&arena);
|
test_render_interpolation_tags(&arena);
|
||||||
|
test_render_interpolation_tags_with_prefix(&arena);
|
||||||
|
|
||||||
printf("All tests passed.\n");
|
printf("All tests passed.\n");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user