add basic test harness for grammer validation

This commit is contained in:
Ari Lazier 2015-11-11 14:54:05 -08:00
parent bd04f5584b
commit d455aaf402
4 changed files with 48 additions and 8 deletions

View File

@ -1,7 +0,0 @@
#include "parser.hpp"
int main( int argc, char ** argv )
{
realm::parser::parse(argv[1]);
}

View File

@ -137,7 +137,6 @@ struct ParserState
template< typename Rule >
struct action : nothing< Rule > {};
#define REALM_PARSER_PRINT_TOKENS
#ifdef REALM_PARSER_PRINT_TOKENS
#define DEBUG_PRINT_TOKEN(string) std::cout << string << std::endl
#else

45
parser/test.cpp Normal file
View File

@ -0,0 +1,45 @@
#include "parser.hpp"
#include <vector>
#include <string>
#include <exception>
#include <iostream>
static std::vector<std::string> valid_queries = {
"truepredicate",
"falsepredicate",
"TRUEPREDICATE",
"FALSEPREDICATE",
"truepredicate && truepredicate"
};
static std::vector<std::string> invalid_queries = {
"predicate",
"truepredicate &&",
"truepredicate & truepredicate",
};
int main( int argc, char ** argv )
{
for (auto &query : valid_queries) {
std::cout << "valid query: " << query << std::endl;
try {
realm::parser::parse(query);
} catch (std::exception &ex) {
std::cout << "FAILURE - " << ex.what() << std::endl;
}
}
for (auto &query : invalid_queries) {
std::cout << "invalid query: " << query << std::endl;
try {
realm::parser::parse(query);
} catch (std::exception &ex) {
// std::cout << "message: " << ex.what() << std::endl;
continue;
}
std::cout << "FAILURE - query should throw an exception" << std::endl;
}
}

3
parser/test.sh Executable file
View File

@ -0,0 +1,3 @@
# /bin/sh
llvm-g++ -std=c++11 -I ../../../vendor/PEGTL/ -o test test.cpp parser.cpp
./test