@Test public void testSmarterLookupEnumsDifferentOrder() { final SuggestionCompletionEngine sce = new SuggestionCompletionEngine(); sce.setDataEnumLists(new HashMap<String, String[]>()); sce.putDataEnumList("Fact.type", new String[] {"sex", "colour"}); sce.putDataEnumList( "Fact.value[e1, e2]", new String[] {"select something from database where x=@{e1} and y=@{e2}"}); sce.putDataEnumList( "Fact.value[f1, f2]", new String[] {"select something from database where x=@{f1} and y=@{f2}"}); FactPattern fp = new FactPattern("Fact"); String[] drops = sce.getEnums(fp.getFactType(), fp.constraintList, "type").fixedList; assertEquals(2, drops.length); assertEquals("sex", drops[0]); assertEquals("colour", drops[1]); Map<String, Object> lookupFields = sce.loadDataEnumLookupFields(); assertEquals(1, lookupFields.size()); String[] flds = (String[]) lookupFields.get("Fact.value"); assertEquals(2, flds.length); assertEquals("f1", flds[0]); assertEquals("f2", flds[1]); FactPattern pat = new FactPattern("Fact"); SingleFieldConstraint sfc = new SingleFieldConstraint("f1"); sfc.setValue("f1val"); pat.addConstraint(sfc); sfc = new SingleFieldConstraint("f2"); sfc.setValue("f2val"); pat.addConstraint(sfc); DropDownData dd = sce.getEnums(pat.getFactType(), pat.constraintList, "value"); assertNull(dd.fixedList); assertNotNull(dd.queryExpression); assertNotNull(dd.valuePairs); assertEquals(2, dd.valuePairs.length); assertEquals("select something from database where x=@{f1} and y=@{f2}", dd.queryExpression); assertEquals("f1=f1val", dd.valuePairs[0]); assertEquals("f2=f2val", dd.valuePairs[1]); // and now for the RHS ActionFieldValue[] vals = new ActionFieldValue[2]; vals[0] = new ActionFieldValue("f1", "f1val", "blah"); vals[1] = new ActionFieldValue("f2", "f2val", "blah"); dd = sce.getEnums("Fact", "value", vals); assertNull(dd.fixedList); assertNotNull(dd.queryExpression); assertNotNull(dd.valuePairs); assertEquals(2, dd.valuePairs.length); assertEquals("select something from database where x=@{f1} and y=@{f2}", dd.queryExpression); assertEquals("f1=f1val", dd.valuePairs[0]); assertEquals("f2=f2val", dd.valuePairs[1]); }