Skip to content

Commit

Permalink
test(lib): Add jekyll sort conformance tests
Browse files Browse the repository at this point in the history
  • Loading branch information
epage committed Jun 6, 2024
1 parent fbce358 commit 016a851
Show file tree
Hide file tree
Showing 2 changed files with 137 additions and 0 deletions.
1 change: 1 addition & 0 deletions crates/lib/tests/conformance_jekyll/mod.rs
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
mod slugify_test;
mod test_filters;
136 changes: 136 additions & 0 deletions crates/lib/tests/conformance_jekyll/test_filters.rs
Original file line number Diff line number Diff line change
@@ -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()
);
}
}

0 comments on commit 016a851

Please sign in to comment.