[librsvg: 62/90] Make a librsvg_crate/tests/utils module



commit 1bc5d3429110af48ac1530b513cec37b8cd4c6e9
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Mar 20 18:20:00 2019 -0600

    Make a librsvg_crate/tests/utils module
    
    Move the loading/comparison functions there.

 Makefile.am                                        |  6 +-
 ...insic-dimensions.rs => intrinsic_dimensions.rs} | 14 +---
 librsvg_crate/tests/render_to_viewport.rs          | 84 +------------------
 .../tests/{ => utils}/compare_surfaces.rs          |  0
 librsvg_crate/tests/utils/mod.rs                   | 97 ++++++++++++++++++++++
 5 files changed, 107 insertions(+), 94 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index 271c9277..b083ff5a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -118,7 +118,11 @@ LIBRSVG_CRATE_SOURCES =                                    \
        librsvg_crate/build.rs                                  \
        librsvg_crate/examples/proportional.rs                  \
        librsvg_crate/src/lib.rs                                \
-       librsvg_crate/tests/intrinsic-dimensions.rs
+       librsvg_crate/tests/intrinsic_dimensions.rs             \
+       librsvg_crate/tests/render_to_viewport.rs               \
+       librsvg_crate/tests/utils/mod.rs                        \
+       librsvg_crate/tests/utils/compare_surfaces.rs           \
+       $(wildcard librsvg_crate/tests/fixtures/*)
 
 RUST_EXTRA =                                           \
        Cargo.lock                                      \
diff --git a/librsvg_crate/tests/intrinsic-dimensions.rs b/librsvg_crate/tests/intrinsic_dimensions.rs
similarity index 93%
rename from librsvg_crate/tests/intrinsic-dimensions.rs
rename to librsvg_crate/tests/intrinsic_dimensions.rs
index f1f17ee3..3b969ca6 100644
--- a/librsvg_crate/tests/intrinsic-dimensions.rs
+++ b/librsvg_crate/tests/intrinsic_dimensions.rs
@@ -3,9 +3,6 @@ use gio;
 use glib;
 use librsvg;
 
-use gio::MemoryInputStreamExt;
-use glib::Cast;
-
 use librsvg::{
     CairoRenderer,
     DefsLookupErrorKind,
@@ -13,19 +10,12 @@ use librsvg::{
     IntrinsicDimensions,
     Length,
     LengthUnit,
-    Loader,
     RenderingError,
-    SvgHandle,
 };
 
-fn load_svg(input: &'static [u8]) -> SvgHandle {
-    let stream = gio::MemoryInputStream::new();
-    stream.add_bytes(&glib::Bytes::from_static(input));
+mod utils;
 
-    Loader::new()
-        .read_stream(&stream.upcast(), None, None)
-        .unwrap()
-}
+use self::utils::load_svg;
 
 #[test]
 fn no_intrinsic_dimensions() {
diff --git a/librsvg_crate/tests/render_to_viewport.rs b/librsvg_crate/tests/render_to_viewport.rs
index f6e4ce4a..06d2e125 100644
--- a/librsvg_crate/tests/render_to_viewport.rs
+++ b/librsvg_crate/tests/render_to_viewport.rs
@@ -4,89 +4,11 @@ use glib;
 use librsvg;
 use rsvg_internals;
 
-use gio::MemoryInputStreamExt;
-use glib::Cast;
+mod utils;
 
-use librsvg::{CairoRenderer, Loader, RenderingError, SvgHandle};
+use rsvg_internals::surface_utils::shared_surface::{SharedImageSurface, SurfaceType};
 
-use std::fs::File;
-use std::io::BufReader;
-use std::path::PathBuf;
-
-use self::rsvg_internals::surface_utils::shared_surface::{SharedImageSurface, SurfaceType};
-
-mod compare_surfaces;
-
-use crate::compare_surfaces::{compare_surfaces, BufferDiff};
-
-fn load_svg(input: &'static [u8]) -> SvgHandle {
-    let stream = gio::MemoryInputStream::new();
-    stream.add_bytes(&glib::Bytes::from_static(input));
-
-    Loader::new()
-        .read_stream(&stream.upcast(), None, None)
-        .unwrap()
-}
-
-#[derive(Copy, Clone)]
-struct SurfaceSize(i32, i32);
-
-fn render_to_viewport<F: FnOnce(&cairo::Context)>(
-    svg: &SvgHandle,
-    surface_size: SurfaceSize,
-    cr_transform: F,
-    viewport: cairo::Rectangle,
-) -> Result<SharedImageSurface, RenderingError> {
-    let renderer = CairoRenderer::new(svg);
-
-    let SurfaceSize(width, height) = surface_size;
-
-    let output = cairo::ImageSurface::create(cairo::Format::ARgb32, width, height).unwrap();
-
-    let res = {
-        let cr = cairo::Context::new(&output);
-        cr_transform(&cr);
-        Ok(renderer.render_element_to_viewport(&cr, None, &viewport)?)
-    };
-
-    res.and_then(|_| Ok(SharedImageSurface::new(output, SurfaceType::SRgb)?))
-}
-
-fn test_result(output_surf: &SharedImageSurface, output_base_name: &str, fixture_filename: &str) {
-    let output_path = PathBuf::from(&format!("{}-out.png", output_base_name));
-    let fixture_path = PathBuf::from(&format!("tests/fixtures/{}", fixture_filename));
-
-    let mut output_file = File::create(output_path).unwrap();
-    output_surf
-        .clone()
-        .into_image_surface()
-        .unwrap()
-        .write_to_png(&mut output_file)
-        .unwrap();
-
-    let file =
-        File::open(fixture_path).expect("cannot find {} - are you in the librsvg_crate directory?");
-
-    let mut fixture_file = BufReader::new(file);
-
-    let expected = cairo::ImageSurface::create_from_png(&mut fixture_file).unwrap();
-    let expected_surf = SharedImageSurface::new(expected, SurfaceType::SRgb).unwrap();
-
-    let diff = compare_surfaces(output_surf, &expected_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 = PathBuf::from(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);
-        }
-    }
-}
+use self::utils::{load_svg, render_to_viewport, test_result, SurfaceSize};
 
 #[test]
 fn render_to_viewport_with_different_size() {
diff --git a/librsvg_crate/tests/compare_surfaces.rs b/librsvg_crate/tests/utils/compare_surfaces.rs
similarity index 100%
rename from librsvg_crate/tests/compare_surfaces.rs
rename to librsvg_crate/tests/utils/compare_surfaces.rs
diff --git a/librsvg_crate/tests/utils/mod.rs b/librsvg_crate/tests/utils/mod.rs
new file mode 100644
index 00000000..6a8fbba9
--- /dev/null
+++ b/librsvg_crate/tests/utils/mod.rs
@@ -0,0 +1,97 @@
+use cairo;
+use gio;
+use gio::MemoryInputStreamExt;
+use glib;
+use glib::Cast;
+
+use librsvg;
+use librsvg::{CairoRenderer, Loader, RenderingError, SvgHandle};
+use rsvg_internals;
+
+use self::rsvg_internals::surface_utils::shared_surface::{SharedImageSurface, SurfaceType};
+
+use std::env;
+use std::fs::File;
+use std::io::BufReader;
+use std::path::PathBuf;
+
+mod compare_surfaces;
+use self::compare_surfaces::compare_surfaces;
+
+pub use self::compare_surfaces::BufferDiff;
+
+pub fn load_svg(input: &'static [u8]) -> SvgHandle {
+    let stream = gio::MemoryInputStream::new();
+    stream.add_bytes(&glib::Bytes::from_static(input));
+
+    Loader::new()
+        .read_stream(&stream.upcast(), None, None)
+        .unwrap()
+}
+
+#[derive(Copy, Clone)]
+pub struct SurfaceSize(pub i32, pub i32);
+
+pub fn render_to_viewport<F: FnOnce(&cairo::Context)>(
+    svg: &SvgHandle,
+    surface_size: SurfaceSize,
+    cr_transform: F,
+    viewport: cairo::Rectangle,
+) -> Result<SharedImageSurface, RenderingError> {
+    let renderer = CairoRenderer::new(svg);
+
+    let SurfaceSize(width, height) = surface_size;
+
+    let output = cairo::ImageSurface::create(cairo::Format::ARgb32, width, height).unwrap();
+
+    let res = {
+        let cr = cairo::Context::new(&output);
+        cr_transform(&cr);
+        Ok(renderer.render_element_to_viewport(&cr, None, &viewport)?)
+    };
+
+    res.and_then(|_| Ok(SharedImageSurface::new(output, SurfaceType::SRgb)?))
+}
+
+pub fn output_dir() -> PathBuf {
+    PathBuf::from(
+        env::var_os("OUT_DIR")
+            .expect(r#"OUT_DIR is not set, please set it or run under "cargo test""#),
+    )
+}
+
+pub fn test_result(output_surf: &SharedImageSurface, output_base_name: &str, fixture_filename: &str) {
+    let output_path = output_dir().join(&format!("{}-out.png", output_base_name));
+    let fixture_path = PathBuf::from(&format!("tests/fixtures/{}", fixture_filename));
+
+    let mut output_file = File::create(output_path).unwrap();
+    output_surf
+        .clone()
+        .into_image_surface()
+        .unwrap()
+        .write_to_png(&mut output_file)
+        .unwrap();
+
+    let file =
+        File::open(fixture_path).expect("cannot find {} - are you in the librsvg_crate directory?");
+
+    let mut fixture_file = BufReader::new(file);
+
+    let expected = cairo::ImageSurface::create_from_png(&mut fixture_file).unwrap();
+    let expected_surf = SharedImageSurface::new(expected, SurfaceType::SRgb).unwrap();
+
+    let diff = compare_surfaces(output_surf, &expected_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]