Skip to content

ilex: non-prefixed Digital rules panic on (some) invalid inputs #8

@adrianmgg

Description

@adrianmgg

ilex version: 0.5.0

Digital rules that don't have prefixes panic on some invalid inputs, from the unwrap here

let prefix = chunk.prefix.unwrap();

example:

use ilex::{rule::Digital, Lexeme};

#[ilex::spec]
struct NoPrefix {
    #[named]
    #[rule(Digital::new(10))]
    number: Lexeme<Digital>,
}

#[ilex::spec]
struct HasPrefix {
    #[named]
    #[rule(Digital::new(10).prefix("$"))]
    number: Lexeme<Digital>,
}

macro_rules! test {
    ($testname:ident, $spec:expr, $input:literal, $check:expr) => {
        #[test]
        fn $testname() {
            let ctx = ilex::Context::new();
            let report = ctx.new_report();
            let result = ctx.new_file("filename", $input).lex($spec, &report);
            assert!($check(&result));
        }
    };
}

test!(noprefix_validinput, NoPrefix::get().spec(), "123", Result::is_ok);
test!(hasprefix_validinput, HasPrefix::get().spec(), "$123", Result::is_ok);
test!(noprefix_badinput_abc, NoPrefix::get().spec(), "abc", Result::is_err);
test!(hasprefix_badinput_abc, HasPrefix::get().spec(), "abc", Result::is_err);
test!(hasprefix_badinput_prefixabc, HasPrefix::get().spec(), "$abc", Result::is_err);
test!(noprefix_badinput_other, NoPrefix::get().spec(), "#", Result::is_err);
test!(hasprefix_badinput_other, HasPrefix::get().spec(), "#", Result::is_err);
running 7 tests
test noprefix_validinput ... ok
test hasprefix_validinput ... ok
test noprefix_badinput_abc ... ok
test hasprefix_badinput_abc ... ok
test hasprefix_badinput_prefixabc ... ok
test noprefix_badinput_other ... FAILED
test hasprefix_badinput_other ... ok

failures:

---- noprefix_badinput_other stdout ----
thread 'noprefix_badinput_other' panicked at C:\Users\amgg\.cargo\registry\src\index.crates.io-6f17d22bba15001f\ilex-0.5.0\src\rt\emit2.rs:540:41:
called `Option::unwrap()` on a `None` value

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions