Package org.drools.ide.common.server.rules

Source Code of org.drools.ide.common.server.rules.BRMSSuggestionCompletionLoaderTest

/**
* 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 junit.framework.TestCase;

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;

public class BRMSSuggestionCompletionLoaderTest extends TestCase {

    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);

    }

    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 );

    }

    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]);
    }

    public void testGetShortNameOfClass() {
        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();

        assertEquals("Object", loader.getShortNameOfClass( Object.class.getName() ));

        assertEquals("Foo", loader.getShortNameOfClass( "Foo" ));
    }

    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 );
    }

    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"));
    }

    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);

    }

    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());


    }

    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());


    }

    /**
     * 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());


    }

}
TOP

Related Classes of org.drools.ide.common.server.rules.BRMSSuggestionCompletionLoaderTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.