[librsvg/librsvg-2.52: 10/18] Test all the geometries for named elements in the Horizon EDA files




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]