/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.ide.common.server.rules; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import junit.framework.TestCase; import org.drools.ide.common.client.modeldriven.FactTypeFilter; import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngine; import org.drools.ide.common.client.modeldriven.ModelField.FIELD_CLASS_TYPE; import org.drools.ide.common.server.rules.SuggestionCompletionLoader; import org.drools.lang.descr.ImportDescr; public class SuggestionCompletionLoaderTest extends TestCase { public void testSuggestionCompLoader() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.Person", new ArrayList(), new ArrayList() ); assertNotNull(eng); } public void testSuggestionCompLoaderWithExtraImportProviders() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); loader.addExternalImportDescrProvider(new SuggestionCompletionLoader.ExternalImportDescrProvider() { public Set<ImportDescr> getImportDescrs() { return new HashSet<ImportDescr>(){ { add(new ImportDescr("java.util.List")); add(new ImportDescr("java.util.Set")); } }; } }); SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.Person", new ArrayList(), new ArrayList() ); assertNotNull(eng); assertEquals(3, eng.getFactTypes().length); List<String> factTypes = Arrays.asList(eng.getFactTypes()); assertTrue(factTypes.contains("List")); assertTrue(factTypes.contains("Set")); assertTrue(factTypes.contains("Person")); eng = loader.getSuggestionEngine( "package foo \n import org.drools.Person \n declare GenBean \n id: int \n name : String \n end \n declare GenBean2 \n list: java.util.List \n gb: GenBean \n end", new ArrayList(), new ArrayList()); assertEquals(5, eng.getFactTypes().length); factTypes = Arrays.asList(eng.getFactTypes()); assertTrue(factTypes.contains("List")); assertTrue(factTypes.contains("Set")); assertTrue(factTypes.contains("Person")); assertTrue(factTypes.contains("GenBean")); assertTrue(factTypes.contains("GenBean2")); } public void testSuggestionCompLoaderWithExtraImportProvidersAndFilters() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); loader.addExternalImportDescrProvider(new SuggestionCompletionLoader.ExternalImportDescrProvider() { public Set<ImportDescr> getImportDescrs() { return new HashSet<ImportDescr>(){ { add(new ImportDescr("java.util.List")); add(new ImportDescr("java.util.Set")); } }; } }); SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.Person \n declare GenBean \n id: int \n name : String \n end \n declare GenBean2 \n list: java.util.List \n gb: GenBean \n end", new ArrayList(), new ArrayList()); eng.setFactTypeFilter(new FactTypeFilter() { public boolean filter(String originalFact) { return originalFact.equals("List") || originalFact.equals("GenBean2"); } }); eng.setFilteringFacts(true); assertNotNull(eng); assertEquals(3, eng.getFactTypes().length); List<String> factTypes = Arrays.asList(eng.getFactTypes()); assertTrue(factTypes.contains("Set")); assertTrue(factTypes.contains("Person")); assertTrue(factTypes.contains("GenBean")); } public void testSuggestionCompLoaderWildcards() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); loader.getSuggestionEngine( "package foo \n import org.drools.*", new ArrayList(), new ArrayList() ); assertEquals(1, loader.getErrors().size()); String err = loader.getErrors().get(0); assertTrue(err.startsWith("Unable")); } public void testLoadDifferentFieldTypes() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.ide.common.server.rules.SomeFact", new ArrayList(), new ArrayList() ); assertNotNull(eng); assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, eng.getFieldType( "SomeFact", "age" )); assertEquals(SuggestionCompletionEngine.TYPE_STRING, eng.getFieldType( "SomeFact", "likes")); assertEquals(SuggestionCompletionEngine.TYPE_STRING, eng.getFieldType( "SomeFact","name")); assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, eng.getFieldType("SomeFact", "bigDecimal")); assertEquals(SuggestionCompletionEngine.TYPE_BOOLEAN, eng.getFieldType("SomeFact", "alive")); // assertEquals(SuggestionCompletionEngine.TYPE_COMPARABLE, eng.getFieldType( "SomeFact", "date")); assertEquals(SuggestionCompletionEngine.TYPE_DATE, eng.getFieldType( "SomeFact", "date")); assertEquals("Cheese", eng.getFieldType( "SomeFact", "cheese")); assertEquals(SuggestionCompletionEngine.TYPE_BOOLEAN, eng.getFieldType( "SomeFact", "dead")); assertEquals(SuggestionCompletionEngine.TYPE_BOOLEAN, eng.getFieldType( "SomeFact", "alive")); assertEquals(SuggestionCompletionEngine.TYPE_COLLECTION,eng.getFieldType( "SomeFact", "factList")); assertEquals("SomeFact",eng.getParametricFieldType("SomeFact", "factList")); assertEquals(SuggestionCompletionEngine.TYPE_COLLECTION,eng.getFieldType( "SomeFact", "factListString")); assertEquals("String",eng.getParametricFieldType("SomeFact", "factListString")); } public void testLoadDifferentMethodTypes() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.ide.common.server.rules.SomeFact", new ArrayList(), new ArrayList() ); assertNotNull(eng); assertEquals(List.class.getName(), eng.getMethodClassType("SomeFact", "aMethod(int)")); assertEquals("SomeFact", eng.getParametricFieldType("SomeFact", "aMethod(int)")); } public void testGeneratedBeans() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n declare GenBean \n id: int \n name : String \n end \n declare GenBean2 \n list: java.util.List \n gb: GenBean \n end", new ArrayList(), new ArrayList() ); assertFalse(loader.hasErrors()); assertNotNull(eng); assertEquals(2, eng.getFactTypes().length); assertEquals("GenBean", eng.getFactTypes()[0]); assertEquals("GenBean2", eng.getFactTypes()[1]); assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, eng.getFieldType( "GenBean", "id" )); assertEquals(SuggestionCompletionEngine.TYPE_STRING, eng.getFieldType( "GenBean", "name")); assertEquals("GenBean", eng.getFieldType("GenBean2", "gb")); } public void testGlobal() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n global org.drools.Person p", new ArrayList(), new ArrayList() ); assertNotNull(eng); assertFalse(loader.hasErrors()); assertEquals(1, eng.getGlobalVariables().length); assertEquals("p", eng.getGlobalVariables()[0]); assertEquals("Person", eng.getGlobalVariable("p")); String[] flds = (String[]) eng.getModelFields("Person"); assertNotNull(flds); assertEquals(0, eng.getGlobalCollections().length); } public void testGlobalCollections() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n global java.util.List ls", new ArrayList(), new ArrayList() ); assertNotNull(eng); assertFalse(loader.hasErrors()); assertEquals(1, eng.getGlobalVariables().length); assertEquals("ls", eng.getGlobalVariables()[0]); assertEquals("List", eng.getGlobalVariable("ls")); assertNotNull(eng.getGlobalCollections()); assertEquals(1, eng.getGlobalCollections().length); assertEquals("ls", eng.getGlobalCollections()[0]); } public void testSortOrderOfFields() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.ide.common.server.rules.SomeFact", new ArrayList(), new ArrayList() ); assertNotNull(eng); String[] fields = eng.getFieldCompletions("SomeFact"); assertEquals("age", fields[0]); assertEquals("alive", fields[1]); assertEquals("anEnum", fields[2]); assertEquals("bigDecimal", fields[3]); } public void testEnumFields() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.ide.common.server.rules.SomeFact", new ArrayList(), new ArrayList() ); assertNotNull(eng); assertTrue(eng.hasDataEnumLists()); assertEquals(eng.getDataEnumList("SomeFact.anEnum").length,3); String a[] = eng.getDataEnumList("SomeFact.anEnum") ; assertEquals(a[0],"EnumClass.v1=EnumClass.v1"); assertEquals(a[1],"EnumClass.v2=EnumClass.v2"); assertEquals(a[2],"EnumClass.v3=EnumClass.v3"); } public void testSortOrderOfFacts() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.drools.ide.common.server.rules.SomeFact\n import org.drools.Person", new ArrayList(), new ArrayList() ); assertNotNull(eng); String[] facts = eng.getFactTypes(); assertEquals(2, facts.length); assertEquals("Person", facts[0]); assertEquals("SomeFact", facts[1]); } public void testTypeDeclarations() throws Exception { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); String header =""; header += "package foo\n"; header += "declare Applicant\n"; header += " creditRating: String\n"; header += " approved: Boolean\n"; header += " applicationDate: java.util.Date\n"; header += " age: Integer\n"; header += " name: String\n"; header += "end\n"; header += "declare LoanApplication\n"; header += " amount: Integer\n"; header += " approved: Boolean\n"; header += " deposit: Integer\n"; header += " approvedRate: Integer\n"; header += " lengthYears: Integer\n"; header += " explanation: String\n"; header += " insuranceCost: Integer\n"; header += " applicant: Applicant\n"; header += "end\n"; SuggestionCompletionEngine eng = loader.getSuggestionEngine( header, new ArrayList(), new ArrayList() ); assertNotNull(eng); assertEquals(SuggestionCompletionEngine.TYPE_STRING, eng.getFieldType( "Applicant", "creditRating" )); assertEquals("java.lang.String", eng.getFieldClassName( "Applicant", "creditRating" )); assertEquals(FIELD_CLASS_TYPE.TYPE_DECLARATION_CLASS, eng.getFieldClassType( "Applicant", "creditRating" )); assertEquals(SuggestionCompletionEngine.TYPE_NUMERIC, eng.getFieldType( "LoanApplication", "deposit" )); assertEquals("java.lang.Integer", eng.getFieldClassName( "LoanApplication", "deposit" )); assertEquals(FIELD_CLASS_TYPE.TYPE_DECLARATION_CLASS, eng.getFieldClassType( "LoanApplication", "deposit" )); assertEquals("Applicant", eng.getFieldType( "LoanApplication", "applicant" )); assertNull(eng.getFieldClassName( "LoanApplication", "applicant" )); assertEquals(FIELD_CLASS_TYPE.TYPE_DECLARATION_CLASS, eng.getFieldClassType( "LoanApplication", "applicant" )); } public void testLoaderWithExistingClassloader() throws Exception { MockClassLoader mcl = new MockClassLoader(); SuggestionCompletionLoader loader = new SuggestionCompletionLoader(mcl); SuggestionCompletionEngine eng = loader.getSuggestionEngine( "package foo \n import org.foo.Bar", new ArrayList(), new ArrayList() ); assertNotNull(eng); //assertNotNull(eng.dataEnumLists); assertTrue(mcl.called); } static class MockClassLoader extends ClassLoader { public boolean called = false; public Class<?> loadClass(String name) { called = true; return Object.class; } } }