summaryrefslogtreecommitdiffstats
path: root/test/parser/test-grub2-menuentry-formats.c
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2014-12-01 11:47:16 +0800
committerJeremy Kerr <jk@ozlabs.org>2014-12-01 12:09:53 +0800
commit00a881a1adb6f656049939adecb9bf9edd29a658 (patch)
tree20fb132fd91c7ce718244ab9884efe0859e7eef0 /test/parser/test-grub2-menuentry-formats.c
parent46fbb1e1e33b130284ec211f9c647268ff709ba7 (diff)
downloadtalos-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-menuentry-formats.c')
-rw-r--r--test/parser/test-grub2-menuentry-formats.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/parser/test-grub2-menuentry-formats.c b/test/parser/test-grub2-menuentry-formats.c
new file mode 100644
index 0000000..132ce8d
--- /dev/null
+++ b/test/parser/test-grub2-menuentry-formats.c
@@ -0,0 +1,41 @@
+
+#include "parser-test.h"
+
+#if 0 /* PARSER_EMBEDDED_CONFIG */
+menuentry "test.0" {linux /vmlinux;}
+menuentry "test.1" {linux /vmlinux}
+menuentry "test.2" {linux /vmlinux }
+menuentry "test.3" { linux /vmlinux; }
+menuentry "test.4" {linux /vmlinux ;}
+menuentry "test.5" {
+linux /vmlinux;}
+menuentry "test.6" {linux /vmlinux
+}
+menuentry "test.7" {
+linux /vmlinux
+}
+menuentry "test.8" {
+ linux /vmlinux
+}
+menuentry "test.9" {
+ linux /vmlinux
+ }
+#endif
+
+void run_test(struct parser_test *test)
+{
+ struct discover_boot_option *opt;
+ char str[] = "test.0";
+ int i;
+
+ test_read_conf_embedded(test, "/grub2/grub.cfg");
+
+ test_run_parser(test, "grub2");
+
+ check_boot_option_count(test->ctx, 10);
+ for (i = 0; i < 8; i++) {
+ opt = get_boot_option(test->ctx, i);
+ str[5] = i + '0';
+ check_name(opt, str);
+ }
+}
OpenPOWER on IntegriCloud