var ir = dsl.parse("
##
## globals
##
+ tag:barney
##
## conditions
##
? Breakfast : tag:breakfast
? Lunch : tag:lunch
? Dinner : tag:dinner
##
## aggregates
##
& Total : tag:meal
");
assertEquals("aggregates,conditions,coreCriterion,coreQuery", listSort(structKeyList(ir), 'text'));
assertEquals("tag:barney", ir.coreQuery);
assertEquals(3, arrayLen(ir.conditions));
assertEquals("Breakfast", ir.conditions[1].value);
assertEquals("tag:breakfast", ir.conditions[1].query);
assertEquals(1, arrayLen(ir.aggregates));
assertEquals("Total", ir.aggregates[1].value);
assertEquals("tag:meal", ir.aggregates[1].query);
var ir = dsl.parse("
? bkfst : tag:breakfast
& dinner : tag:dinner
");
assertEquals("aggregates,conditions", listSort(structKeyList(ir), 'text'));
assertEquals(1, arrayLen(ir.conditions));
assertEquals("bkfst", ir.conditions[1].value);
assertEquals("tag:breakfast", ir.conditions[1].query);
assertEquals(1, arrayLen(ir.aggregates));
assertEquals("dinner", ir.aggregates[1].value);
assertEquals("tag:dinner", ir.aggregates[1].query);
var ir = dsl.parse("
? ""my:value"" : tag:meal
");
assertEquals("conditions", listSort(structKeyList(ir), 'text'));
assertEquals(1, arrayLen(ir.conditions));
assertEquals("my:value", ir.conditions[1].value);
assertEquals("tag:meal", ir.conditions[1].query);
var ir = dsl.parse("
? '' : tag:meal
");
assertEquals("conditions", listSort(structKeyList(ir), 'text'));
assertEquals(1, arrayLen(ir.conditions));
assertEquals("", ir.conditions[1].value);
assertEquals("tag:meal", ir.conditions[1].query);
var ir = dsl.parse("
? all : *
");
assertEquals("conditions", listSort(structKeyList(ir), 'text'));
assertEquals(1, arrayLen(ir.conditions));
assertEquals("all", ir.conditions[1].value);
assertEquals("", ir.conditions[1].query);
try {
dsl.parse("!sdf");
fail("didn't error on invalid command");
} catch (MalformedDslDocument.InvalidCommand e) {
// good
}
try {
dsl.parse("? barney");
fail("didn't error on one part line");
} catch (MalformedDslDocument.InvalidCondition e) {
// good
}