From 28bc23c38f2d8f88667671b5b78a79f22e56e6b0 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 17 Oct 2018 10:18:44 +0200 Subject: Add JSON stylesheet test --- meson.build | 1 + test.ss | 18 ++++++++++ tests/json_test.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/meson.build | 4 +++ 4 files changed, 125 insertions(+) create mode 100644 test.ss create mode 100644 tests/json_test.c 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) diff --git a/test.ss b/test.ss new file mode 100644 index 0000000..2dd2b40 --- /dev/null +++ b/test.ss @@ -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 + * + * 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 . + * + */ + + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#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) -- cgit v1.2.3