From 016a851f28bea16bb4aa9445e63d74c5cc69e636 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Fri, 31 May 2024 16:12:22 -0500 Subject: [PATCH] test(lib): Add jekyll sort conformance tests --- crates/lib/tests/conformance_jekyll/mod.rs | 1 + .../tests/conformance_jekyll/test_filters.rs | 136 ++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 crates/lib/tests/conformance_jekyll/test_filters.rs diff --git a/crates/lib/tests/conformance_jekyll/mod.rs b/crates/lib/tests/conformance_jekyll/mod.rs index 9f82948de..6bfc2f0e5 100644 --- a/crates/lib/tests/conformance_jekyll/mod.rs +++ b/crates/lib/tests/conformance_jekyll/mod.rs @@ -1 +1,2 @@ mod slugify_test; +mod test_filters; diff --git a/crates/lib/tests/conformance_jekyll/test_filters.rs b/crates/lib/tests/conformance_jekyll/test_filters.rs new file mode 100644 index 000000000..7fc3d608f --- /dev/null +++ b/crates/lib/tests/conformance_jekyll/test_filters.rs @@ -0,0 +1,136 @@ +use liquid_lib::jekyll; + +mod sort_filter { + use super::*; + + #[test] + fn raise_exception_when_input_is_nil() { + let input = liquid_core::Value::Nil; + assert!(liquid_core::call_filter!(jekyll::Sort, input).is_ok()); + } + #[test] + fn return_sorted_numbers() { + assert_eq!( + v!([1, 2, 2.2, 3]), + liquid_core::call_filter!(jekyll::Sort, v!([3, 2.2, 2, 1])).unwrap() + ); + } + + #[test] + fn return_sorted_strings() { + assert_eq!( + v!(["10", "2"]), + liquid_core::call_filter!(jekyll::Sort, v!(["10", "2"])).unwrap() + ); + assert_eq!( + v!(["FOO", "Foo", "foo"]), + liquid_core::call_filter!(jekyll::Sort, v!(["foo", "Foo", "FOO"])).unwrap() + ); + assert_eq!( + v!(["_foo", "foo", "foo_"]), + liquid_core::call_filter!(jekyll::Sort, v!(["foo_", "_foo", "foo"])).unwrap() + ); + // Cyrillic + assert_eq!( + v!(["ВУЗ", "Вуз", "вуз"]), + liquid_core::call_filter!(jekyll::Sort, v!(["Вуз", "вуз", "ВУЗ"])).unwrap() + ); + assert_eq!( + v!(["_вуз", "вуз", "вуз_"]), + liquid_core::call_filter!(jekyll::Sort, v!(["вуз_", "_вуз", "вуз"])).unwrap() + ); + // Hebrew + assert_eq!( + v!(["אלף", "בית"]), + liquid_core::call_filter!(jekyll::Sort, v!(["בית", "אלף"])).unwrap() + ); + } + + #[test] + fn return_sorted_by_property_array() { + assert_eq!( + liquid_core::value!([{ "a": 1 }, { "a": 2 }, { "a": 3 }, { "a": 4 }]), + liquid_core::call_filter!( + jekyll::Sort, + liquid_core::value!([{ "a": 4 }, { "a": 3 }, { "a": 1 }, { "a": 2 }]), + "a" + ) + .unwrap() + ); + } + + #[test] + fn return_sorted_by_property_array_with_numeric_strings_sorted_as_numbers() { + assert_eq!( + liquid_core::value!([{ "a": ".5" }, { "a": "0.65" }, { "a": "10" }]), + liquid_core::call_filter!( + jekyll::Sort, + liquid_core::value!([{ "a": "10" }, { "a": ".5" }, { "a": "0.65" }]), + "a" + ) + .unwrap(), + ); + } + + #[test] + fn return_sorted_by_property_array_with_numeric_strings_first() { + assert_eq!( + liquid_core::value!([{ "a": ".5" }, { "a": "0.6" }, { "a": "twelve" }]), + liquid_core::call_filter!( + jekyll::Sort, + liquid_core::value!([{ "a": "twelve" }, { "a": ".5" }, { "a": "0.6" }]), + "a" + ) + .unwrap() + ); + } + + #[test] + fn return_sorted_by_property_array_with_numbers_and_strings() { + assert_eq!( + liquid_core::value!([{ "a": "1" }, { "a": "1abc" }, { "a": "20" }]), + liquid_core::call_filter!( + jekyll::Sort, + liquid_core::value!([{ "a": "20" }, { "a": "1" }, { "a": "1abc" }]), + "a" + ) + .unwrap() + ); + } + + #[test] + fn return_sorted_by_property_array_with_nils_first() { + let ary = liquid_core::value!([{ "a": 2 }, { "b": 1 }, { "a": 1 }]); + assert_eq!( + liquid_core::value!([{ "a": 1 }, { "a": 2 }, { "b": 1 }]), + liquid_core::call_filter!(jekyll::Sort, ary, "a").unwrap() + ); + assert!(liquid_core::call_filter!(jekyll::Sort, ary, "a", "first").is_err()); + } + + #[test] + fn return_sorted_by_property_array_with_nils_last() { + assert!(liquid_core::call_filter!( + jekyll::Sort, + liquid_core::value!([{ "a": 2 }, { "b": 1 }, { "a": 1 }]), + "a", + "last" + ) + .is_err()); + } + + #[test] + fn return_sorted_by_subproperty_array() { + assert_eq!( + liquid_core::value!([{ "a": { "b": 2 } }, { "a": { "b": 1 } }, + { "a": { "b": 3 } },]), + liquid_core::call_filter!( + jekyll::Sort, + liquid_core::value!([{ "a": { "b": 2 } }, { "a": { "b": 1 } }, + { "a": { "b": 3 } },]), + "a.b" + ) + .unwrap() + ); + } +}