From 26a20cf4f3a71ccdd7c6abb06cffd4c12d08395e Mon Sep 17 00:00:00 2001 From: Melody Horn Date: Sat, 26 Mar 2022 19:57:57 -0600 Subject: parse schemas with knuffel --- tests/schema-via-knuffel.rs | 63 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 tests/schema-via-knuffel.rs (limited to 'tests/schema-via-knuffel.rs') diff --git a/tests/schema-via-knuffel.rs b/tests/schema-via-knuffel.rs new file mode 100644 index 0000000..b0d1a1c --- /dev/null +++ b/tests/schema-via-knuffel.rs @@ -0,0 +1,63 @@ +#![cfg(feature = "knuffel")] + +use std::fmt::Debug; + +use kdl_schema::*; + +trait DeepAssertEq +where + Self: PartialEq + Debug, +{ + fn deep_assert_eq(left: &Self, right: &Self) { + assert_eq!(left, right); + } +} + +impl DeepAssertEq for Schema { + fn deep_assert_eq(left: &Self, right: &Self) { + DeepAssertEq::deep_assert_eq(&left.document, &right.document) + } +} + +impl DeepAssertEq for Document { + fn deep_assert_eq(left: &Self, right: &Self) { + DeepAssertEq::deep_assert_eq(&left.info, &right.info); + DeepAssertEq::deep_assert_eq(&left.nodes, &right.nodes); + } +} + +impl DeepAssertEq for Vec { + fn deep_assert_eq(left: &Self, right: &Self) { + for (left, right) in left.iter().zip(right.iter()) { + DeepAssertEq::deep_assert_eq(left, right); + } + assert_eq!(left, right); + } +} + +impl DeepAssertEq for Info {} + +impl DeepAssertEq for Node { + fn deep_assert_eq(left: &Self, right: &Self) { + DeepAssertEq::deep_assert_eq(&left.props, &right.props); + DeepAssertEq::deep_assert_eq(&left.values, &right.values); + DeepAssertEq::deep_assert_eq(&left.children, &right.children); + assert_eq!(left, right); + } +} + +impl DeepAssertEq for node::Prop {} +impl DeepAssertEq for node::Value {} +impl DeepAssertEq for node::Children { + fn deep_assert_eq(left: &Self, right: &Self) { + DeepAssertEq::deep_assert_eq(&left.nodes, &right.nodes); + assert_eq!(left, right); + } +} + +#[test] +fn schema_loads() -> miette::Result<()> { + let schema: Schema = knuffel::parse("kdl-schema.kdl", include_str!("kdl-schema.kdl"))?; + DeepAssertEq::deep_assert_eq(&schema, &*SCHEMA_SCHEMA); + Ok(()) +} -- cgit v1.2.3