Minimal Imperative Parsing Library | https://docs.rs/mipl
1use mipl::prelude::*;
2
3mod common;
4use common::*;
5
6#[test]
7fn test_exact_match() {
8 let mut parser = setup_space_seps_parser("lorem ipsum");
9
10 let ipsum_parser = ExactMatch{
11 matches: String::from("ipsum")
12 };
13 parser.next();
14 assert_eq!(Some(String::from("ipsum")), ipsum_parser.try_next(&mut parser));
15}
16
17#[test]
18fn test_exact_match_try_next_advance_token() {
19 let mut parser = setup_space_seps_parser("lorem ipsum");
20
21 let ipsum_parser = ExactMatch{
22 matches: String::from("lorem")
23 };
24 ipsum_parser.try_next(&mut parser);
25
26 assert_eq!(
27 Some(
28 Token::Str( String::from("ipsum") )
29 ),
30 parser.next()
31 );
32}
33
34#[test]
35fn test_any_str_match() {
36 let mut parser = setup_space_seps_parser("\nNew path to\nGibberish!");
37
38 let any_str_matcher = AnyStrMatch;
39 let newline = any_str_matcher.try_next(&mut parser);
40 parser.next();
41 let str_new = any_str_matcher.try_next(&mut parser);
42
43 assert_eq!(None, newline);
44 assert_eq!(
45 Some(String::from("New")),
46 str_new
47 );
48}
49
50#[test]
51fn test_is_newline() {
52 let mut parser = setup_space_seps_parser("lorem ipsum\ndolor sit amet");
53
54 let newline_parser = IsNewline;
55
56 assert_eq!(None, newline_parser.try_next(&mut parser));
57
58 parser.next();
59 parser.next();
60
61 assert_eq!(Some(NewlineToken), newline_parser.try_next(&mut parser));
62
63 assert_eq!(None, newline_parser.try_next(&mut parser));
64}
65
66#[test]
67fn test_is_tab() {
68 let d_vec: Vec<char> = vec![' '];
69 let d_del = DiscardDelimiters::new(d_vec);
70 let k_vec: Vec<char> = vec!['\n', '\t'];
71 let k_del = KeepDelimiters::new(k_vec);
72 let del_param = DelimitersParam {
73 keep: k_del, discard: d_del
74 };
75
76 let mut parser = Parser::from(
77 "usage\tapp [file]".to_string(),
78 del_param
79 );
80
81 let tab_parser = IsTab;
82
83 assert_eq!(None, tab_parser.try_next(&mut parser));
84 parser.next();
85 assert_eq!(Some(TabToken), tab_parser.try_next(&mut parser));
86 assert_eq!(None, tab_parser.try_next(&mut parser));
87}