[librsvg: 64/90] librsvg_crate/tests/primitives.rs - New tests for drawing primitives



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]