[librsvg: 64/90] librsvg_crate/tests/primitives.rs - New tests for drawing primitives
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 64/90] librsvg_crate/tests/primitives.rs - New tests for drawing primitives
- Date: Tue, 26 Mar 2019 19:17:27 +0000 (UTC)
commit 54fc9266a0e275e4e637efe7787866e517a020e9
Author: Federico Mena Quintero <federico gnome org>
Date: Wed Mar 20 18:40:04 2019 -0600
librsvg_crate/tests/primitives.rs - New tests for drawing primitives
We'll start testing opacity and viewports with offsets there
Makefile.am | 1 +
librsvg_crate/tests/primitives.rs | 53 +++++++++++++++++++++++++++++++++++++++
librsvg_crate/tests/utils/mod.rs | 31 +++++++++++++++++++++++
3 files changed, 85 insertions(+)
---
diff --git a/Makefile.am b/Makefile.am
index b083ff5a..06396c41 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -120,6 +120,7 @@ LIBRSVG_CRATE_SOURCES = \
librsvg_crate/src/lib.rs \
librsvg_crate/tests/intrinsic_dimensions.rs \
librsvg_crate/tests/render_to_viewport.rs \
+ librsvg_crate/tests/primitives.rs \
librsvg_crate/tests/utils/mod.rs \
librsvg_crate/tests/utils/compare_surfaces.rs \
$(wildcard librsvg_crate/tests/fixtures/*)
diff --git a/librsvg_crate/tests/primitives.rs b/librsvg_crate/tests/primitives.rs
new file mode 100644
index 00000000..5d1cdd1f
--- /dev/null
+++ b/librsvg_crate/tests/primitives.rs
@@ -0,0 +1,53 @@
+use cairo;
+use gio;
+use glib;
+use librsvg;
+use rsvg_internals;
+
+mod utils;
+
+use rsvg_internals::surface_utils::shared_surface::{SharedImageSurface, SurfaceType};
+
+use self::utils::{load_svg, render_to_viewport, compare_to_surface, SurfaceSize};
+
+#[test]
+fn simple_opacity_with_transform() {
+ let svg = load_svg(
+ br#"<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
+ <g opacity="0.5">
+ <rect x="10" y="10" width="30" height="30" fill="blue"/>
+ </g>
+</svg>
+"#,
+ );
+
+ let output_surf = render_to_viewport(
+ &svg,
+ SurfaceSize(150, 150),
+ |cr| cr.translate(50.0, 50.0),
+ cairo::Rectangle {
+ x: 0.0,
+ y: 0.0,
+ width: 50.0,
+ height: 50.0,
+ },
+ )
+ .unwrap();
+
+ let reference_surf = cairo::ImageSurface::create(cairo::Format::ARgb32, 150, 150).unwrap();
+
+ {
+ let cr = cairo::Context::new(&reference_surf);
+
+ cr.translate(50.0, 50.0);
+ cr.rectangle(10.0, 10.0, 30.0, 30.0);
+ cr.set_source_rgba(0.0, 0.0, 1.0, 0.5);
+ cr.fill();
+ }
+
+ let reference_surf = SharedImageSurface::new(reference_surf, SurfaceType::SRgb).unwrap();
+
+ compare_to_surface(&output_surf, &reference_surf, "simple_opacity");
+ compare_to_surface(&output_surf, &reference_surf, "simple_opacity_with_transform");
+}
diff --git a/librsvg_crate/tests/utils/mod.rs b/librsvg_crate/tests/utils/mod.rs
index e33abd14..7d9cc7fb 100644
--- a/librsvg_crate/tests/utils/mod.rs
+++ b/librsvg_crate/tests/utils/mod.rs
@@ -99,3 +99,34 @@ pub fn compare_to_file(
}
}
}
+
+pub fn compare_to_surface(
+ output_surf: &SharedImageSurface,
+ reference_surf: &SharedImageSurface,
+ output_base_name: &str,
+) {
+ let output_path = output_dir().join(&format!("{}-out.png", output_base_name));
+
+ let mut output_file = File::create(output_path).unwrap();
+ output_surf
+ .clone()
+ .into_image_surface()
+ .unwrap()
+ .write_to_png(&mut output_file)
+ .unwrap();
+
+ let diff = compare_surfaces(output_surf, reference_surf).unwrap();
+
+ match diff {
+ BufferDiff::DifferentSizes => unreachable!("surfaces should be of the same size"),
+
+ BufferDiff::Diff(diff) => {
+ let surf = diff.surface.into_image_surface().unwrap();
+ let diff_path = output_dir().join(&format!("{}-diff.png", output_base_name));
+ let mut output_file = File::create(diff_path).unwrap();
+ surf.write_to_png(&mut output_file).unwrap();
+
+ assert_eq!(diff.num_pixels_changed, 0);
+ }
+ }
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]