use easy_assert::list_assertions::ListAssert;
use easy_assert::{actual_vec_with, expected_vec_with};
#[test]
pub fn same_should_be_equal_in_order() {
let obj1 = CustomObject {
a: String::from("a"),
b: 1,
c: true,
};
let obj2 = CustomObject {
a: String::from("b"),
b: 2,
c: true,
};
let obj3 = CustomObject {
a: String::from("c"),
b: 3,
c: false,
};
ListAssert::assert_that(actual_vec_with(
vec![obj1.clone(), obj2.clone(), obj3.clone()],
custom_describe,
))
.with_element_matcher(custom_match)
.is_equal_to(expected_vec_with(vec![obj1, obj2, obj3], custom_describe))
.in_order()
}
#[test]
#[should_panic]
pub fn should_not_be_equal_in_order() {
let obj1 = CustomObject {
a: String::from("a"),
b: 1,
c: true,
};
let obj2 = CustomObject {
a: String::from("b"),
b: 2,
c: true,
};
let obj3 = CustomObject {
a: String::from("c"),
b: 3,
c: false,
};
ListAssert::assert_that(actual_vec_with(
vec![obj1.clone(), obj2.clone(), obj3.clone()],
custom_describe,
))
.with_element_matcher(custom_match)
.is_equal_to(expected_vec_with(vec![obj2, obj1, obj3], custom_describe))
.in_order()
}
#[test]
#[should_panic]
pub fn in_order_should_panic_for_different_length() {
let obj1 = CustomObject {
a: String::from("a"),
b: 1,
c: true,
};
let obj2 = CustomObject {
a: String::from("b"),
b: 2,
c: true,
};
let obj3 = CustomObject {
a: String::from("c"),
b: 3,
c: false,
};
ListAssert::assert_that(actual_vec_with(
vec![obj1.clone(), obj2.clone(), obj3.clone(), obj3.clone()],
custom_describe,
))
.with_element_matcher(custom_match)
.is_equal_to(expected_vec_with(vec![obj2, obj1, obj3], custom_describe))
.in_order()
}
#[test]
pub fn same_should_be_equal_in_any_order() {
let obj1 = CustomObject {
a: String::from("a"),
b: 1,
c: true,
};
let obj2 = CustomObject {
a: String::from("b"),
b: 2,
c: true,
};
let obj3 = CustomObject {
a: String::from("c"),
b: 3,
c: false,
};
ListAssert::assert_that(actual_vec_with(
vec![obj1.clone(), obj2.clone(), obj3.clone()],
custom_describe,
))
.with_element_matcher(custom_match)
.is_equal_to(expected_vec_with(vec![obj1, obj2, obj3], custom_describe))
.in_any_order()
}
#[test]
pub fn should_be_equal_in_any_order() {
let obj1 = CustomObject {
a: String::from("a"),
b: 1,
c: true,
};
let obj2 = CustomObject {
a: String::from("b"),
b: 2,
c: true,
};
let obj3 = CustomObject {
a: String::from("c"),
b: 3,
c: false,
};
ListAssert::assert_that(actual_vec_with(
vec![obj1.clone(), obj2.clone(), obj3.clone()],
custom_describe,
))
.with_element_matcher(custom_match)
.is_equal_to(expected_vec_with(vec![obj2, obj1, obj3], custom_describe))
.in_any_order()
}
#[test]
#[should_panic]
pub fn should_not_be_equal_in_any_order() {
let obj1 = CustomObject {
a: String::from("a"),
b: 1,
c: true,
};
let obj2 = CustomObject {
a: String::from("b"),
b: 2,
c: true,
};
let obj3 = CustomObject {
a: String::from("c"),
b: 3,
c: false,
};
ListAssert::assert_that(actual_vec_with(
vec![obj1.clone(), obj2.clone(), obj3.clone()],
custom_describe,
))
.with_element_matcher(custom_match)
.is_equal_to(expected_vec_with(
vec![obj1.clone(), obj1, obj3],
custom_describe,
))
.in_any_order()
}
#[test]
#[should_panic]
pub fn in_any_order_should_panic_for_different_length() {
let obj1 = CustomObject {
a: String::from("a"),
b: 1,
c: true,
};
let obj2 = CustomObject {
a: String::from("b"),
b: 2,
c: true,
};
let obj3 = CustomObject {
a: String::from("c"),
b: 3,
c: false,
};
ListAssert::assert_that(actual_vec_with(
vec![obj1.clone(), obj2.clone(), obj3.clone(), obj3.clone()],
custom_describe,
))
.with_element_matcher(custom_match)
.is_equal_to(expected_vec_with(vec![obj2, obj1, obj3], custom_describe))
.in_any_order()
}
#[derive(Clone)]
struct CustomObject {
a: String,
b: u32,
c: bool,
}
fn custom_match(value1: &CustomObject, value2: &CustomObject) -> bool {
value1.a.eq(&value2.a) && value1.b == value2.b && value1.c == value2.c
}
fn custom_describe(val: &CustomObject) -> String {
format!(
"\nCustomObject:{{ \n a: {} \n b: {} \n c: {} }}",
val.a, val.b, val.c
)
}