diff options
author | Federico Mena Quintero <federico@gnome.org> | 2022-08-05 20:16:06 -0500 |
---|---|---|
committer | Marge Bot <marge-bot@gnome.org> | 2022-08-09 18:46:17 +0000 |
commit | df2dfd7fb22861c9107ff2c6110255059881a6ea (patch) | |
tree | b1f77ac7b58cecace67987639e8626b8d7a4d1bc /tests | |
parent | 3220a37708c617264a3dbcdab231f9ecabae6d42 (diff) | |
download | librsvg-df2dfd7fb22861c9107ff2c6110255059881a6ea.tar.gz |
Add missing test for rsvg_handle_set_stylesheet()
Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/727>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/api.c | 52 | ||||
-rw-r--r-- | tests/fixtures/api/stylesheet-ref.svg | 4 | ||||
-rw-r--r-- | tests/fixtures/api/stylesheet.svg | 5 |
3 files changed, 61 insertions, 0 deletions
diff --git a/tests/api.c b/tests/api.c index 3321803d..746d052d 100644 --- a/tests/api.c +++ b/tests/api.c @@ -1036,6 +1036,57 @@ get_intrinsic_size_in_pixels_no (void) } static void +set_stylesheet (void) +{ + char *filename = get_test_filename ("stylesheet.svg"); + char *ref_filename = get_test_filename ("stylesheet-ref.svg"); + const char *css = "rect { fill: #00ff00; }"; + GError *error = NULL; + + RsvgHandle *handle = rsvg_handle_new_from_file (filename, &error); + g_assert_no_error (error); + + RsvgHandle *ref_handle = rsvg_handle_new_from_file (ref_filename, &error); + g_assert_no_error (error); + + cairo_surface_t *output = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 100, 100); + cairo_surface_t *reference = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 100, 100); + + RsvgRectangle viewport = { 0.0, 0.0, 100.0, 100.0 }; + + cairo_t *output_cr = cairo_create (output); + cairo_t *ref_cr = cairo_create (reference); + + g_assert (rsvg_handle_set_stylesheet (handle, (const guint8 *) css, strlen (css), &error)); + g_assert_no_error (error); + + g_assert (rsvg_handle_render_document (handle, output_cr, &viewport, &error)); + g_assert_no_error (error); + + g_assert (rsvg_handle_render_document (ref_handle, ref_cr, &viewport, &error)); + g_assert_no_error (error); + + cairo_surface_t *diff = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 100, 100); + + TestUtilsBufferDiffResult result = {0, 0}; + test_utils_compare_surfaces (output, reference, diff, &result); + + if (result.pixels_changed && result.max_diff > 0) { + g_test_fail (); + } + + cairo_surface_destroy (diff); + cairo_destroy (ref_cr); + cairo_destroy (output_cr); + cairo_surface_destroy (reference); + cairo_surface_destroy (output); + g_object_unref (ref_handle); + g_object_unref (handle); + g_free (ref_filename); + g_free (filename); +} + +static void render_document (void) { char *filename = get_test_filename ("document.svg"); @@ -1693,6 +1744,7 @@ add_api_tests (void) g_test_add_func ("/api/get_intrinsic_dimensions", get_intrinsic_dimensions); g_test_add_func ("/api/get_intrinsic_size_in_pixels/yes", get_intrinsic_size_in_pixels_yes); g_test_add_func ("/api/get_intrinsic_size_in_pixels/no", get_intrinsic_size_in_pixels_no); + g_test_add_func ("/api/set_stylesheet", set_stylesheet); g_test_add_func ("/api/render_document", render_document); g_test_add_func ("/api/get_geometry_for_layer", get_geometry_for_layer); g_test_add_func ("/api/render_layer", render_layer); diff --git a/tests/fixtures/api/stylesheet-ref.svg b/tests/fixtures/api/stylesheet-ref.svg new file mode 100644 index 00000000..5f54672d --- /dev/null +++ b/tests/fixtures/api/stylesheet-ref.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"> + <rect id="foo" x="10" y="20" width="30" height="40" fill="#00ff00"/> +</svg> diff --git a/tests/fixtures/api/stylesheet.svg b/tests/fixtures/api/stylesheet.svg new file mode 100644 index 00000000..118ff2fb --- /dev/null +++ b/tests/fixtures/api/stylesheet.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- This gets styled with stylesheet.css --> +<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100"> + <rect id="foo" x="10" y="20" width="30" height="40" fill="black"/> +</svg> |