/* This file is part of TALER Copyright (C) 2014-2020 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. TALER is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with TALER; see the file COPYING. If not, see */ /** * @file mustac/test_mustach_jansson.c * @brief testcase to test the mustach/jansson integration * @author Florian Dold */ #include "platform.h" #include "mustach-jansson.h" void assert_template (const char *template, json_t *root, const char *expected) { char *r; size_t sz; GNUNET_assert (0 == mustach_jansson (template, root, &r, &sz)); GNUNET_assert (0 == strcmp (r, expected)); GNUNET_free (r); } int main (int argc, char *const *argv) { json_t *root = json_object (); json_t *arr = json_array (); json_t *obj = json_object(); json_t *contract; /* test 1 */ char *t1 = "hello world"; char *x1 = "hello world"; /* test 2 */ char *t2 = "hello {{ v1 }}"; char *x2 = "hello world"; /* test 3 */ char *t3 = "hello {{ v3.x }}"; char *x3 = "hello baz"; /* test 4 */ char *t4 = "hello {{# v2 }}{{ . }}{{/ v2 }}"; char *x4 = "hello foobar"; /* test 5 */ char *t5 = "hello {{# v3 }}{{ y }}/{{ x }}{{ z }}{{/ v3 }}"; char *x5 = "hello quux/baz"; /* test 6 */ char *t6 = "hello {{ v2!stringify }}"; char *x6 = "hello [\n \"foo\",\n \"bar\"\n]"; /* test 7 */ char *t7 = "amount: {{ amt!amount_decimal }} {{ amt!amount_currency }}"; char *x7 = "amount: 123.00 EUR"; /* test 8 */ char *t8 = "{{^ v4 }}fallback{{/ v4 }}"; char *x8 = "fallback"; /* contract test 8 (contract) */ char *tc = "summary: {{ summary!i18n }}"; char *xc_en = "summary: ENGLISH"; char *xc_de = "summary: DEUTSCH"; char *xc_fr = "summary: FRANCAISE"; json_object_set_new (root, "v1", json_string ("world")); json_object_set_new (root, "v4", json_array ()); json_array_append_new (arr, json_string ("foo")); json_array_append_new (arr, json_string ("bar")); json_object_set_new (root, "v2", arr); json_object_set_new (root, "v3", obj); json_object_set_new (root, "amt", json_string("EUR:123.00")); json_object_set_new (obj, "x", json_string ("baz")); json_object_set_new (obj, "y", json_string ("quux")); contract = json_pack("{ s:s, s:{s:s, s:s}}", "summary", "ENGLISH", "summary_i18n", "de", "DEUTSCH", "fr", "FRANCAISE"); GNUNET_assert (NULL != contract); assert_template (t1, root, x1); assert_template (t2, root, x2); assert_template (t3, root, x3); assert_template (t4, root, x4); assert_template (t5, root, x5); assert_template (t6, root, x6); assert_template (t7, root, x7); assert_template (t8, root, x8); assert_template (tc, contract, xc_en); json_object_set_new (contract, "$language", json_string ("de")); assert_template (tc, contract, xc_de); json_object_set_new (contract, "$language", json_string ("fr")); assert_template (tc, contract, xc_fr); json_object_set_new (contract, "$language", json_string ("it")); assert_template (tc, contract, xc_en); json_decref (root); json_decref (contract); return 0; }