diff --git a/testsuite/gsk/meson.build b/testsuite/gsk/meson.build index 97fe7da379..6b74e1c144 100644 --- a/testsuite/gsk/meson.build +++ b/testsuite/gsk/meson.build @@ -18,6 +18,14 @@ compare_render = executable( install_dir: testexecdir ) +node_parser = executable( + 'node-parser', + ['node-parser.c'], + dependencies: libgtk_dep, + install: get_option('install-tests'), + install_dir: testexecdir +) + test('nodes (cairo)', test_render_nodes, args: [ '--tap', '-k' ], env: [ 'GIO_USE_VOLUME_MONITOR=unix', @@ -64,6 +72,26 @@ foreach gl_test : gl_tests suite: 'gsk') endforeach +node_parser_tests = [ + 'crash1', + 'crash2', + 'crash3', +] + +foreach test : node_parser_tests + test('parser ' + test, node_parser, + args: [join_paths(meson.current_source_dir(), 'nodeparser', test + '.node')], + env: [ 'GIO_USE_VOLUME_MONITOR=unix', + 'GSETTINGS_BACKEND=memory', + 'GTK_CSD=1', + 'G_ENABLE_DIAGNOSTIC=0', + 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()), + 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), + 'GSK_RENDERER=opengl' + ], + suite: 'gsk') +endforeach + if have_vulkan test('nodes (vulkan)', test_render_nodes, args: [ '--tap', '-k' ], diff --git a/testsuite/gsk/node-parser.c b/testsuite/gsk/node-parser.c new file mode 100644 index 0000000000..397b13f69f --- /dev/null +++ b/testsuite/gsk/node-parser.c @@ -0,0 +1,30 @@ +#include + +int +main (int argc, char **argv) +{ + GError *error = NULL; + GskRenderNode *node; + GBytes *bytes; + GFile *file; + + g_assert (argc == 2); + + gtk_init (); + + file = g_file_new_for_commandline_arg (argv[1]); + bytes = g_file_load_bytes (file, NULL, NULL, &error); + g_assert_no_error (error); + g_assert (bytes != NULL); + + node = gsk_render_node_deserialize (bytes, &error); + if (error) + g_test_message ("Error: %s\n", error->message); + + g_clear_error (&error); + g_clear_pointer (&node, gsk_render_node_unref); + g_bytes_unref (bytes); + g_object_unref (file); + + return 0; +} diff --git a/testsuite/gsk/nodeparser/crash1.node b/testsuite/gsk/nodeparser/crash1.node new file mode 100644 index 0000000000..bba912ef7b --- /dev/null +++ b/testsuite/gsk/nodeparser/crash1.node @@ -0,0 +1,2 @@ +opacity { + child = color { diff --git a/testsuite/gsk/nodeparser/crash2.node b/testsuite/gsk/nodeparser/crash2.node new file mode 100644 index 0000000000..677e9f2ea3 --- /dev/null +++ b/testsuite/gsk/nodeparser/crash2.node @@ -0,0 +1,3 @@ +cross-fade { + from: color { + co diff --git a/testsuite/gsk/nodeparser/crash3.node b/testsuite/gsk/nodeparser/crash3.node new file mode 100644 index 0000000000..3d89f88386 --- /dev/null +++ b/testsuite/gsk/nodeparser/crash3.node @@ -0,0 +1,18 @@ +cross-fade { + start: container { + color { + color: red; + bounds: 0 0 10 10; + } + color { + color: green; + bounds: 10 10 10 10; + } + } + end: color { + color: blue; + bounds: 5 5 10 10; + } + progress: 0.2; +} +