diff options
author | Thomas White <taw@bitwiz.me.uk> | 2018-10-17 10:18:44 +0200 |
---|---|---|
committer | Thomas White <taw@bitwiz.me.uk> | 2018-10-17 10:18:44 +0200 |
commit | 28bc23c38f2d8f88667671b5b78a79f22e56e6b0 (patch) | |
tree | 5bfcb2f250f86a04e5bef6d40581c779bb46dab2 | |
parent | 791ee4e65f3ec7ef470302e4381baefb431fb56d (diff) |
Add JSON stylesheet test
-rw-r--r-- | meson.build | 1 | ||||
-rw-r--r-- | test.ss | 18 | ||||
-rw-r--r-- | tests/json_test.c | 102 | ||||
-rw-r--r-- | tests/meson.build | 4 |
4 files changed, 125 insertions, 0 deletions
diff --git a/meson.build b/meson.build index a2e3fb2..9fda400 100644 --- a/meson.build +++ b/meson.build @@ -19,6 +19,7 @@ subdir('po') # Dependencies gtkdep = dependency('gtk+-3.0') +jsondep = dependency('json-glib-1.0') cc = meson.get_compiler('c') mdep = cc.find_library('m', required : false) @@ -0,0 +1,18 @@ +{ + "narrative": { + "font": "Cantarell Regular 14", + "fgcol": "#000000" + }, + + "slide": { + "bggrad": null, + "bgcol1": "#ffffff", + "frame": { + "font": "Cantarell Regular 14", + "bggrad": "vertical", + "bgcol1": "#000099", + "bgcol2": "#000000" + } + } +} + diff --git a/tests/json_test.c b/tests/json_test.c new file mode 100644 index 0000000..96323cb --- /dev/null +++ b/tests/json_test.c @@ -0,0 +1,102 @@ +/* + * storycode_test.c + * + * Colloquium - A tiny presentation program + * + * Copyright (c) 2012 Thomas White <taw@bitwiz.org.uk> + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <json-glib/json-glib.h> + +#include "../src/sc_parse.h" + +typedef struct { + JsonNode *root; +} Stylesheet; + + +Stylesheet *stylesheet_load(const char *filename) +{ + JsonParser *parser; + gboolean r; + GError *err = NULL; + Stylesheet *ss; + + ss = calloc(1, sizeof(Stylesheet)); + if ( ss == NULL ) return NULL; + + parser = json_parser_new(); + + r = json_parser_load_from_file(parser, filename, &err); + if ( r == FALSE ) { + fprintf(stderr, "Failed to load style sheet: '%s'\n", err->message); + return NULL; + } + + ss->root = json_parser_steal_root(parser); + g_object_unref(parser); + + return ss; +} + + +char *stylesheet_lookup(Stylesheet *ss, const char *path) +{ + JsonNode *node; + JsonArray *array; + GError *err = NULL; + char *ret; + const gchar *v; + + node = json_path_query(path, ss->root, &err); + array = json_node_get_array(node); + + v = json_array_get_string_element(array, 0); + if ( v == NULL ) return NULL; + + ret = strdup(v); + json_node_unref(node); + return ret; +} + + +int main(int argc, char *argv[]) +{ + SCBlock *bl; + Stylesheet *ss; + + ss = stylesheet_load("test.ss"); + printf("Frame background: '%s'\n", stylesheet_lookup(ss, "$.slide.frame.bgcol1")); + + bl = sc_parse("\\wibble{}\\f{wibble \\bg[muhu]{wobble\nwibble\nwabble}}\\frib[\\f] f"); + if ( bl == NULL ) { + printf("Failed to parse SC\n"); + return 1; + } + + show_sc_blocks(bl); + + return 0; +} diff --git a/tests/meson.build b/tests/meson.build index 427faae..c919e35 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -13,3 +13,7 @@ test('Simple rendering', e) e = executable('render_test_sc1', 'render_test_sc1.c', basic_rendering, dependencies : [gtkdep, mdep]) test('Simple StoryCode rendering', e) + +e = executable('json_test', 'json_test.c', '../src/sc_parse.c', + dependencies : [mdep, jsondep]) +test('JSON parsing', e) |