tests.rs (7044B)
1 extern crate alloc; 2 use super::{ 3 ASCII_DIGITS, ASCII_DIGITS_LETTERS, ASCII_DIGITS_LOWERCASE, ASCII_DIGITS_UPPERCASE, 4 ASCII_FIREFOX, ASCII_HYPHEN_DIGITS_LETTERS, ASCII_HYPHEN_DIGITS_LOWERCASE, 5 ASCII_HYPHEN_DIGITS_UPPERCASE, ASCII_LETTERS, ASCII_LOWERCASE, ASCII_UPPERCASE, AllowedAscii, 6 AsciiErr, PRINTABLE_ASCII, RFC5322_ATEXT, WHATWG_VALID_DOMAIN_CODE_POINTS, 7 }; 8 use alloc::{borrow::ToOwned as _, vec::Vec}; 9 #[test] 10 fn try_from() { 11 // Empty is allowed. 12 assert_eq!( 13 AllowedAscii::try_from_unique_ascii([]), 14 Ok(AllowedAscii { allowed: [] }) 15 ); 16 // Duplicates are not allowed. 17 assert_eq!( 18 AllowedAscii::try_from_unique_ascii(b"aba".to_owned()), 19 Err(AsciiErr::Duplicate(b'a')) 20 ); 21 // `b'.'` is not allowed. 22 assert_eq!( 23 AllowedAscii::try_from_unique_ascii(b"a.c".to_owned()), 24 Err(AsciiErr::Contains46) 25 ); 26 // At most 127 bytes are allowed. 27 assert_eq!( 28 AllowedAscii::try_from_unique_ascii([0; 128]), 29 Err(AsciiErr::CountTooLarge(128)) 30 ); 31 let mut all_ascii = (0..b'.').collect::<Vec<u8>>(); 32 let next = b'.' + 1; 33 all_ascii.extend(next..=127); 34 assert_eq!( 35 AllowedAscii::try_from_unique_ascii(all_ascii.clone()), 36 Ok(AllowedAscii { allowed: all_ascii }) 37 ); 38 // Only ASCII is allowed. 39 assert_eq!( 40 AllowedAscii::try_from_unique_ascii([255]), 41 Err(AsciiErr::InvalidByte(255)) 42 ); 43 assert!( 44 AllowedAscii::try_from_unique_ascii(b"abcdef".to_owned()).is_ok_and(|bytes| bytes 45 .as_inner() 46 .contains(&b'a') 47 && bytes.contains(b'b') 48 && bytes.contains(b'c') 49 && bytes.contains(b'd') 50 && bytes.contains(b'e') 51 && bytes.contains(b'f')) 52 ); 53 } 54 #[expect( 55 clippy::cognitive_complexity, 56 clippy::too_many_lines, 57 reason = "want to test a lot of things" 58 )] 59 #[test] 60 fn consts() { 61 let letters = ASCII_LETTERS; 62 assert_eq!(letters.len(), 52); 63 for i in b'A'..=b'Z' { 64 assert!(letters.contains(i)); 65 } 66 for i in b'a'..=b'z' { 67 assert!(letters.contains(i)); 68 } 69 let digits = ASCII_DIGITS; 70 assert_eq!(digits.len(), 10); 71 for i in b'0'..=b'9' { 72 assert!(digits.contains(i)); 73 } 74 let lower = ASCII_LOWERCASE; 75 assert_eq!(lower.len(), 26); 76 for i in b'a'..=b'z' { 77 assert!(lower.contains(i)); 78 } 79 let upper = ASCII_UPPERCASE; 80 assert_eq!(upper.len(), 26); 81 for i in b'A'..=b'Z' { 82 assert!(upper.contains(i)); 83 } 84 let dig_let = ASCII_DIGITS_LETTERS; 85 assert_eq!(dig_let.len(), 62); 86 for i in b'a'..=b'z' { 87 assert!(dig_let.contains(i)); 88 } 89 for i in b'0'..=b'9' { 90 assert!(dig_let.contains(i)); 91 } 92 for i in b'A'..=b'Z' { 93 assert!(dig_let.contains(i)); 94 } 95 let dig_lower = ASCII_DIGITS_LOWERCASE; 96 assert_eq!(dig_lower.len(), 36); 97 for i in b'a'..=b'z' { 98 assert!(dig_lower.contains(i)); 99 } 100 for i in b'0'..=b'9' { 101 assert!(dig_lower.contains(i)); 102 } 103 let dig_upper = ASCII_DIGITS_UPPERCASE; 104 assert_eq!(dig_upper.len(), 36); 105 for i in b'A'..=b'Z' { 106 assert!(dig_upper.contains(i)); 107 } 108 for i in b'0'..=b'9' { 109 assert!(dig_upper.contains(i)); 110 } 111 let ffox = ASCII_FIREFOX; 112 assert_eq!(ffox.len(), 78); 113 for i in b'A'..=b'Z' { 114 assert!(ffox.contains(i)); 115 } 116 for i in b'a'..=b'z' { 117 assert!(ffox.contains(i)); 118 } 119 for i in b'0'..=b'9' { 120 assert!(ffox.contains(i)); 121 } 122 assert!(ffox.contains(b'!')); 123 assert!(ffox.contains(b'$')); 124 assert!(ffox.contains(b'&')); 125 assert!(ffox.contains(b'\'')); 126 assert!(ffox.contains(b'(')); 127 assert!(ffox.contains(b')')); 128 assert!(ffox.contains(b'+')); 129 assert!(ffox.contains(b',')); 130 assert!(ffox.contains(b'-')); 131 assert!(ffox.contains(b';')); 132 assert!(ffox.contains(b'=')); 133 assert!(ffox.contains(b'_')); 134 assert!(ffox.contains(b'`')); 135 assert!(ffox.contains(b'{')); 136 assert!(ffox.contains(b'}')); 137 assert!(ffox.contains(b'~')); 138 assert_eq!(ASCII_HYPHEN_DIGITS_LETTERS.len(), 63); 139 assert!(ASCII_HYPHEN_DIGITS_LETTERS.contains(b'-')); 140 for i in b'A'..=b'Z' { 141 assert!(ASCII_HYPHEN_DIGITS_LETTERS.contains(i)); 142 } 143 for i in b'a'..=b'z' { 144 assert!(ASCII_HYPHEN_DIGITS_LETTERS.contains(i)); 145 } 146 for i in b'0'..=b'9' { 147 assert!(ASCII_HYPHEN_DIGITS_LETTERS.contains(i)); 148 } 149 let hyp_lower = ASCII_HYPHEN_DIGITS_LOWERCASE; 150 assert_eq!(hyp_lower.len(), 37); 151 assert!(hyp_lower.contains(b'-')); 152 for i in b'a'..=b'z' { 153 assert!(hyp_lower.contains(i)); 154 } 155 for i in b'0'..=b'9' { 156 assert!(hyp_lower.contains(i)); 157 } 158 let hyp_upper = ASCII_HYPHEN_DIGITS_UPPERCASE; 159 assert_eq!(hyp_upper.len(), 37); 160 assert!(hyp_upper.contains(b'-')); 161 for i in b'A'..=b'Z' { 162 assert!(hyp_upper.contains(i)); 163 } 164 for i in b'0'..=b'9' { 165 assert!(hyp_upper.contains(i)); 166 } 167 let printable = PRINTABLE_ASCII; 168 assert_eq!(printable.len(), 92); 169 let stop = b'.' - 1; 170 for i in 33..=stop { 171 assert!(printable.contains(i)); 172 } 173 let stop2 = b'\\' - 1; 174 for i in stop + 2..=stop2 { 175 assert!(printable.contains(i)); 176 } 177 for i in stop2 + 2..=b'~' { 178 assert!(printable.contains(i)); 179 } 180 let rfc = RFC5322_ATEXT; 181 assert_eq!(rfc.len(), 81); 182 for i in b'A'..=b'Z' { 183 assert!(rfc.contains(i)); 184 } 185 for i in b'a'..=b'z' { 186 assert!(rfc.contains(i)); 187 } 188 for i in b'0'..=b'9' { 189 assert!(rfc.contains(i)); 190 } 191 assert!(rfc.contains(b'!')); 192 assert!(rfc.contains(b'#')); 193 assert!(rfc.contains(b'$')); 194 assert!(rfc.contains(b'%')); 195 assert!(rfc.contains(b'&')); 196 assert!(rfc.contains(b'\'')); 197 assert!(rfc.contains(b'*')); 198 assert!(rfc.contains(b'+')); 199 assert!(rfc.contains(b'-')); 200 assert!(rfc.contains(b'/')); 201 assert!(rfc.contains(b'=')); 202 assert!(rfc.contains(b'?')); 203 assert!(rfc.contains(b'^')); 204 assert!(rfc.contains(b'_')); 205 assert!(rfc.contains(b'`')); 206 assert!(rfc.contains(b'{')); 207 assert!(rfc.contains(b'|')); 208 assert!(rfc.contains(b'}')); 209 assert!(rfc.contains(b'~')); 210 let whatwg = WHATWG_VALID_DOMAIN_CODE_POINTS; 211 for i in 0..=0x1f { 212 assert!(!whatwg.contains(i)); 213 } 214 assert!(!whatwg.contains(b'\x20')); 215 assert!(!whatwg.contains(b'#')); 216 assert!(!whatwg.contains(b'/')); 217 assert!(!whatwg.contains(b':')); 218 assert!(!whatwg.contains(b'<')); 219 assert!(!whatwg.contains(b'>')); 220 assert!(!whatwg.contains(b'?')); 221 assert!(!whatwg.contains(b'@')); 222 assert!(!whatwg.contains(b'[')); 223 assert!(!whatwg.contains(b'\\')); 224 assert!(!whatwg.contains(b']')); 225 assert!(!whatwg.contains(b'^')); 226 assert!(!whatwg.contains(b'|')); 227 assert!(!whatwg.contains(b'%')); 228 assert!(!whatwg.contains(b'\x7f')); 229 assert!(!whatwg.contains(b'.')); 230 assert_eq!(whatwg.len(), 128 - 32 - 16); 231 }