/** * 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.client.modeldriven; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.jar.JarInputStream; import junit.framework.TestCase; import org.drools.ide.common.client.modeldriven.FieldAccessorsAndMutators; import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngine; import org.drools.ide.common.server.rules.SuggestionCompletionLoader; import org.drools.lang.dsl.DSLTokenizedMappingFile; public class SuggestionCompletionEngine2Test extends TestCase { public void testAccessorsAndMutatorsDeclaredModel() throws Exception { String pkg = "package org.test\n"; pkg += "declare Test\n"; pkg += "number: Integer\n"; pkg += "end\n"; SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList<JarInputStream>(), new ArrayList<DSLTokenizedMappingFile>(), new ArrayList<String>() ); String[] accessors = engine.getFieldCompletions( FieldAccessorsAndMutators.ACCESSOR, "Test" ); assertEquals( 2, accessors.length ); String[] mutators = engine.getFieldCompletions( FieldAccessorsAndMutators.MUTATOR, "Test" ); assertEquals( 2, mutators.length ); } public void testAccessorsAndMutatorsJavaClass() throws Exception { String pkg = "package org.test\n import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngine2Test.Person\n"; SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList<JarInputStream>(), new ArrayList<DSLTokenizedMappingFile>(), new ArrayList<String>() ); String[] accessors = engine.getFieldCompletions( FieldAccessorsAndMutators.ACCESSOR, "SuggestionCompletionEngine2Test$Person" ); assertEquals( 3, accessors.length ); String[] mutators = engine.getFieldCompletions( FieldAccessorsAndMutators.MUTATOR, "SuggestionCompletionEngine2Test$Person" ); assertEquals( 3, mutators.length ); } public void testArrayList() { String pkg = "package org.test\n global java.util.ArrayList testList"; SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); SuggestionCompletionEngine engine = loader.getSuggestionEngine( pkg, new ArrayList<JarInputStream>(), new ArrayList<DSLTokenizedMappingFile>(), new ArrayList<String>() ); List<String> methodNames = engine.getMethodNames( "ArrayList" ); // for ( String name : methodNames ) { // System.out.println( name ); // } assertNotNull( methodNames ); assertFalse( methodNames.isEmpty() ); for ( String s : methodNames ) { assertFalse( "Method " + s + " is not allowed.", allowedMethod( s ) ); } } public void testJarFileWithSourceFiles() { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); // Add jar file String header = "package foo \n import org.test.Person \n import org.test.Banana \n "; List<JarInputStream> jars = new ArrayList<JarInputStream>(); JarInputStream jis = null; SuggestionCompletionEngine suggestionCompletionEngine = null; try { jis = new JarInputStream( this.getClass().getResourceAsStream( "/JarWithSourceFiles.jar" ) ); jars.add( jis ); } catch ( IOException e ) { fail( "Could not load jar" ); } try { suggestionCompletionEngine = loader.getSuggestionEngine( header, jars, new ArrayList<DSLTokenizedMappingFile>() ); } catch ( ClassFormatError e ) { fail( "Can not load suggestions " + e ); } // Check that it throws no error and has class files inside. assertNotNull( jis ); assertNotNull( suggestionCompletionEngine ); assertEquals( 2, suggestionCompletionEngine.getFactTypes().length ); List<String> list = Arrays.asList( suggestionCompletionEngine.getFactTypes() ); assertTrue( list.contains( "Person" ) ); assertTrue( list.contains( "Banana" ) ); assertEquals( "java.util.Collection", suggestionCompletionEngine.getFieldClassName( "Person", "bananas" ) ); assertEquals( SuggestionCompletionEngine.TYPE_COLLECTION, suggestionCompletionEngine.getFieldType( "Person", "bananas" ) ); assertEquals( "Banana", suggestionCompletionEngine.getParametricFieldType( "Person", "bananas" ) ); } private boolean allowedMethod(String methodName) { return ("hashCode".equals( methodName ) || "equals".equals( methodName ) || "listIterator".equals( methodName ) || "lastIndexOf".equals( methodName ) || "indexOf".equals( methodName ) || "subList".equals( methodName ) || "get".equals( methodName ) || "isEmpty".equals( methodName ) || "containsKey".equals( methodName ) || "values".equals( methodName ) || "entrySet".equals( methodName ) || "containsValue".equals( methodName ) || "keySet".equals( methodName ) || "size".equals( methodName ) || "toArray".equals( methodName ) || "iterator".equals( methodName ) || "contains".equals( methodName ) || "isEmpty".equals( methodName ) || "containsAll".equals( methodName ) || "size".equals( methodName )); } public static class Person { private String name; private int age; private String something; public String getSomething() { return something; } public void setSomething(String something) { this.something = something; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void addPet(String petName) { } } }