summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@gnome.org>2023-04-21 19:44:57 -0600
committerFederico Mena Quintero <federico@gnome.org>2023-04-21 19:44:57 -0600
commit14ce5708f6a6dd9b211b32a5d3471f9bf41c9fda (patch)
tree69ac78055760dd637e88f99e20331b1509e21f96
parent5685ec2b571da399fbf5d89ac893a01f1c1a212c (diff)
downloadlibrsvg-14ce5708f6a6dd9b211b32a5d3471f9bf41c9fda.tar.gz
Use helper functions and call them from the macros for test references
Avoids generating lots of duplicated code in tests. Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/822>
-rw-r--r--rsvg/src/test_utils/reference_utils.rs164
-rw-r--r--rsvg/tests/reference.rs2
-rw-r--r--rsvg/tests/text.rs3
3 files changed, 94 insertions, 75 deletions
diff --git a/rsvg/src/test_utils/reference_utils.rs b/rsvg/src/test_utils/reference_utils.rs
index 0332012c..04e12009 100644
--- a/rsvg/src/test_utils/reference_utils.rs
+++ b/rsvg/src/test_utils/reference_utils.rs
@@ -13,8 +13,11 @@ use std::path::{Path, PathBuf};
use std::sync::Once;
use crate::surface_utils::shared_surface::{SharedImageSurface, SurfaceType};
+use crate::test_utils::{render_document, setup_font_map, SurfaceSize};
+use crate::{CairoRenderer, Loader};
use super::compare_surfaces::{compare_surfaces, BufferDiff, Diff};
+use super::load_svg;
pub struct Reference(SharedImageSurface);
@@ -191,35 +194,49 @@ macro_rules! test_compare_render_output {
($test_name:ident, $width:expr, $height:expr, $test:expr, $reference:expr $(,)?) => {
#[test]
fn $test_name() {
- $crate::test_utils::setup_font_map();
-
- let sx: i32 = $width;
- let sy: i32 = $height;
- let svg = load_svg($test).unwrap();
- let output_surf = render_document(
- &svg,
- SurfaceSize(sx, sy),
- |_| (),
- cairo::Rectangle::new(0.0, 0.0, f64::from(sx), f64::from(sy)),
- )
- .unwrap();
-
- let reference = load_svg($reference).unwrap();
- let reference_surf = render_document(
- &reference,
- SurfaceSize(sx, sy),
- |_| (),
- cairo::Rectangle::new(0.0, 0.0, f64::from(sx), f64::from(sy)),
- )
- .unwrap();
-
- Reference::from_surface(reference_surf.into_image_surface().unwrap())
- .compare(&output_surf)
- .evaluate(&output_surf, stringify!($test_name));
+ $crate::test_utils::reference_utils::compare_render_output(
+ stringify!($test_name),
+ $width,
+ $height,
+ $test,
+ $reference,
+ );
}
};
}
+pub fn compare_render_output(
+ test_name: &str,
+ width: i32,
+ height: i32,
+ test: &'static [u8],
+ reference: &'static [u8],
+) {
+ setup_font_map();
+
+ let svg = load_svg(test).unwrap();
+ let output_surf = render_document(
+ &svg,
+ SurfaceSize(width, height),
+ |_| (),
+ cairo::Rectangle::new(0.0, 0.0, f64::from(width), f64::from(height)),
+ )
+ .unwrap();
+
+ let reference = load_svg(reference).unwrap();
+ let reference_surf = render_document(
+ &reference,
+ SurfaceSize(width, height),
+ |_| (),
+ cairo::Rectangle::new(0.0, 0.0, f64::from(width), f64::from(height)),
+ )
+ .unwrap();
+
+ Reference::from_surface(reference_surf.into_image_surface().unwrap())
+ .compare(&output_surf)
+ .evaluate(&output_surf, test_name);
+}
+
/// Render two SVG files and compare them.
///
/// This is used to implement reference tests, or reftests. Use it like this:
@@ -236,54 +253,57 @@ macro_rules! test_svg_reference {
($test_name:ident, $test_filename:expr, $reference_filename:expr) => {
#[test]
fn $test_name() {
- use cairo;
- use rsvg::{CairoRenderer, Loader};
- use $crate::test_utils::reference_utils::{Compare, Evaluate, Reference};
- use $crate::test_utils::{render_document, setup_font_map, SurfaceSize};
-
- setup_font_map();
-
- let svg = Loader::new()
- .read_path($test_filename)
- .expect("reading SVG test file");
- let reference = Loader::new()
- .read_path($reference_filename)
- .expect("reading reference file");
-
- let svg_renderer = CairoRenderer::new(&svg);
- let ref_renderer = CairoRenderer::new(&reference);
-
- let svg_dim = svg_renderer.intrinsic_dimensions();
- let ref_dim = ref_renderer.intrinsic_dimensions();
-
- assert_eq!(
- svg_dim, ref_dim,
- "sizes of SVG document and reference file are different"
+ $crate::test_utils::reference_utils::svg_reference_test(
+ stringify!($test_name),
+ $test_filename,
+ $reference_filename,
);
-
- let pixels = svg_renderer
- .intrinsic_size_in_pixels()
- .unwrap_or((100.0, 100.0));
-
- let output_surf = render_document(
- &svg,
- SurfaceSize(pixels.0.ceil() as i32, pixels.1.ceil() as i32),
- |_| (),
- cairo::Rectangle::new(0.0, 0.0, pixels.0, pixels.1),
- )
- .unwrap();
-
- let reference_surf = render_document(
- &reference,
- SurfaceSize(pixels.0.ceil() as i32, pixels.1.ceil() as i32),
- |_| (),
- cairo::Rectangle::new(0.0, 0.0, pixels.0, pixels.1),
- )
- .unwrap();
-
- Reference::from_surface(reference_surf.into_image_surface().unwrap())
- .compare(&output_surf)
- .evaluate(&output_surf, stringify!($test_name));
}
};
}
+
+pub fn svg_reference_test(test_name: &str, test_filename: &str, reference_filename: &str) {
+ setup_font_map();
+
+ let svg = Loader::new()
+ .read_path(test_filename)
+ .expect("reading SVG test file");
+ let reference = Loader::new()
+ .read_path(reference_filename)
+ .expect("reading reference file");
+
+ let svg_renderer = CairoRenderer::new(&svg);
+ let ref_renderer = CairoRenderer::new(&reference);
+
+ let svg_dim = svg_renderer.intrinsic_dimensions();
+ let ref_dim = ref_renderer.intrinsic_dimensions();
+
+ assert_eq!(
+ svg_dim, ref_dim,
+ "sizes of SVG document and reference file are different"
+ );
+
+ let pixels = svg_renderer
+ .intrinsic_size_in_pixels()
+ .unwrap_or((100.0, 100.0));
+
+ let output_surf = render_document(
+ &svg,
+ SurfaceSize(pixels.0.ceil() as i32, pixels.1.ceil() as i32),
+ |_| (),
+ cairo::Rectangle::new(0.0, 0.0, pixels.0, pixels.1),
+ )
+ .unwrap();
+
+ let reference_surf = render_document(
+ &reference,
+ SurfaceSize(pixels.0.ceil() as i32, pixels.1.ceil() as i32),
+ |_| (),
+ cairo::Rectangle::new(0.0, 0.0, pixels.0, pixels.1),
+ )
+ .unwrap();
+
+ Reference::from_surface(reference_surf.into_image_surface().unwrap())
+ .compare(&output_surf)
+ .evaluate(&output_surf, test_name);
+}
diff --git a/rsvg/tests/reference.rs b/rsvg/tests/reference.rs
index 37eed1b1..f2824994 100644
--- a/rsvg/tests/reference.rs
+++ b/rsvg/tests/reference.rs
@@ -13,7 +13,7 @@ use rsvg::{
};
use rsvg::test_utils::reference_utils::{Compare, Evaluate, Reference};
-use rsvg::test_utils::{load_svg, render_document, setup_font_map, setup_language, SurfaceSize};
+use rsvg::test_utils::{setup_font_map, setup_language};
use rsvg::{test_compare_render_output, test_svg_reference};
use std::path::{Path, PathBuf};
diff --git a/rsvg/tests/text.rs b/rsvg/tests/text.rs
index 05c3de3e..1e1c0234 100644
--- a/rsvg/tests/text.rs
+++ b/rsvg/tests/text.rs
@@ -2,8 +2,7 @@ use cairo;
use float_cmp::approx_eq;
use rsvg::{CairoRenderer, Loader};
-use rsvg::test_utils::reference_utils::{Compare, Evaluate, Reference};
-use rsvg::test_utils::{load_svg, render_document, setup_font_map, SurfaceSize};
+use rsvg::test_utils::setup_font_map;
use rsvg::{test_compare_render_output, test_svg_reference};
// From https://www.w3.org/Style/CSS/Test/Fonts/Ahem/