var ir = dsl.sortConditionsByValue(dsl.parse("
? 2 : tag:work
? 4 : tag:vacation
? 2 : tag:office
? 1 : tag:home
")); // numeric, descending, conditions
assertEquals("conditions", listSort(structKeyList(ir), 'text'));
assertEquals(4, arrayLen(ir.conditions));
assertEquals("4", ir.conditions[1].value);
assertEquals("2", ir.conditions[2].value);
assertEquals("tag:work", ir.conditions[2].query);
assertEquals("2", ir.conditions[3].value);
assertEquals("1", ir.conditions[4].value);
var ir = dsl.sortConditionsByValue(dsl.parse("
& 2 : tag:work
& 4 : tag:vacation
& 2 : tag:office
& 1 : tag:home
"), 'numeric', 'desc', true); // numeric, descending, conditions
assertEquals("aggregates", listSort(structKeyList(ir), 'text'));
assertEquals(4, arrayLen(ir.aggregates));
assertEquals("4", ir.aggregates[1].value);
assertEquals("2", ir.aggregates[2].value);
assertEquals("tag:work", ir.aggregates[2].query);
assertEquals("2", ir.aggregates[3].value);
assertEquals("1", ir.aggregates[4].value);
var ir = dsl.sortConditionsByValue(dsl.parse("
? 2 : tag:work
? 4 : tag:vacation
? 2 : tag:office
? 1 : tag:home
"), 'numeric', 'asc'); // conditions
assertEquals("conditions", listSort(structKeyList(ir), 'text'));
assertEquals(4, arrayLen(ir.conditions));
assertEquals("1", ir.conditions[1].value);
assertEquals("2", ir.conditions[2].value);
assertEquals("tag:work", ir.conditions[2].query);
assertEquals("2", ir.conditions[3].value);
assertEquals("4", ir.conditions[4].value);
var ir = dsl.sortConditionsByValue(dsl.parse("
? two : tag:work
? four : tag:vacation
? TWO : tag:office
? ONE : tag:home
"), 'textNoCase', 'asc'); // conditions
assertEquals("conditions", listSort(structKeyList(ir), 'text'));
assertEquals(4, arrayLen(ir.conditions));
assertEquals("four", ir.conditions[1].value);
assertEquals("ONE", ir.conditions[2].value);
assertEquals("two", ir.conditions[3].value);
assertEquals("tag:work", ir.conditions[3].query);
assertEquals("TWO", ir.conditions[4].value);
var ir = dsl.sortConditionsByValue(dsl.parse("
? two : tag:work
? four : tag:vacation
? TWO : tag:office
? ONE : tag:home
"), 'text', 'asc'); // conditions
assertEquals("conditions", listSort(structKeyList(ir), 'text'));
assertEquals(4, arrayLen(ir.conditions));
assertEquals("ONE", ir.conditions[1].value);
assertEquals("TWO", ir.conditions[2].value);
assertEquals("four", ir.conditions[3].value);
assertEquals("two", ir.conditions[4].value);
assertEquals("tag:work", ir.conditions[4].query);