[librsvg: 62/90] Make a librsvg_crate/tests/utils module
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 62/90] Make a librsvg_crate/tests/utils module
- Date: Tue, 26 Mar 2019 19:17:17 +0000 (UTC)
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]