use super::util;
#[derive(Debug, garde::Validate)]
struct Test<'a> {
#[garde(length(min = 10, max = 100))]
field: &'a str,
#[garde(inner(length(min = 10, max = 100)))]
inner: &'a [&'a str],
}
#[test]
fn length_valid() {
util::check_ok(&[
Test {
field: "aaaaaaaaaa",
inner: &["aaaaaaaaaa"]
},
Test {
field: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
inner: &["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
},
], &())
}
#[test]
fn length_invalid() {
util::check_fail!(&[
Test {
field: "aaaaaaaaa",
inner: &["aaaaaaaaa"]
},
Test {
field: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
inner: &["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
},
], &())
}
#[derive(Debug, garde::Validate)]
struct Exact<'a> {
#[garde(length(equal = 2))]
field: &'a str,
#[garde(inner(length(equal = 2)))]
inner: &'a [&'a str],
}
#[test]
fn exact_length_valid() {
util::check_ok(
&[Exact {
field: "aa",
inner: &["aa"],
}],
&(),
)
}
#[test]
fn exact_length_invalid() {
util::check_fail!(
&[
Exact {
field: "",
inner: &[""]
},
Exact {
field: "a",
inner: &["a"]
},
Exact {
field: "aaa",
inner: &["aaa"]
},
],
&()
)
}
#[derive(Debug, garde::Validate)]
struct MinMaxEqual<'a> {
#[garde(length(min = 2, max = 2))]
min_max: &'a str,
#[garde(length(equal = 2))]
equal: &'a str,
}
#[test]
fn min_max_equal_length_valid() {
util::check_ok(
&[MinMaxEqual {
min_max: "bb",
equal: "bb",
}],
&(),
)
}
#[test]
fn min_max_equal_length_invalid() {
util::check_fail!(
&[
MinMaxEqual {
min_max: "",
equal: ""
},
MinMaxEqual {
min_max: "b",
equal: "b"
},
MinMaxEqual {
min_max: "bbb",
equal: "bbb"
},
],
&()
)
}
#[derive(Debug, garde::Validate)]
struct SpecialLengthTest<'a> {
#[garde(length(simple, max = 1))]
simple: &'a str,
#[garde(length(bytes, max = 1))]
bytes: &'a str,
#[garde(length(chars, max = 1))]
chars: &'a str,
#[garde(length(graphemes, max = 1))]
graphemes: &'a str,
#[garde(length(utf16, max = 1))]
utf16: &'a str,
#[garde(length(bytes, max = 4), length(graphemes, max = 1))]
multi: &'a str,
}
#[test]
fn char_length_valid() {
util::check_ok(
&[SpecialLengthTest {
simple: "a",
bytes: "a",
chars: "á",
graphemes: "á",
utf16: "á",
multi: "😂", }],
&(),
)
}
#[test]
fn char_length_invalid() {
util::check_fail!(
&[SpecialLengthTest {
simple: "ab", bytes: "ab", chars: "y̆", graphemes: "áá", utf16: "😂",
multi: "áá", }],
&()
)
}