[librsvg/librsvg-2.52: 10/18] Test all the geometries for named elements in the Horizon EDA files
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg/librsvg-2.52: 10/18] Test all the geometries for named elements in the Horizon EDA files
- Date: Fri, 13 May 2022 00:09:27 +0000 (UTC)
commit 90faacfb4268446e0af875ef9c39084de6e8fd7e
Author: Federico Mena Quintero <federico gnome org>
Date: Fri May 6 21:00:38 2022 -0500
Test all the geometries for named elements in the Horizon EDA files
Tests fail!
Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/697>
tests/src/geometries.rs | 66 +++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 58 insertions(+), 8 deletions(-)
---
diff --git a/tests/src/geometries.rs b/tests/src/geometries.rs
index 1ed3a8c68..3485b3b80 100644
--- a/tests/src/geometries.rs
+++ b/tests/src/geometries.rs
@@ -13,15 +13,16 @@
//! time.
use anyhow::{Context, Result};
+use librsvg::{CairoRenderer, LengthUnit, Loader};
use serde::Deserialize;
-use std::{collections::BTreeMap};
+use std::collections::BTreeMap;
use std::fs;
use std::path::Path;
// Copy of cairo::Rectangle
//
// Somehow I can't make serde's "remote" work here, in combination with the BTreeMap below...
-#[derive(Deserialize, Debug, PartialEq)]
+#[derive(Copy, Clone, Deserialize, Debug, PartialEq)]
struct Rectangle {
x: f64,
y: f64,
@@ -29,9 +30,9 @@ struct Rectangle {
height: f64,
}
-impl From<cairo::Rectangle> for Rectangle {
- fn from(r: cairo::Rectangle) -> Rectangle {
- Rectangle {
+impl From<Rectangle> for cairo::Rectangle {
+ fn from(r: Rectangle) -> cairo::Rectangle {
+ cairo::Rectangle {
x: r.x,
y: r.y,
width: r.width,
@@ -48,11 +49,60 @@ fn read_geometries(path: &Path) -> Result<Geometries> {
Ok(serde_json::from_str(&contents).context(format!("could not parse JSON from {:?}", path))?)
}
-fn test(base_filename: &str) {
- let mut geometries_filename = String::from(base_filename);
+// We create a struct with the id and geometry so that
+// assert_eq!() in the tests will print out the element name for failures.
+#[derive(Debug, PartialEq)]
+struct Element {
+ id: String,
+ geom: cairo::Rectangle,
+}
+
+fn test(svg_filename: &str) {
+ let mut geometries_filename = String::from(svg_filename);
geometries_filename.push_str(".subs");
- let geometries = read_geometries(Path::new(&geometries_filename)).expect("reading geometries JSON");
+ let geometries =
+ read_geometries(Path::new(&geometries_filename)).expect("reading geometries JSON");
+
+ let handle = Loader::new()
+ .read_path(svg_filename)
+ .expect("reading geometries SVG");
+ let renderer = CairoRenderer::new(&handle);
+ let dimensions = renderer.intrinsic_dimensions();
+ let (svg_width, svg_height) = renderer
+ .intrinsic_size_in_pixels()
+ .expect("intrinsic size in pixels");
+
+ assert!(matches!(dimensions.width.unit, LengthUnit::Px));
+ assert!(matches!(dimensions.height.unit, LengthUnit::Px));
+ assert_eq!(dimensions.width.length, svg_width);
+ assert_eq!(dimensions.height.length, svg_height);
+
+ for (id, expected) in geometries.0.iter() {
+ println!("id: {}", id);
+ let expected = Element {
+ id: String::from(id),
+ geom: cairo::Rectangle::from(*expected),
+ };
+
+ let viewport = cairo::Rectangle {
+ x: 0.0,
+ y: 0.0,
+ width: svg_width,
+ height: svg_height,
+ };
+
+ let (geometry, _) = renderer
+ .geometry_for_layer(Some(id), &viewport)
+ .expect(&format!("getting geometry for {}", id));
+
+ let computed = Element {
+ id: String::from(id),
+ geom: geometry,
+ };
+
+ assert_eq!(expected, computed);
+ }
}
#[test]
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]