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 }