Skip to content

Commit 6ee2920

Browse files
committed
add test for length
1 parent ba1f93c commit 6ee2920

File tree

4 files changed

+137
-3
lines changed

4 files changed

+137
-3
lines changed

src/rule/length/equal.rs

+15-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
/// This macro generates a rule that checks if the length of the target is equal to `N`
2+
/// # Example
3+
/// ```rust
4+
/// use refined_type::length_equal;
5+
/// length_equal!(5);
6+
///
7+
/// let target = "12345";
8+
/// let refined = LengthEqual5::new(target).unwrap();
9+
/// assert_eq!(refined.into_value(), "12345");
10+
///
11+
/// let target = "1234";
12+
/// let refined = LengthEqual5::new(target);
13+
/// assert!(refined.is_err());
14+
/// ```
115
#[macro_export]
216
macro_rules! length_equal {
317
($length:literal) => {
@@ -31,7 +45,7 @@ macro_rules! length_equal {
3145
if target.length() == $length {
3246
Ok(())
3347
} else {
34-
Err(Error::new(format!("target length is not equal to {}", $length)))
48+
Err($crate::result::Error::new(format!("target length is not equal to {}", $length)))
3549
}
3650
}
3751
}

src/rule/length/grater.rs

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
/// This macro generates a rule that checks if the length of the target is greater than `N`
2+
/// # Example
3+
/// ```rust
4+
/// use refined_type::length_greater_than;
5+
/// length_greater_than!(5);
6+
///
7+
/// let target = "123456";
8+
/// let refined = LengthGreaterThan5::new(target).unwrap();
9+
/// assert_eq!(refined.into_value(), "123456");
10+
///
11+
/// let target = "12345";
12+
/// let refined = LengthGreaterThan5::new(target);
13+
/// assert!(refined.is_err());
114
#[macro_export]
215
macro_rules! length_greater_than {
316
($length:literal) => {
@@ -30,7 +43,7 @@ macro_rules! length_greater_than {
3043
if target.length() > $length {
3144
Ok(())
3245
} else {
33-
Err(Error::new(format!("target length is not greater than {}", $length)))
46+
Err($crate::result::Error::new(format!("target length is not greater than {}", $length)))
3447
}
3548
}
3649
}

src/rule/length/less.rs

+15-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
/// This macro generates a rule that checks if the length of the target is less than `N`
2+
/// # Example
3+
/// ```rust
4+
/// use refined_type::length_less_than;
5+
/// length_less_than!(5);
6+
///
7+
/// let target = "1234";
8+
/// let refined = LengthLessThan5::new(target).unwrap();
9+
/// assert_eq!(refined.into_value(), "1234");
10+
///
11+
/// let target = "12345";
12+
/// let refined = LengthLessThan5::new(target);
13+
/// assert!(refined.is_err());
14+
/// ```
115
#[macro_export]
216
macro_rules! length_less_than {
317
($length:literal) => {
@@ -31,7 +45,7 @@ macro_rules! length_less_than {
3145
if target.length() < $length {
3246
Ok(())
3347
} else {
34-
Err(Error::new(format!("target length is not less than {}", $length)))
48+
Err($crate::result::Error::new(format!("target length is not less than {}", $length)))
3549
}
3650
}
3751
}

tests/length.rs

+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
use refined_type::{length_equal, length_greater_than, length_less_than, Refined};
2+
use refined_type::rule::composer::{And, Or};
3+
4+
length_greater_than!(5);
5+
length_equal!(5, 10);
6+
length_less_than!(10);
7+
8+
#[test]
9+
fn test_length() -> Result<(), refined_type::result::Error> {
10+
type Password = Refined<
11+
And<
12+
Or<LengthEqualRule5<String>, LengthGreaterThanRule5<String>>,
13+
Or<LengthLessThanRule10<String>, LengthEqualRule10<String>>,
14+
>,
15+
>;
16+
let raw_password = "password";
17+
let password = Password::new(raw_password.to_string())?;
18+
assert_eq!(password.into_value(), "password");
19+
Ok(())
20+
}
21+
22+
#[test]
23+
fn test_length_fail() {
24+
type Password = Refined<
25+
And<
26+
And<LengthEqualRule5<String>, LengthGreaterThanRule5<String>>,
27+
And<LengthLessThanRule10<String>, LengthEqualRule10<String>>,
28+
>,
29+
>;
30+
let raw_password = "password password";
31+
let password = Password::new(raw_password.to_string());
32+
assert!(password.is_err());
33+
}
34+
35+
#[test]
36+
fn test_length_greater_than_5() -> Result<(), refined_type::result::Error> {
37+
let target = "123456";
38+
let refined = LengthGreaterThan5::new(target)?;
39+
assert_eq!(refined.into_value(), "123456");
40+
Ok(())
41+
}
42+
43+
#[test]
44+
fn test_length_greater_than_5_fail() {
45+
let target = "1234";
46+
let refined = LengthGreaterThan5::new(target);
47+
assert!(refined.is_err());
48+
}
49+
50+
#[test]
51+
fn test_length_equal_5() -> Result<(), refined_type::result::Error> {
52+
let target = "12345";
53+
let refined = LengthEqual5::new(target)?;
54+
assert_eq!(refined.into_value(), "12345");
55+
Ok(())
56+
}
57+
58+
#[test]
59+
fn test_length_equal_5_fail() {
60+
let target = "1234";
61+
let refined = LengthEqual5::new(target);
62+
assert!(refined.is_err());
63+
}
64+
65+
#[test]
66+
fn test_length_equal_10() -> Result<(), refined_type::result::Error> {
67+
let target = "1234567890";
68+
let refined = LengthEqual10::new(target)?;
69+
assert_eq!(refined.into_value(), "1234567890");
70+
Ok(())
71+
}
72+
73+
#[test]
74+
fn test_length_equal_10_fail() {
75+
let target = "123456789";
76+
let refined = LengthEqual10::new(target);
77+
assert!(refined.is_err());
78+
}
79+
80+
#[test]
81+
fn test_length_less_than_10() -> Result<(), refined_type::result::Error> {
82+
let target = "123456789";
83+
let refined = LengthLessThan10::new(target)?;
84+
assert_eq!(refined.into_value(), "123456789");
85+
Ok(())
86+
}
87+
88+
#[test]
89+
fn test_length_less_than_10_fail() {
90+
let target = "1234567890";
91+
let refined = LengthLessThan10::new(target);
92+
assert!(refined.is_err());
93+
}

0 commit comments

Comments
 (0)