[librsvg: 37/38] Move the render_to_viewport tests to intrinsic_dimensions.rs
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 37/38] Move the render_to_viewport tests to intrinsic_dimensions.rs
- Date: Tue, 29 Sep 2020 23:37:22 +0000 (UTC)
commit a013c33170bf0605478a1f08a4b65e471aee6492
Author: Federico Mena Quintero <federico gnome org>
Date: Tue Sep 29 17:22:42 2020 -0500
Move the render_to_viewport tests to intrinsic_dimensions.rs
All of those are about rendering/measuring with a viewport, and are
related to the intrinsic dimensions of the SVG document. So let's
have them together.
Makefile.am | 2 +-
librsvg_crate/tests/intrinsic_dimensions.rs | 273 ++++++++++++++++++++++++++-
librsvg_crate/tests/render_to_viewport.rs | 276 ----------------------------
3 files changed, 273 insertions(+), 278 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index 9ca857cf..5e315246 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -113,8 +113,8 @@ LIBRSVG_CRATE_SRC = \
librsvg_crate/examples/proportional.rs \
librsvg_crate/src/lib.rs \
librsvg_crate/tests/api.rs \
+ librsvg_crate/tests/bugs.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 \
diff --git a/librsvg_crate/tests/intrinsic_dimensions.rs b/librsvg_crate/tests/intrinsic_dimensions.rs
index 43c8bbbe..6678f27b 100644
--- a/librsvg_crate/tests/intrinsic_dimensions.rs
+++ b/librsvg_crate/tests/intrinsic_dimensions.rs
@@ -1,5 +1,7 @@
use cairo;
+use rsvg_internals::surface_utils::shared_surface::{SharedImageSurface, SurfaceType};
+
use librsvg::{
CairoRenderer, DefsLookupErrorKind, HrefError, IntrinsicDimensions, Length, LengthUnit,
RenderingError,
@@ -7,7 +9,7 @@ use librsvg::{
mod utils;
-use self::utils::load_svg;
+use self::utils::{compare_to_surface, load_svg, render_document, SurfaceSize};
#[test]
fn no_intrinsic_dimensions() {
@@ -362,3 +364,272 @@ fn layer_geometry_for_invalid_id() {
_ => panic!(),
}
}
+
+#[test]
+fn render_to_viewport_with_different_size() {
+ let svg = load_svg(
+ br#"<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48">
+ <rect x="8" y="8" width="32" height="32" fill="blue"/>
+</svg>
+"#,
+ );
+
+ let output_surf = render_document(
+ &svg,
+ SurfaceSize(128, 128),
+ |_cr| (),
+ cairo::Rectangle {
+ x: 0.0,
+ y: 0.0,
+ width: 128.0,
+ height: 128.0,
+ },
+ )
+ .unwrap();
+
+ let reference_surf = cairo::ImageSurface::create(cairo::Format::ARgb32, 128, 128).unwrap();
+
+ {
+ let cr = cairo::Context::new(&reference_surf);
+
+ cr.scale(128.0 / 48.0, 128.0 / 48.0);
+
+ cr.rectangle(8.0, 8.0, 32.0, 32.0);
+ cr.set_source_rgba(0.0, 0.0, 1.0, 1.0);
+ cr.fill();
+ }
+
+ let reference_surf = SharedImageSurface::wrap(reference_surf, SurfaceType::SRgb).unwrap();
+
+ compare_to_surface(
+ &output_surf,
+ &reference_surf,
+ "render_to_viewport_with_different_size",
+ );
+}
+
+#[test]
+fn render_to_offsetted_viewport() {
+ let svg = load_svg(
+ br#"<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48">
+ <rect x="8" y="8" width="32" height="32" fill="blue"/>
+</svg>
+"#,
+ );
+
+ let output_surf = render_document(
+ &svg,
+ SurfaceSize(100, 100),
+ |_cr| (),
+ cairo::Rectangle {
+ x: 10.0,
+ y: 20.0,
+ width: 48.0,
+ height: 48.0,
+ },
+ )
+ .unwrap();
+
+ let reference_surf = cairo::ImageSurface::create(cairo::Format::ARgb32, 100, 100).unwrap();
+
+ {
+ let cr = cairo::Context::new(&reference_surf);
+
+ cr.translate(10.0, 20.0);
+
+ cr.rectangle(8.0, 8.0, 32.0, 32.0);
+ cr.set_source_rgba(0.0, 0.0, 1.0, 1.0);
+ cr.fill();
+ }
+
+ let reference_surf = SharedImageSurface::wrap(reference_surf, SurfaceType::SRgb).unwrap();
+
+ compare_to_surface(&output_surf, &reference_surf, "render_to_offseted_viewport");
+}
+
+#[test]
+fn render_to_viewport_with_transform() {
+ let svg = load_svg(
+ br#"<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48">
+ <g transform="translate(-10, -10)">
+ <path fill="blue" d="M 18 18 l 32 0 l 0 32 l -32 0 z"/>
+ </g>
+</svg>
+"#,
+ );
+
+ let output_surf = render_document(
+ &svg,
+ SurfaceSize(100, 100),
+ |cr| cr.translate(10.0, 20.0),
+ cairo::Rectangle {
+ x: 0.0,
+ y: 0.0,
+ width: 48.0,
+ height: 48.0,
+ },
+ )
+ .unwrap();
+
+ let reference_surf = cairo::ImageSurface::create(cairo::Format::ARgb32, 100, 100).unwrap();
+
+ {
+ let cr = cairo::Context::new(&reference_surf);
+
+ cr.translate(10.0, 20.0);
+ cr.translate(-10.0, -10.0);
+
+ cr.rectangle(18.0, 18.0, 32.0, 32.0);
+ cr.set_source_rgba(0.0, 0.0, 1.0, 1.0);
+ cr.fill();
+ }
+
+ let reference_surf = SharedImageSurface::wrap(reference_surf, SurfaceType::SRgb).unwrap();
+
+ compare_to_surface(
+ &output_surf,
+ &reference_surf,
+ "render_to_viewport_with_transform",
+ );
+}
+
+#[test]
+fn clip_on_transformed_viewport() {
+ let svg = load_svg(
+ br##"<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
+ <defs>
+ <clipPath id="one" clipPathUnits="objectBoundingBox">
+ <path d="M 0.5 0.0 L 1.0 0.5 L 0.5 1.0 L 0.0 0.5 Z"/>
+ </clipPath>
+ </defs>
+ <g clip-path="url(#one)">
+ <rect x="10" y="10" width="40" height="40" fill="blue"/>
+ <rect x="50" y="50" width="40" height="40" fill="#00ff00"/>
+ </g>
+</svg>
+"##,
+ );
+
+ let output_surf = render_document(
+ &svg,
+ SurfaceSize(200, 200),
+ |cr| cr.translate(50.0, 50.0),
+ cairo::Rectangle {
+ x: 0.0,
+ y: 0.0,
+ width: 100.0,
+ height: 100.0,
+ },
+ )
+ .unwrap();
+
+ let reference_surf = cairo::ImageSurface::create(cairo::Format::ARgb32, 200, 200).unwrap();
+
+ {
+ let cr = cairo::Context::new(&reference_surf);
+
+ cr.translate(50.0, 50.0);
+
+ cr.push_group();
+
+ cr.rectangle(10.0, 10.0, 40.0, 40.0);
+ cr.set_source_rgba(0.0, 0.0, 1.0, 1.0);
+ cr.fill();
+
+ cr.rectangle(50.0, 50.0, 40.0, 40.0);
+ cr.set_source_rgba(0.0, 1.0, 0.0, 1.0);
+ cr.fill();
+
+ cr.pop_group_to_source();
+
+ cr.move_to(50.0, 10.0);
+ cr.line_to(90.0, 50.0);
+ cr.line_to(50.0, 90.0);
+ cr.line_to(10.0, 50.0);
+ cr.close_path();
+
+ cr.clip();
+ cr.paint();
+ }
+
+ let reference_surf = SharedImageSurface::wrap(reference_surf, SurfaceType::SRgb).unwrap();
+
+ compare_to_surface(
+ &output_surf,
+ &reference_surf,
+ "clip_on_transformed_viewport",
+ );
+}
+
+#[test]
+fn mask_on_transformed_viewport() {
+ let svg = load_svg(
+ br##"<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
+ <defs>
+ <mask id="one" maskContentUnits="objectBoundingBox">
+ <path d="M 0.5 0.0 L 1.0 0.5 L 0.5 1.0 L 0.0 0.5 Z" fill="white"/>
+ </mask>
+ </defs>
+ <g mask="url(#one)">
+ <rect x="10" y="10" width="40" height="40" fill="blue"/>
+ <rect x="50" y="50" width="40" height="40" fill="#00ff00"/>
+ </g>
+</svg>
+"##,
+ );
+
+ let output_surf = render_document(
+ &svg,
+ SurfaceSize(200, 200),
+ |cr| cr.translate(50.0, 50.0),
+ cairo::Rectangle {
+ x: 0.0,
+ y: 0.0,
+ width: 100.0,
+ height: 100.0,
+ },
+ )
+ .unwrap();
+
+ let reference_surf = cairo::ImageSurface::create(cairo::Format::ARgb32, 200, 200).unwrap();
+
+ {
+ let cr = cairo::Context::new(&reference_surf);
+
+ cr.translate(50.0, 50.0);
+
+ cr.push_group();
+
+ cr.rectangle(10.0, 10.0, 40.0, 40.0);
+ cr.set_source_rgba(0.0, 0.0, 1.0, 1.0);
+ cr.fill();
+
+ cr.rectangle(50.0, 50.0, 40.0, 40.0);
+ cr.set_source_rgba(0.0, 1.0, 0.0, 1.0);
+ cr.fill();
+
+ cr.pop_group_to_source();
+
+ cr.move_to(50.0, 10.0);
+ cr.line_to(90.0, 50.0);
+ cr.line_to(50.0, 90.0);
+ cr.line_to(10.0, 50.0);
+ cr.close_path();
+
+ cr.clip();
+ cr.paint();
+ }
+
+ let reference_surf = SharedImageSurface::wrap(reference_surf, SurfaceType::SRgb).unwrap();
+
+ compare_to_surface(
+ &output_surf,
+ &reference_surf,
+ "mask_on_transformed_viewport",
+ );
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]