(case: CSSTokenizerTestCase)
| 214 | } |
| 215 | |
| 216 | fn test_case(case: CSSTokenizerTestCase) -> u8 { |
| 217 | dbg!(&case.name); |
| 218 | let mut lexer = Lexer::new(&EmptyAtomSet::ATOMS, &case.source_text); |
| 219 | let mut tokens = vec![]; |
| 220 | loop { |
| 221 | let offset = lexer.offset(); |
| 222 | let cursor = lexer.advance().with_cursor(offset); |
| 223 | if cursor.token().kind() == Kind::Eof { |
| 224 | break; |
| 225 | } |
| 226 | tokens.push(convert_token(&case.source_text, cursor)); |
| 227 | } |
| 228 | if tokens != *case.desired { |
| 229 | let left: String = to_string_pretty(&tokens).unwrap_or("".to_string()); |
| 230 | let right: String = to_string_pretty(&case.desired).unwrap_or("".to_string()); |
| 231 | println!("{} {}", Style::new().red().apply_to("✘ FAILED"), case.name); |
| 232 | println!("{}", Style::new().red().apply_to("- actual")); |
| 233 | println!("{}", Style::new().green().apply_to("+ expected")); |
| 234 | let diff = TextDiff::from_lines(&*left, &*right); |
| 235 | for change in diff.iter_all_changes() { |
| 236 | let (sign, style) = match change.tag() { |
| 237 | ChangeTag::Delete => ("-", Style::new().red()), |
| 238 | ChangeTag::Insert => ("+", Style::new().green()), |
| 239 | ChangeTag::Equal => (" ", Style::new()), |
| 240 | }; |
| 241 | print!("{}{}", style.apply_to(sign).bold(), style.apply_to(change)); |
| 242 | } |
| 243 | return 1; |
| 244 | } |
| 245 | 0 |
| 246 | } |
| 247 | |
| 248 | #[test] |
| 249 | fn full_suite() { |
no test coverage detected