diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2014-12-01 11:47:16 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2014-12-01 12:09:53 +0800 |
commit | 00a881a1adb6f656049939adecb9bf9edd29a658 (patch) | |
tree | 20fb132fd91c7ce718244ab9884efe0859e7eef0 /test/parser/test-grub2-if-formats.c | |
parent | 46fbb1e1e33b130284ec211f9c647268ff709ba7 (diff) | |
download | talos-petitboot-00a881a1adb6f656049939adecb9bf9edd29a658.tar.gz talos-petitboot-00a881a1adb6f656049939adecb9bf9edd29a658.zip |
discover/grub2: improve handling of word & delimiter tokens
Currently, the delimiter token handling is a little fragile: we try to
ignore non-inter-word delimiters in the lexer with a selective set of
regexes on the possible delimiter characters.
This means we don't need to handle potential delimiters in every grammar
rule, but there are other situations (not regex-able) where we may see
delimters, and this will cause a parse error.
Instead of relying on the regex behaviour, we have an 'inter_word' flag,
which is set when we see the first word token, and cleared when we see
an end-of-line token. We only emit TOKEN_DELIM when this flag is set.
This means that we only get the delim tokens when they're required -
when we're looking for word separators (becuase WORD DELIM WORD is
distinct from WORD WORD - eg "linux /vmlinux" and "x$var").
We add a few new tests for the "menuentry" and "if" syntax, with
different delimiter configurations.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'test/parser/test-grub2-if-formats.c')
-rw-r--r-- | test/parser/test-grub2-if-formats.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/test/parser/test-grub2-if-formats.c b/test/parser/test-grub2-if-formats.c new file mode 100644 index 0000000..cbf1afb --- /dev/null +++ b/test/parser/test-grub2-if-formats.c @@ -0,0 +1,40 @@ + +#include "parser-test.h" + +#if 0 /* PARSER_EMBEDDED_CONFIG */ +if true;then t1=1;fi +if true ;then t2=2;fi +if true;then t3=3 ;fi +if true;then t4=4; ;fi +if true +then t5=5 +fi +if true +then t6=6; +fi +if true + then t7=7 +fi +if true +then t8=8; fi +if true +then +t9=9 + +fi + +menuentry $t1$t2$t3$t4$t5$t6$t7$t8$t9 {linux /vmlinux} +#endif + +void run_test(struct parser_test *test) +{ + struct discover_boot_option *opt; + + test_read_conf_embedded(test, "/grub2/grub.cfg"); + + test_run_parser(test, "grub2"); + + check_boot_option_count(test->ctx, 1); + opt = get_boot_option(test->ctx, 0); + check_name(opt, "123456789"); +} |