string_sequence_tester/
line.rs1#[derive(Debug, Clone)]
3pub struct Line {
4 content: String,
5 modifier: LineModifier,
6}
7
8impl Line {
9 pub fn verbatim(s: &str) -> Self {
11 Line { content: s.to_owned(), modifier: LineModifier::Verbatim }
12 }
13
14 pub fn trimmed(s: &str) -> Self {
16 Line { content: s.to_owned(), modifier: LineModifier::Trimmed }
17 }
18
19 pub(crate) fn accept(&self, s: &str) -> bool {
21 match self.modifier {
22 LineModifier::Verbatim => self.content == s,
23 LineModifier::Trimmed => self.content == s.trim(),
24 }
25 }
26}
27
28#[derive(Debug, Clone, Copy)]
30pub enum LineModifier {
31 Verbatim,
33 Trimmed,
35}
36
37#[cfg(test)]
38mod test {
39 use crate::Line;
40
41 #[test]
42 fn test_verbatim_accept() {
43 let l1 = Line::verbatim("test");
44 let l2 = Line::verbatim(" test");
45 assert!(l1.accept("test"));
46 assert!(!l1.accept(" test"));
47 assert!(l2.accept(" test"));
48 assert!(!l2.accept("test"));
49 assert!(!l1.accept("wrong"));
50 }
51
52 #[test]
53 fn test_trimmed_accept() {
54 let l1 = Line::trimmed("test");
55 assert!(l1.accept("test"));
56 assert!(l1.accept(" test"));
57 assert!(l1.accept("test "));
58 assert!(!l1.accept("wrong"));
59 assert!(!l1.accept(" wrong"));
60 }
61}