/** * 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; /* * Copyright 2005 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. */ import java.util.Arrays; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNotNull; import org.drools.guvnor.client.common.AssetFormats; import org.drools.guvnor.server.ServiceImplementation; import org.drools.guvnor.server.util.BRMSSuggestionCompletionLoader; import org.drools.guvnor.server.util.TestEnvironmentSessionHelper; import org.drools.ide.common.client.modeldriven.FieldAccessorsAndMutators; import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngine; import org.drools.repository.AssetItem; import org.drools.repository.PackageItem; import org.drools.repository.RulesRepository; import org.junit.After; import org.junit.Ignore; import org.junit.Test; public class BRMSSuggestionCompletionLoaderTest { @Test public void testLoader() throws Exception { RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession()); PackageItem item = repo.createPackage( "testLoader", "to test the loader" ); ServiceImplementation.updateDroolsHeader("import java.util.Date", item ); repo.save(); BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader(); String header = ServiceImplementation.getDroolsHeader(item); SuggestionCompletionEngine engine = loader.getSuggestionEngine( item ); assertNotNull(engine); } @Test public void testLoaderWithComplexFields() throws Exception { RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession()); PackageItem item = repo.createPackage( "testLoaderWithComplexFields", "to test the loader" ); ServiceImplementation.updateDroolsHeader("import org.drools.guvnor.server.rules.Agent", item ); repo.save(); BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader(); String header = ServiceImplementation.getDroolsHeader(item); SuggestionCompletionEngine engine = loader.getSuggestionEngine( item ); assertNotNull(engine); String[] modelFields = engine.getModelFields("Agent"); System.out.println("modelFields: "+Arrays.asList(modelFields)); assertNotNull(modelFields); assertEquals(9, modelFields.length ); modelFields = engine.getModelFields(FieldAccessorsAndMutators.BOTH, "Agent"); assertNotNull(modelFields); System.out.println("modelFields: "+Arrays.asList(modelFields)); assertEquals(10, modelFields.length ); modelFields = engine.getModelFields(FieldAccessorsAndMutators.ACCESSOR, "Agent"); assertNotNull(modelFields); System.out.println("modelFields: "+Arrays.asList(modelFields)); assertEquals(9, modelFields.length ); modelFields = engine.getModelFields(FieldAccessorsAndMutators.MUTATOR, "Agent"); assertNotNull(modelFields); System.out.println("modelFields: "+Arrays.asList(modelFields)); assertEquals(9, modelFields.length ); } @Test public void testStripUnNeededFields() { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); String[] result = loader.removeIrrelevantFields( Arrays.asList(new String[] {"foo", "toString", "class", "hashCode"} )); assertEquals(1, result.length); assertEquals("foo", result[0]); } @Test public void testGetShortNameOfClass() { SuggestionCompletionLoader loader = new SuggestionCompletionLoader(); assertEquals("Object", loader.getShortNameOfClass( Object.class.getName() )); assertEquals("Foo", loader.getShortNameOfClass( "Foo" )); } @Test @Ignore public void testFactTemplates() throws Exception { RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession()); PackageItem item = repo.createPackage( "testLoader2", "to test the loader for fact templates" ); ServiceImplementation.updateDroolsHeader("import java.util.Date\ntemplate Person\njava.lang.String name\nDate birthDate\nend", item ); repo.save(); BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader(); SuggestionCompletionEngine engine = loader.getSuggestionEngine( item ); assertNotNull(engine); List<String> factTypes = Arrays.asList(engine.getFactTypes()); assertEquals( 2 + loader.getExternalImportDescrs().size(), factTypes.size() ); assertTrue(factTypes.contains("Date")); assertTrue(factTypes.contains("Person")); String[] fieldsForType = engine.getFieldCompletions( "Person" ); assertEquals( 2, fieldsForType.length ); assertEquals("birthDate", fieldsForType[0]); assertEquals("name", fieldsForType[1]); String fieldType = engine.getFieldType( "Person", "name" ); assertEquals( SuggestionCompletionEngine.TYPE_STRING, fieldType ); fieldType = engine.getFieldType( "Person", "birthDate" ); assertEquals( SuggestionCompletionEngine.TYPE_DATE, fieldType ); } @Test public void testDeclaredTypes() throws Exception { RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession()); PackageItem item = repo.createPackage( "testLoaderDeclaredTypes", "to test the loader for declared types" ); AssetItem asset = item.addAsset("MyModel", ""); asset.updateFormat(AssetFormats.DRL_MODEL); asset.updateContent("declare Car\n pieceOfRubbish: Boolean \n name: String \nend"); asset.checkin(""); repo.save(); BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader(); SuggestionCompletionEngine engine = loader.getSuggestionEngine( item ); assertNotNull(engine); String[] factTypes = engine.getFactTypes(); assertEquals(1 + loader.getExternalImportDescrs().size(), factTypes.length); assertEquals("Car", factTypes[0]); List<String> fields = Arrays.asList( engine.getFieldCompletions("Car") ); assertEquals(2, fields.size()); assertTrue( fields.contains("pieceOfRubbish") ); assertTrue( fields.contains("name") ); assertEquals("Boolean", engine.getFieldType("Car", "pieceOfRubbish")); assertEquals("String", engine.getFieldType("Car", "name")); } @Test public void testLoadDSLs() throws Exception { String dsl = "[when]The agents rating is {rating}=doNothing()\n[then]Send a notification to manufacturing '{message}'=foo()"; RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession()); PackageItem item = repo.createPackage( "testLoadDSLs", "to test the loader for DSLs" ); AssetItem asset = item.addAsset( "mydsl", "" ); asset.updateFormat( AssetFormats.DSL ); asset.updateContent( dsl ); asset.checkin( "ok" ); item = repo.loadPackage( "testLoadDSLs" ); BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader(); SuggestionCompletionEngine eng = loader.getSuggestionEngine( item ); assertFalse(eng.hasDataEnumLists()); assertFalse(loader.hasErrors()); assertEquals(1, eng.actionDSLSentences.length); assertEquals(1, eng.conditionDSLSentences.length); assertEquals( "The agents rating is {rating}", eng.conditionDSLSentences[0].sentence ); assertEquals("Send a notification to manufacturing '{message}'",eng.actionDSLSentences[0].sentence); } @Test public void testLoadEnumerations() throws Exception { String enumeration = "'Person.sex' : ['M', 'F']"; RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession()); PackageItem item = repo.createPackage( "testLoadEnums", "to test the loader for enums" ); AssetItem asset = item.addAsset( "myenum", "" ); asset.updateFormat( AssetFormats.ENUMERATION ); asset.updateContent( enumeration ); asset.checkin( "ok" ); item = repo.loadPackage( "testLoadEnums" ); BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader(); SuggestionCompletionEngine sce = loader.getSuggestionEngine( item ); assertFalse(loader.hasErrors()); assertEquals(1, sce.getDataEnumListsSize()); asset.updateContent( "goober boy" ); asset.checkin( "yeah" ); item = repo.loadPackage( "testLoadEnums" ); loader = new BRMSSuggestionCompletionLoader(); sce = loader.getSuggestionEngine( item ); assertTrue(loader.hasErrors()); } @Test public void testErrors() throws Exception { RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession()); PackageItem item = repo.createPackage( "testErrorsInPackage", "to test error handling" ); BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader(); assertNotNull(loader.getSuggestionEngine( item )); assertFalse(loader.hasErrors()); ServiceImplementation.updateDroolsHeader("gooble de gook", item ); loader = new BRMSSuggestionCompletionLoader(); loader.getSuggestionEngine( item ); assertTrue(loader.hasErrors()); ServiceImplementation.updateDroolsHeader("import foo.bar; \nglobal goo.Bar baz;", item ); loader = new BRMSSuggestionCompletionLoader(); loader.getSuggestionEngine( item ); assertTrue(loader.hasErrors()); } @Test /** * This shows we need to load up the model without anything attached yet. */ public void testModelWithNoAttachment() throws Exception { RulesRepository repo = new RulesRepository(TestEnvironmentSessionHelper.getSession()); PackageItem item = repo.createPackage( "testmodelWithNoAttachment", "to test model loading" ); item.addAsset( "testModel", "", null, AssetFormats.MODEL ); repo.save(); BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader(); assertNotNull(loader.getSuggestionEngine( item )); assertFalse(loader.hasErrors()); } @After public void tearDown() throws Exception { TestEnvironmentSessionHelper.shutdown(); } }