|
| 1 | +use lino::{parse_lino, LiNo}; |
| 2 | + |
| 3 | +#[test] |
| 4 | +fn test_multiline_double_quoted_reference() { |
| 5 | + let input = r#"( |
| 6 | + "long |
| 7 | +string literal representing |
| 8 | +the reference" |
| 9 | +
|
| 10 | + 'another |
| 11 | +long string literal |
| 12 | +as another reference' |
| 13 | +)"#; |
| 14 | + let result = parse_lino(input).unwrap(); |
| 15 | + |
| 16 | + if let LiNo::Link { id: outer_id, values: outer_values } = &result { |
| 17 | + assert!(outer_id.is_none()); |
| 18 | + assert_eq!(outer_values.len(), 1); |
| 19 | + |
| 20 | + if let LiNo::Link { id, values } = &outer_values[0] { |
| 21 | + assert!(id.is_none()); |
| 22 | + assert_eq!(values.len(), 2); |
| 23 | + |
| 24 | + if let LiNo::Ref(ref first_value) = values[0] { |
| 25 | + assert_eq!(first_value, "long\nstring literal representing\nthe reference"); |
| 26 | + } else { |
| 27 | + panic!("Expected first value to be a Ref"); |
| 28 | + } |
| 29 | + |
| 30 | + if let LiNo::Ref(ref second_value) = values[1] { |
| 31 | + assert_eq!(second_value, "another\nlong string literal\nas another reference"); |
| 32 | + } else { |
| 33 | + panic!("Expected second value to be a Ref"); |
| 34 | + } |
| 35 | + } else { |
| 36 | + panic!("Expected first outer value to be a Link"); |
| 37 | + } |
| 38 | + } else { |
| 39 | + panic!("Expected result to be a Link"); |
| 40 | + } |
| 41 | +} |
| 42 | + |
| 43 | +#[test] |
| 44 | +fn test_simple_multiline_double_quoted() { |
| 45 | + let input = r#"("line1 |
| 46 | +line2")"#; |
| 47 | + let result = parse_lino(input).unwrap(); |
| 48 | + |
| 49 | + if let LiNo::Link { id, values } = &result { |
| 50 | + assert!(id.is_none()); |
| 51 | + assert_eq!(values.len(), 1); |
| 52 | + |
| 53 | + if let LiNo::Ref(ref value) = values[0] { |
| 54 | + assert_eq!(value, "line1\nline2"); |
| 55 | + } else { |
| 56 | + panic!("Expected value to be a Ref"); |
| 57 | + } |
| 58 | + } else { |
| 59 | + panic!("Expected result to be a Link"); |
| 60 | + } |
| 61 | +} |
| 62 | + |
| 63 | +#[test] |
| 64 | +fn test_simple_multiline_single_quoted() { |
| 65 | + let input = r#"('line1 |
| 66 | +line2')"#; |
| 67 | + let result = parse_lino(input).unwrap(); |
| 68 | + |
| 69 | + if let LiNo::Link { id, values } = &result { |
| 70 | + assert!(id.is_none()); |
| 71 | + assert_eq!(values.len(), 1); |
| 72 | + |
| 73 | + if let LiNo::Ref(ref value) = values[0] { |
| 74 | + assert_eq!(value, "line1\nline2"); |
| 75 | + } else { |
| 76 | + panic!("Expected value to be a Ref"); |
| 77 | + } |
| 78 | + } else { |
| 79 | + panic!("Expected result to be a Link"); |
| 80 | + } |
| 81 | +} |
| 82 | + |
| 83 | +#[test] |
| 84 | +fn test_multiline_quoted_as_id() { |
| 85 | + let input = r#"("multi |
| 86 | +line |
| 87 | +id": value1 value2)"#; |
| 88 | + let result = parse_lino(input).unwrap(); |
| 89 | + |
| 90 | + if let LiNo::Link { id: outer_id, values: outer_values } = &result { |
| 91 | + assert!(outer_id.is_none()); |
| 92 | + assert_eq!(outer_values.len(), 1); |
| 93 | + |
| 94 | + if let LiNo::Link { id, values } = &outer_values[0] { |
| 95 | + assert_eq!(id.as_ref().unwrap(), "multi\nline\nid"); |
| 96 | + assert_eq!(values.len(), 2); |
| 97 | + } else { |
| 98 | + panic!("Expected first value to be a Link"); |
| 99 | + } |
| 100 | + } else { |
| 101 | + panic!("Expected result to be a Link"); |
| 102 | + } |
| 103 | +} |
0 commit comments