diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/parser.rs | 74 | 
1 files changed, 43 insertions, 31 deletions
| diff --git a/src/parser.rs b/src/parser.rs index c7bccc0..1c21510 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -645,39 +645,42 @@ where      I: Stream<Item = char>,      I::Error: ParseError<I::Item, I::Range, I::Position>,  { -    definitions() -        .map(|definitions| { -            // MapGroup { -            //     maps: , -            //     modes: , -            // } - -            let mut map_group = MapGroup::default(); - -            for definition in definitions { -                match definition { -                    Definition::Map(map) => { -                        map_group.maps.insert( -                            // map.trigger, -                            // MapAction { -                            //     action: map.action, -                            //     kind: map.kind, -                            // } -                            map.0, -                            map.1, -                        ); -                    }, -                    Definition::Mode(mode) => { -                        map_group.modes.insert( -                            mode.trigger, -                            mode.maps, -                        ); -                    }, +    or( +        definitions() +            .map(|definitions| { +                // MapGroup { +                //     maps: , +                //     modes: , +                // } + +                let mut map_group = MapGroup::default(); + +                for definition in definitions { +                    match definition { +                        Definition::Map(map) => { +                            map_group.maps.insert( +                                // map.trigger, +                                // MapAction { +                                //     action: map.action, +                                //     kind: map.kind, +                                // } +                                map.0, +                                map.1, +                            ); +                        }, +                        Definition::Mode(mode) => { +                            map_group.modes.insert( +                                mode.trigger, +                                mode.maps, +                            ); +                        }, +                    }                  } -            } -            map_group -        }) +                map_group +            }), +        eof().map(|()| MapGroup::default()), +    )  }  fn comment<I>() -> impl Parser<Input = I> @@ -1361,6 +1364,15 @@ cmd <play> /usr/bin/say hello      }      #[test] +    fn map_group_empty_input_does_not_fail() { +        let text = ""; +        let result = map_group().easy_parse(text).map(|t| t.0); +        let expected = MapGroup::default(); + +        assert_eq!(result, Ok(expected)); +    } + +    #[test]      fn map_group_with_invalid_input_fails() {          let text = "not-a-kind <play> <Nop>  "; | 
