realm-js/parser/test.cpp

116 lines
2.3 KiB
C++
Raw Normal View History

#include "parser.hpp"
#include <vector>
#include <string>
#include <exception>
#include <iostream>
static std::vector<std::string> valid_queries = {
2015-11-12 22:24:37 +00:00
// true/false predicates
"truepredicate",
"falsepredicate",
2015-11-12 22:51:31 +00:00
" TRUEPREDICATE ",
" FALSEPREDICATE ",
2015-11-12 22:24:37 +00:00
// characters/strings
"\"\" = ''",
"'azAZ09/ :()[]{}<>,.^@-+=*&~`' = '\\\" \\' \\\\ \\/ \\b \\f \\n \\r \\t \\0'",
"\"azAZ09/\" = \"\\\" \\' \\\\ \\/ \\b \\f \\n \\r \\t \\0\"",
"'\\uffFf' = '\\u0020'",
"'\\u01111' = 'asdf\\u0111asdf'",
2015-11-12 22:34:47 +00:00
// expressions (numbers, bools, keypaths, arguments)
2015-11-12 22:24:37 +00:00
"-1 = 12",
"0 = 001",
"0x0 = -0X398235fcAb",
"10. = -.034",
"10.0 = 5.034",
"true = false",
"_ = a",
"_a = _.aZ",
"a09._br.z = __-__.Z-9",
2015-11-12 22:34:47 +00:00
"{0} = {19}",
"{0} = {0}",
2015-11-12 22:51:31 +00:00
// operators
"0=0",
"0 = 0",
"0!=0",
"0 != 0",
"0==0",
"0 == 0",
"0>0",
"0 > 0",
"0>=0",
"0 >= 0",
"0<0",
"0 < 0",
"0<=0",
"0 <= 0",
"0 contains 0",
"0 BeGiNsWiTh 0",
"0 ENDSWITH 0",
};
static std::vector<std::string> invalid_queries = {
"predicate",
2015-11-12 22:24:37 +00:00
"'\\a' = ''", // invalid escape
// invalid unicode
"'\\u0' = ''",
// invalid strings
"\"' = ''",
"\" = ''",
"' = ''",
2015-11-12 22:34:47 +00:00
// expressions
2015-11-12 22:24:37 +00:00
"03a = 1",
"1..0 = 1",
"1.0. = 1",
2015-11-12 22:34:47 +00:00
"1-0 = 1",
2015-11-12 22:24:37 +00:00
"0x = 1",
"truey = false",
2015-11-12 22:34:47 +00:00
"- = a",
"a..b = a",
"a$a = a",
"{} = {0}",
"{-1} = {0}",
"{a} = {0}",
"{ = }",
2015-11-12 22:51:31 +00:00
// operators
"0===>0",
"0 <> 0",
"0 contains1",
"endswith 0",
2015-11-12 22:24:37 +00:00
"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;
}
}