src/main.rs

changeset 8
945a396340d2
parent 7
68538da191c7
child 9
87d632a18fc2
equal deleted inserted replaced
7:68538da191c7 8:945a396340d2
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 }

mercurial