@Test public void testGlobalAndFacts() { final SuggestionCompletionEngine com = new SuggestionCompletionEngine(); com.setGlobalVariables( new HashMap<String, String>() { { put("y", "Foo"); } }); com.setFieldsForTypes( new HashMap<String, ModelField[]>() { { put( "Foo", new ModelField[] { new ModelField( "a", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, "String") }); } }); assertFalse(com.isGlobalVariable("x")); assertTrue(com.isGlobalVariable("y")); }
@Test public void testDataEnums3() { String pkg = "package org.test\n import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngineTest.NestedClass"; SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); List<String> enums = new ArrayList<String>(); enums.add( "'Fact.f1' : ['a1', 'a2'] \n 'Fact.f2' : ['def1', 'def2', 'def3'] \n 'Fact.f2[f1=a2]' : ['c1', 'c2']"); SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList<JarInputStream>(), new ArrayList<DSLTokenizedMappingFile>(), enums); assertEquals( "String", engine.getFieldType("SuggestionCompletionEngineTest$NestedClass", "name")); FactPattern pat = new FactPattern("Fact"); SingleFieldConstraint f1 = new SingleFieldConstraint("f1"); f1.setValue("a1"); pat.addConstraint(f1); pat.addConstraint(new SingleFieldConstraint("f2")); DropDownData data = engine.getEnums(pat.getFactType(), pat.constraintList, "f2"); assertNotNull(data); assertEquals(3, data.fixedList.length); }
@Test public void testDependentEnums() { String pkg = "package org.test\n import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngineTest.Fact"; SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); List<String> enums = new ArrayList<String>(); final String enumDefinition = "'Fact.field1' : ['val1', 'val2'], " + "'Fact.field2[field1=val1]' : ['f1val1a', 'f1val1b'], " + "'Fact.field2[field1=val2]' : ['f1val2a', 'f1val2b'], " + "'Fact.field3[field2=f1val1a]' : ['f1val1a1a', 'f1val1a1b'], " + "'Fact.field3[field2=f1val1b]' : ['f1val1b1a', 'f1val1b1b'], " + "'Fact.field3[field2=f1val2a]' : ['f1val2a1a', 'f1val2a1b'], " + "'Fact.field3[field2=f1val2b]' : ['f1val2a2a', 'f1val2b2b'], " + "'Fact.field4' : ['f4val1', 'f4val2']"; enums.add(enumDefinition); SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList<JarInputStream>(), new ArrayList<DSLTokenizedMappingFile>(), enums); assertTrue(engine.isDependentEnum("Fact", "field1", "field2")); assertTrue(engine.isDependentEnum("Fact", "field1", "field3")); assertTrue(engine.isDependentEnum("Fact", "field2", "field3")); assertFalse(engine.isDependentEnum("Fact", "field1", "field4")); }
@Test public void testStringNonNumeric() { String pkg = "package org.test\n import org.drools.ide.common.client.modeldriven.Alert"; SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList<JarInputStream>(), new ArrayList<DSLTokenizedMappingFile>()); assertEquals(SuggestionCompletionEngine.TYPE_STRING, engine.getFieldType("Alert", "message")); }
@Test public void testNestedImports() { String pkg = "package org.test\n import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngineTest.NestedClass"; SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList<JarInputStream>(), new ArrayList<DSLTokenizedMappingFile>()); assertEquals( "String", engine.getFieldType("SuggestionCompletionEngineTest$NestedClass", "name")); }
@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]); }
@Test public void testCEPWindowOperators() { List<String> operators = SuggestionCompletionEngine.getCEPWindowOperators(); assertEquals(2, operators.size()); assertEquals("over window:time", operators.get(0)); assertEquals("over window:length", operators.get(1)); }
@Test public void testDataEnums() { String pkg = "package org.test\n import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngineTest.NestedClass"; SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); List<String> enums = new ArrayList<String>(); enums.add("'Person.age' : [42, 43] \n 'Person.sex' : ['M', 'F']"); enums.add("'Driver.sex' : ['M', 'F']"); SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList<JarInputStream>(), new ArrayList<DSLTokenizedMappingFile>(), enums); assertEquals( "String", engine.getFieldType("SuggestionCompletionEngineTest$NestedClass", "name")); assertEquals(3, engine.getDataEnumListsSize()); String[] items = engine.getDataEnumList("Person.age"); assertEquals(2, items.length); assertEquals("42", items[0]); assertEquals("43", items[1]); items = engine.getEnums("Person", null, "age").fixedList; assertEquals(2, items.length); assertEquals("42", items[0]); assertEquals("43", items[1]); assertNull(engine.getEnums("Nothing", null, "age")); assertEquals(null, engine.getEnums("Something", null, "else")); }
@Test public void testSmartEnums() { final SuggestionCompletionEngine sce = new SuggestionCompletionEngine(); sce.setDataEnumLists(new HashMap<String, String[]>()); sce.putDataEnumList("Fact.type", new String[] {"sex", "colour"}); sce.putDataEnumList("Fact.value[type=sex]", new String[] {"M", "F"}); sce.putDataEnumList("Fact.value[type=colour]", new String[] {"RED", "WHITE", "BLUE"}); FactPattern pat = new FactPattern("Fact"); SingleFieldConstraint sfc = new SingleFieldConstraint("type"); sfc.setValue("sex"); pat.addConstraint(sfc); String[] result = sce.getEnums(pat.getFactType(), pat.constraintList, "value").fixedList; assertEquals(2, result.length); assertEquals("M", result[0]); assertEquals("F", result[1]); pat = new FactPattern("Fact"); sfc = new SingleFieldConstraint("type"); sfc.setValue("colour"); pat.addConstraint(sfc); result = sce.getEnums(pat.getFactType(), pat.constraintList, "value").fixedList; assertEquals(3, result.length); assertEquals("RED", result[0]); assertEquals("WHITE", result[1]); assertEquals("BLUE", result[2]); result = sce.getEnums(pat.getFactType(), pat.constraintList, "type").fixedList; assertEquals(2, result.length); assertEquals("sex", result[0]); assertEquals("colour", result[1]); ActionFieldValue[] vals = new ActionFieldValue[2]; vals[0] = new ActionFieldValue("type", "sex", "blah"); vals[1] = new ActionFieldValue("value", null, "blah"); result = sce.getEnums("Fact", "value", vals).fixedList; assertNotNull(result); assertEquals(2, result.length); assertEquals("M", result[0]); assertEquals("F", result[1]); assertNull(sce.getEnums("Nothing", "value", vals)); }
@Test public void testSimpleEnums() { final SuggestionCompletionEngine sce = new SuggestionCompletionEngine(); sce.setDataEnumLists(new HashMap<String, String[]>()); sce.putDataEnumList("Fact.type", new String[] {"sex", "colour"}); assertEquals(2, sce.getEnumValues("Fact", "type").length); assertEquals("sex", sce.getEnumValues("Fact", "type")[0]); assertEquals("colour", sce.getEnumValues("Fact", "type")[1]); }
@Test public void testDataHasEnums() { String pkg = "package org.test\n import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngineTest.Fact"; SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); List<String> enums = new ArrayList<String>(); enums.add( "'Fact.field1' : ['val1', 'val2'], 'Fact.field2[field1=val1]' : ['f1val1a', 'f1val1b'], 'Fact.field2[field1=val2]' : ['f1val2a', 'f1val2b']"); SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList<JarInputStream>(), new ArrayList<DSLTokenizedMappingFile>(), enums); // Fact.field1 has explicit enumerations assertTrue(engine.hasEnums("Fact.field1")); assertTrue(engine.hasEnums("Fact", "field1")); // Fact.field2 has explicit enumerations dependent upon Fact.field1 assertTrue(engine.hasEnums("Fact.field2")); assertTrue(engine.hasEnums("Fact", "field2")); }
@Test public void testSmartEnumsDependingOfSeveralFieldsFive() { final SuggestionCompletionEngine sce = new SuggestionCompletionEngine(); sce.setDataEnumLists(new HashMap<String, String[]>()); sce.putDataEnumList("Fact.field1", new String[] {"a1", "a2"}); sce.putDataEnumList("Fact.field2", new String[] {"b1", "b2"}); sce.putDataEnumList("Fact.field3", new String[] {"c1", "c2", "c3"}); sce.putDataEnumList("Fact.longerField4", new String[] {"d1", "d2"}); sce.putDataEnumList("Fact.field5", new String[] {"e1", "e2"}); sce.putDataEnumList( "Fact.field6[field1=a1, field2=b2, field3=c3,longerField4=d1,field5=e2]", new String[] {"f1", "f2"}); FactPattern pat = new FactPattern("Fact"); SingleFieldConstraint sfc = new SingleFieldConstraint("field1"); sfc.setValue("a1"); pat.addConstraint(sfc); SingleFieldConstraint sfc2 = new SingleFieldConstraint("field2"); sfc2.setValue("b2"); pat.addConstraint(sfc2); SingleFieldConstraint sfc3 = new SingleFieldConstraint("field3"); sfc3.setValue("c3"); pat.addConstraint(sfc3); SingleFieldConstraint sfc4 = new SingleFieldConstraint("longerField4"); sfc4.setValue("d1"); pat.addConstraint(sfc4); assertNull(sce.getEnums(pat.getFactType(), pat.constraintList, "field6")); SingleFieldConstraint sfc5 = new SingleFieldConstraint("field5"); sfc5.setValue("e2"); pat.addConstraint(sfc5); String[] result2 = sce.getEnums(pat.getFactType(), pat.constraintList, "field6").fixedList; assertEquals(2, result2.length); assertEquals("f1", result2[0]); assertEquals("f2", result2[1]); }
@Test public void testDataEnums2() { String pkg = "package org.test\n import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngineTest.Fact"; SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); List<String> enums = new ArrayList<String>(); enums.add( "'Fact.field1' : ['val1', 'val2'], 'Fact.field2' : ['val3', 'val4'], 'Fact.field2[field1=val1]' : ['f1val1a', 'f1val1b'], 'Fact.field2[field1=val2]' : ['f1val2a', 'f1val2b']"); SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList<JarInputStream>(), new ArrayList<DSLTokenizedMappingFile>(), enums); assertEquals("String", engine.getFieldType("SuggestionCompletionEngineTest$Fact", "field1")); assertEquals("String", engine.getFieldType("SuggestionCompletionEngineTest$Fact", "field2")); assertEquals(4, engine.getDataEnumListsSize()); String[] items = engine.getDataEnumList("Fact.field2"); assertEquals(2, items.length); assertEquals("val3", items[0]); assertEquals("val4", items[1]); FactPattern pat = new FactPattern("Fact"); SingleFieldConstraint sfc = new SingleFieldConstraint("field2"); pat.addConstraint(sfc); items = engine.getEnums(pat.getFactType(), pat.constraintList, "field2").fixedList; assertEquals(2, items.length); assertEquals("val3", items[0]); assertEquals("val4", items[1]); items = engine.getDataEnumList("Fact.field1"); assertEquals(2, items.length); assertEquals("val1", items[0]); assertEquals("val2", items[1]); items = engine.getEnums("Fact", null, "field1").fixedList; assertEquals(2, items.length); assertEquals("val1", items[0]); assertEquals("val2", items[1]); }
@Test public void testAdd() { final SuggestionCompletionEngine com = new SuggestionCompletionEngine(); com.setFactTypes(new String[] {"Foo"}); com.setFieldsForTypes( new HashMap<String, ModelField[]>() { { put( "Foo", new ModelField[] { new ModelField( "a", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, "String") }); } }); assertEquals(1, com.getFactTypes().length); assertEquals("Foo", com.getFactTypes()[0]); assertEquals(1, com.getFieldCompletions("Foo").length); assertEquals("a", com.getFieldCompletions("Foo")[0]); }
@Test public void testSmartEnumsDependingOfSeveralFieldsTwo() { final SuggestionCompletionEngine sce = new SuggestionCompletionEngine(); sce.setDataEnumLists(new HashMap<String, String[]>()); sce.putDataEnumList("Fact.field1", new String[] {"a1", "a2"}); sce.putDataEnumList("Fact.field2", new String[] {"b1", "b2"}); sce.putDataEnumList("Fact.field3[field1=a1,field2=b1]", new String[] {"c1", "c2", "c3"}); sce.putDataEnumList("Fact.field4[field1=a1]", new String[] {"d1", "d2"}); FactPattern pat = new FactPattern("Fact"); SingleFieldConstraint sfc = new SingleFieldConstraint("field1"); sfc.setValue("a1"); pat.addConstraint(sfc); SingleFieldConstraint sfc2 = new SingleFieldConstraint("field2"); sfc2.setValue("b1"); pat.addConstraint(sfc2); String[] result = sce.getEnums(pat.getFactType(), pat.constraintList, "field3").fixedList; assertEquals(3, result.length); assertEquals("c1", result[0]); assertEquals("c2", result[1]); assertEquals("c3", result[2]); }
@Test public void testDataTypes() { String pkg = "package org.test\n import org.drools.DataTypes"; SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList<JarInputStream>(), new ArrayList<DSLTokenizedMappingFile>()); assertEquals( SuggestionCompletionEngine.TYPE_STRING, engine.getFieldType("DataTypes", "fieldString")); assertEquals( SuggestionCompletionEngine.TYPE_BOOLEAN, engine.getFieldType("DataTypes", "fieldBooleanObject")); assertEquals( SuggestionCompletionEngine.TYPE_DATE, engine.getFieldType("DataTypes", "fieldDate")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_BIGDECIMAL, engine.getFieldType("DataTypes", "fieldNumeric")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_BIGDECIMAL, engine.getFieldType("DataTypes", "fieldBigDecimal")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_BIGINTEGER, engine.getFieldType("DataTypes", "fieldBigInteger")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_BYTE, engine.getFieldType("DataTypes", "fieldByteObject")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_DOUBLE, engine.getFieldType("DataTypes", "fieldDoubleObject")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_FLOAT, engine.getFieldType("DataTypes", "fieldFloatObject")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_INTEGER, engine.getFieldType("DataTypes", "fieldIntegerObject")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_LONG, engine.getFieldType("DataTypes", "fieldLongObject")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_SHORT, engine.getFieldType("DataTypes", "fieldShortObject")); assertEquals( SuggestionCompletionEngine.TYPE_BOOLEAN, engine.getFieldType("DataTypes", "fieldBooleanPrimitive")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_BYTE, engine.getFieldType("DataTypes", "fieldBytePrimitive")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_DOUBLE, engine.getFieldType("DataTypes", "fieldDoublePrimitive")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_FLOAT, engine.getFieldType("DataTypes", "fieldFloatPrimitive")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_INTEGER, engine.getFieldType("DataTypes", "fieldIntegerPrimitive")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_LONG, engine.getFieldType("DataTypes", "fieldLongPrimitive")); assertEquals( SuggestionCompletionEngine.TYPE_NUMERIC_SHORT, engine.getFieldType("DataTypes", "fieldShortPrimitive")); }
@Test public void testFilter() { final SuggestionCompletionEngine sce = new SuggestionCompletionEngine(); sce.setFactTypes(new String[] {"Person", "Vehicle"}); sce.setFieldsForTypes( new HashMap<String, ModelField[]>() { { put( "Person", new ModelField[] { new ModelField( "age", Integer.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_NUMERIC_INTEGER), }); put( "Vehicle", new ModelField[] { new ModelField( "make", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_STRING), }); } }); assertEquals(2, sce.getFactTypes().length); sce.setFactTypeFilter( new FactTypeFilter() { public boolean filter(String originalFact) { return "Person".equals(originalFact); } }); assertEquals(1, sce.getFactTypes().length); sce.setFilteringFacts(false); assertEquals(2, sce.getFactTypes().length); sce.setFilteringFacts(true); assertEquals(1, sce.getFactTypes().length); sce.setFactTypeFilter(null); assertEquals(2, sce.getFactTypes().length); }
@Test public void testCompletions() { final SuggestionCompletionEngine com = new SuggestionCompletionEngine(); com.setFactTypes(new String[] {"Person", "Vehicle"}); com.setFieldsForTypes( new HashMap<String, ModelField[]>() { { put( "Person", new ModelField[] { new ModelField( "age", Integer.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_NUMERIC_INTEGER), new ModelField( "rank", Integer.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_COMPARABLE), new ModelField( "name", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_STRING) }); put( "Vehicle", new ModelField[] { new ModelField( "make", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_STRING), new ModelField( "type", String.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_STRING) }); } }); com.setGlobalVariables( new HashMap<String, String>() { { put("bar", "Person"); put("baz", "Vehicle"); } }); String[] c = com.getConditionalElements(); assertEquals("not", c[0]); assertEquals("exists", c[1]); assertEquals("or", c[2]); c = com.getFactTypes(); assertEquals(2, c.length); assertContains("Person", c); assertContains("Vehicle", c); c = com.getFieldCompletions("Person"); assertEquals("age", c[0]); assertEquals("rank", c[1]); assertEquals("name", c[2]); c = com.getFieldCompletions("Vehicle"); assertEquals("type", c[1]); assertEquals("make", c[0]); c = com.getOperatorCompletions("Person", "name"); assertEquals(11, c.length); assertEquals("==", c[0]); assertEquals("!=", c[1]); assertEquals("<", c[2]); assertEquals(">", c[3]); assertEquals("<=", c[4]); assertEquals(">=", c[5]); assertEquals("matches", c[6]); assertEquals("soundslike", c[7]); assertEquals("== null", c[8]); assertEquals("!= null", c[9]); assertEquals("in", c[10]); c = com.getOperatorCompletions("Person", "age"); assertEquals(8, c.length); assertEquals(c[0], "=="); assertEquals(c[1], "!="); assertEquals(c[2], "<"); assertEquals(c[3], ">"); assertEquals(c[4], "<="); assertEquals(c[5], ">="); assertEquals(c[6], "== null"); assertEquals(c[7], "!= null"); c = com.getOperatorCompletions("Person", "rank"); assertEquals(8, c.length); assertEquals(c[0], "=="); assertEquals(c[1], "!="); assertEquals(c[2], "<"); assertEquals(c[3], ">"); assertEquals(c[4], "<="); assertEquals(c[5], ">="); assertEquals(c[6], "== null"); assertEquals(c[7], "!= null"); c = com.getConnectiveOperatorCompletions("Vehicle", "make"); assertEquals(13, c.length); assertEquals("|| ==", c[0]); assertEquals("|| !=", c[1]); assertEquals("&& !=", c[2]); assertEquals("&& >", c[3]); assertEquals("&& <", c[4]); assertEquals("|| >", c[5]); assertEquals("|| <", c[6]); assertEquals("&& >=", c[7]); assertEquals("&& <=", c[8]); assertEquals("|| <=", c[9]); assertEquals("|| >=", c[10]); assertEquals("&& matches", c[11]); assertEquals("|| matches", c[12]); c = com.getGlobalVariables(); assertEquals(2, c.length); assertEquals("baz", c[0]); assertEquals("bar", c[1]); c = com.getFieldCompletionsForGlobalVariable("bar"); assertEquals(3, c.length); assertEquals("age", c[0]); assertEquals("rank", c[1]); assertEquals("name", c[2]); c = com.getFieldCompletionsForGlobalVariable("baz"); assertEquals(2, c.length); assertEquals("make", c[0]); assertEquals("type", c[1]); // check that it has default operators for general objects c = com.getOperatorCompletions("Person", "wankle"); assertEquals(4, c.length); assertEquals("Integer", com.getFieldType("Person", "age")); }
@Test @SuppressWarnings("serial") public void testCEPCompletions() { final SuggestionCompletionEngine com = new SuggestionCompletionEngine(); com.setFactTypes(new String[] {"NotAnEvent", "AnEvent"}); com.setFieldsForTypes( new HashMap<String, ModelField[]>() { { put( "NotAnEvent", new ModelField[] { new ModelField( "dateField", Date.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_DATE) }); put( "AnEvent", new ModelField[] { new ModelField( "this", Object.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, "AnEvent"), new ModelField( "dateField", Date.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, SuggestionCompletionEngine.TYPE_DATE) }); } }); // Set-up annotation for Type 'AnEvent' Map<String, List<ModelAnnotation>> annotations = new HashMap<String, List<ModelAnnotation>>(); List<ModelAnnotation> eventAnnotations = new ArrayList<ModelAnnotation>(); ModelAnnotation ma = new ModelAnnotation(); ma.setAnnotationName("role"); Map<String, String> mav = new HashMap<String, String>(); mav.put("value", "event"); ma.setAnnotationValues(mav); eventAnnotations.add(ma); annotations.put("AnEvent", eventAnnotations); com.setAnnotationsForTypes(annotations); // Check completions String[] c = com.getFactTypes(); assertEquals(2, c.length); assertContains("NotAnEvent", c); assertContains("AnEvent", c); c = com.getOperatorCompletions("NotAnEvent", "dateField"); assertEquals(11, c.length); assertEquals(c[0], "=="); assertEquals(c[1], "!="); assertEquals(c[2], "<"); assertEquals(c[3], ">"); assertEquals(c[4], "<="); assertEquals(c[5], ">="); assertEquals(c[6], "== null"); assertEquals(c[7], "!= null"); assertEquals(c[8], "after"); assertEquals(c[9], "before"); assertEquals(c[10], "coincides"); c = com.getOperatorCompletions("AnEvent", "this"); assertEquals(17, c.length); assertEquals(c[0], "=="); assertEquals(c[1], "!="); assertEquals(c[2], "== null"); assertEquals(c[3], "!= null"); assertEquals(c[4], "after"); assertEquals(c[5], "before"); assertEquals(c[6], "coincides"); assertEquals(c[7], "during"); assertEquals(c[8], "finishes"); assertEquals(c[9], "finishedby"); assertEquals(c[10], "includes"); assertEquals(c[11], "meets"); assertEquals(c[12], "metby"); assertEquals(c[13], "overlaps"); assertEquals(c[14], "overlappedby"); assertEquals(c[15], "starts"); assertEquals(c[16], "startedby"); }
@Test @SuppressWarnings("serial") public void testCEPParameterCompletions() { final SuggestionCompletionEngine com = new SuggestionCompletionEngine(); com.setFactTypes(new String[] {"AnEvent"}); com.setFieldsForTypes( new HashMap<String, ModelField[]>() { { put( "AnEvent", new ModelField[] { new ModelField( "this", Object.class.getName(), FIELD_CLASS_TYPE.REGULAR_CLASS, "AnEvent") }); } }); // Set-up annotation for Type 'AnEvent' Map<String, List<ModelAnnotation>> annotations = new HashMap<String, List<ModelAnnotation>>(); List<ModelAnnotation> eventAnnotations = new ArrayList<ModelAnnotation>(); ModelAnnotation ma = new ModelAnnotation(); ma.setAnnotationName("role"); Map<String, String> mav = new HashMap<String, String>(); mav.put("value", "event"); ma.setAnnotationValues(mav); eventAnnotations.add(ma); annotations.put("AnEvent", eventAnnotations); com.setAnnotationsForTypes(annotations); // Check completions List<Integer> c = SuggestionCompletionEngine.getCEPOperatorParameterSets("after"); assertEquals(3, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); assertEquals(2, c.get(2).intValue()); c = SuggestionCompletionEngine.getCEPOperatorParameterSets("before"); assertEquals(3, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); assertEquals(2, c.get(2).intValue()); c = SuggestionCompletionEngine.getCEPOperatorParameterSets("coincides"); assertEquals(3, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); assertEquals(2, c.get(2).intValue()); c = SuggestionCompletionEngine.getCEPOperatorParameterSets("during"); assertEquals(4, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); assertEquals(2, c.get(2).intValue()); assertEquals(4, c.get(3).intValue()); c = SuggestionCompletionEngine.getCEPOperatorParameterSets("finishes"); assertEquals(2, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); c = SuggestionCompletionEngine.getCEPOperatorParameterSets("finishedby"); assertEquals(2, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); c = SuggestionCompletionEngine.getCEPOperatorParameterSets("includes"); assertEquals(4, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); assertEquals(2, c.get(2).intValue()); assertEquals(4, c.get(3).intValue()); c = SuggestionCompletionEngine.getCEPOperatorParameterSets("meets"); assertEquals(2, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); c = SuggestionCompletionEngine.getCEPOperatorParameterSets("metby"); assertEquals(2, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); c = SuggestionCompletionEngine.getCEPOperatorParameterSets("overlaps"); assertEquals(3, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); assertEquals(2, c.get(2).intValue()); c = SuggestionCompletionEngine.getCEPOperatorParameterSets("overlappedby"); assertEquals(3, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); assertEquals(2, c.get(2).intValue()); c = SuggestionCompletionEngine.getCEPOperatorParameterSets("starts"); assertEquals(2, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); c = SuggestionCompletionEngine.getCEPOperatorParameterSets("startedby"); assertEquals(2, c.size()); assertEquals(0, c.get(0).intValue()); assertEquals(1, c.get(1).intValue()); }
@Test public void testCEPOperatorValidation() { assertFalse(SuggestionCompletionEngine.isCEPOperator("==")); assertFalse(SuggestionCompletionEngine.isCEPOperator("!=")); assertFalse(SuggestionCompletionEngine.isCEPOperator("<")); assertFalse(SuggestionCompletionEngine.isCEPOperator(">")); assertFalse(SuggestionCompletionEngine.isCEPOperator("<=")); assertFalse(SuggestionCompletionEngine.isCEPOperator(">=")); assertFalse(SuggestionCompletionEngine.isCEPOperator("== null")); assertFalse(SuggestionCompletionEngine.isCEPOperator("!= null")); assertTrue(SuggestionCompletionEngine.isCEPOperator("after")); assertTrue(SuggestionCompletionEngine.isCEPOperator("before")); assertTrue(SuggestionCompletionEngine.isCEPOperator("coincides")); assertTrue(SuggestionCompletionEngine.isCEPOperator("during")); assertTrue(SuggestionCompletionEngine.isCEPOperator("finishes")); assertTrue(SuggestionCompletionEngine.isCEPOperator("finishedby")); assertTrue(SuggestionCompletionEngine.isCEPOperator("includes")); assertTrue(SuggestionCompletionEngine.isCEPOperator("meets")); assertTrue(SuggestionCompletionEngine.isCEPOperator("metby")); assertTrue(SuggestionCompletionEngine.isCEPOperator("overlaps")); assertTrue(SuggestionCompletionEngine.isCEPOperator("overlappedby")); assertTrue(SuggestionCompletionEngine.isCEPOperator("starts")); assertTrue(SuggestionCompletionEngine.isCEPOperator("startedby")); }