| #include "./grammar_codegen/backend.h" |
| |
| #include <string> |
| |
| #include "gtest/gtest.h" |
| #include "./grammar_codegen/antlr_frontend.h" |
| #include "./grammar_codegen/grammar_info.h" |
| |
| namespace fuzztest::internal::grammar { |
| |
| namespace { |
| |
| TEST(BackendTest, PreprocessInsertRuleForEOFAsNonTerminal) { |
| const std::string grammar_str = R"( |
| grammar TEST_GRAMMAR; |
| root: "A" EOF; |
| )"; |
| GrammarInfoBuilder builder; |
| Grammar grammar = builder.BuildGrammarInfo({grammar_str}, "test"); |
| CodeGenerator backend(grammar); |
| backend.Preprocess(grammar); |
| EXPECT_EQ(grammar.rules.back().symbol_name, "EOF"); |
| } |
| |
| TEST(BackendTest, PreprocessInsertRuleForEOFAsSubProduction) { |
| const std::string kGrammar = R"foo( |
| grammar TEST_GRAMMAR; |
| root: "A" ("b" EOF)*; |
| )foo"; |
| GrammarInfoBuilder builder; |
| Grammar grammar = builder.BuildGrammarInfo({kGrammar}, "test"); |
| CodeGenerator backend(grammar); |
| backend.Preprocess(grammar); |
| EXPECT_EQ(grammar.rules.back().symbol_name, "EOF"); |
| } |
| |
| } // namespace |
| |
| } // namespace fuzztest::internal::grammar |