1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
use test;
use parser;
Str check(Result<Array<Str>> r) {
if (x = r.value) {
x.toS;
} else if (e = r.error) {
"Error at ${e.pos}, ${e.message}";
} else {
"<invalid>";
}
}
Str check(Result<Str> r) {
if (x = r.value) {
x;
} else if (e = r.error) {
"Error at ${e.pos}, ${e.message}";
} else {
"<invalid>";
}
}
Str check(Result<Maybe<Str>> r) {
if (x = r.value) {
x.toS;
} else if (e = r.error) {
"Error at ${e.pos}, ${e.message}";
} else {
"<invalid>";
}
}
parseList : parser(recursive descent) {
start = List;
}
test SimpleRecursive {
// TODO: Test with true/false in them, so we can skip "== true".
check check(parseList("A, B, C")) == "[A, B, C]";
Str x = ",A, B, C";
check check(parseList(x, x.begin + 1)) == "[A, B, C]";
}
parseRepList : parser(recursive descent) {
start = RepList;
}
test RepRecursive {
check check(parseRepList("[A, B,]")) == "[A, B]";
check check(parseRepList("{A, B,}")) == "[A, B]";
check check(parseRepList("[]")) == "[]";
check check(parseRepList("{}")) == "Error at Iterator: {|>}, Expected one of:\n\"[A-Z]+\"";
}
parseOptional : parser(recursive descent) {
start = Optional;
}
test OptionalRecursive {
check check(parseOptional("=")) == "null";
check check(parseOptional("=ZA")) == "ZA";
}
parseCapture : parser(recursive descent) {
start = Capture;
}
test CaptureRecursive {
check check(parseCapture("[A, C]")) == "A, C";
check check(parseCapture("zA, D")) == "A, D";
}
|