| 423 rule = rule.consume('\n', &ctx); |
423 rule = rule.consume('\n', &ctx); |
| 424 } |
424 } |
| 425 |
425 |
| 426 rule.flush(&ctx) |
426 rule.flush(&ctx) |
| 427 } |
427 } |
| |
428 |
| |
429 |
| |
430 #[cfg(test)] |
| |
431 mod tests { |
| |
432 use super::*; |
| |
433 use std::io::Cursor; |
| |
434 |
| |
435 fn process_str(config : Config, input : &str) -> String { |
| |
436 let b = process(config, Cursor::new(input.as_bytes()), Vec::new()); |
| |
437 String::from_utf8(b).unwrap() |
| |
438 } |
| |
439 |
| |
440 #[test] |
| |
441 fn test1_changes() { |
| |
442 let p = |s| process_str(Config { strip_comments : false, strip_whitespace : false }, s); |
| |
443 |
| |
444 assert_eq!(p("x\\added{y}z\n"), "xyz\n"); |
| |
445 assert_eq!(p("x\\deleted{y}z\n"), "xz\n"); |
| |
446 assert_eq!(p("x\\replaced{y}{q}z\n"), "xyz\n"); |
| |
447 |
| |
448 // TODO: working as intended, but not how would be good for LaTeX consistency |
| |
449 assert_eq!(p("x\\added{y{q}\\bar}z\n"), "xy{q}\\barz\n"); |
| |
450 assert_eq!(p("x\\deleted{y{q}\\bar}z\n"), "xz\n"); |
| |
451 |
| |
452 assert_eq!(p("x\\added{y\na}z\n"), "xy\naz\n"); |
| |
453 assert_eq!(p("x\\deleted{y\na}z\n"), "xz\n"); |
| |
454 assert_eq!(p("x\\replaced{y\na}{q}z\n"), "xy\naz\n"); |
| |
455 |
| |
456 assert_eq!(p("x\\added{y\\test{\na}}z\n"), "xy\\test{\na}z\n"); |
| |
457 assert_eq!(p("x\\deleted{y\\test{\na}}z\n"), "xz\n"); |
| |
458 |
| |
459 assert_eq!(p("x\\deleted{y\\added{a}}z\n"), "xz\n"); |
| |
460 |
| |
461 assert_eq!(p("\\added{%\n\\begin{a}\n x\n y\n z\\end{a}}\n"), |
| |
462 "%\n\\begin{a}\n x\n y\n z\\end{a}\n"); |
| |
463 |
| |
464 assert_eq!(p("\\added\n\n {q}\n"), "q\n"); |
| |
465 assert_eq!(p("\\replaced{\\{q}\n \n{z}\n"), "\\{q\n"); |
| |
466 assert_eq!(p("\\replaced{q\\}}\n \n{z}\n"), "q\\}\n"); |
| |
467 } |
| |
468 |
| |
469 #[test] |
| |
470 fn test2_comments() { |
| |
471 let p = |s| process_str(Config { strip_comments : true, strip_whitespace : false }, s); |
| |
472 |
| |
473 assert_eq!(p("\\added{%\n\\begin{a}\n x\n y\n z\\end{a}}\n"), |
| |
474 "\\begin{a}\n x\n y\n z\\end{a}\n"); |
| |
475 |
| |
476 assert_eq!(p(" test % comments"), " test \n"); |
| |
477 |
| |
478 assert_eq!(p(" test% comments"), " test%\n"); |
| |
479 |
| |
480 assert_eq!(p(" % comments\nline"), "line\n"); |
| |
481 } |
| |
482 |
| |
483 #[test] |
| |
484 fn test3_whitespace() { |
| |
485 let p = |s| process_str(Config { strip_comments : false, strip_whitespace : true }, s); |
| |
486 |
| |
487 assert_eq!(p("a\n\n\n\nb\n"), "a\n\nb\n"); |
| |
488 assert_eq!(p("a\n\n \n\nb\n"), "a\n\nb\n"); |
| |
489 assert_eq!(p("a \n\n\n\nb\n"), "a\n\nb\n"); |
| |
490 |
| |
491 assert_eq!(p("a\n\n% comment\n\nb\n"), "a\n\n% comment\n\nb\n"); |
| |
492 assert_eq!(p("a\n\n % comment \n\nb\n"), "a\n\n % comment\n\nb\n"); |
| |
493 assert_eq!(p("a % comment \n\n\n\nb\n"), "a % comment\n\nb\n"); |
| |
494 } |
| |
495 |
| |
496 #[test] |
| |
497 fn test4_comments_whitespace() { |
| |
498 let p = |s| process_str(Config { strip_comments : true, strip_whitespace : true }, s); |
| |
499 |
| |
500 assert_eq!(p("\\added{%\n\\begin{a}\n x\n y\n z\\end{a}}\n"), |
| |
501 "\\begin{a}\n x\n y\n z\\end{a}\n"); |
| |
502 |
| |
503 assert_eq!(p(" test % comments"), " test\n"); |
| |
504 |
| |
505 assert_eq!(p(" % comments\nline"), "line\n"); |
| |
506 |
| |
507 assert_eq!(p("a\n\n% comment\n\nb\n"), "a\n\nb\n"); |
| |
508 assert_eq!(p("a\n\n % comment \n\nb\n"), "a\n\nb\n"); |
| |
509 assert_eq!(p("a % comment \n\n\n\nb\n"), "a\n\nb\n"); |
| |
510 |
| |
511 assert_eq!(p("\\added{a % comment \n\n\n\nb}\n"), "a\n\nb\n"); |
| |
512 assert_eq!(p("c\\added{a % comment \n\n\n\nb}\n"), "ca\n\nb\n"); |
| |
513 } |
| |
514 } |