Package org.drools.guvnor.server.util

Source Code of org.drools.guvnor.server.util.BRMSSuggestionCompletionLoaderTest

/*
* 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.
*/

package org.drools.guvnor.server.util;

import org.drools.guvnor.client.common.AssetFormats;
import org.drools.guvnor.server.GuvnorTestBase;
import org.drools.guvnor.server.ServiceImplementation;
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.repository.AssetItem;
import org.drools.repository.PackageItem;
import org.drools.repository.RulesRepository;
import org.junit.Ignore;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;

import static org.junit.Assert.*;

public class BRMSSuggestionCompletionLoaderTest extends GuvnorTestBase {

    @Test
    public void testLoader() throws Exception {

        ServiceImplementation impl = getServiceImplementation();
        RulesRepository repo = impl.getRulesRepository();

        PackageItem item = repo.createPackage( "testLoader",
                                               "to test the loader" );
        DroolsHeader.updateDroolsHeader( "import java.util.Date",
                                                  item );
        repo.save();

        BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader();
        String header = DroolsHeader.getDroolsHeader( item );

        SuggestionCompletionEngine engine = loader.getSuggestionEngine( item );
        assertNotNull( engine );

    }

    @Test
    public void testLoaderWithComplexFields() throws Exception {

        ServiceImplementation impl = getServiceImplementation();
        RulesRepository repo = impl.getRulesRepository();

        PackageItem item = repo.createPackage( "testLoaderWithComplexFields",
                                               "to test the loader" );
        DroolsHeader.updateDroolsHeader( "import org.drools.guvnor.server.util.Agent",
                                                  item );
        repo.save();

        BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader();
        String header = DroolsHeader.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( 9,
                      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( 8,
                      modelFields.length );

    }

    @Test
    public void testStripUnNeededFields() {
        SuggestionCompletionLoader loader = new SuggestionCompletionLoader();
        List<String> result = loader.removeIrrelevantFields( Arrays.asList( new String[]{"foo", "toString", "class", "hashCode"} ) );
        assertEquals( 1,
                      result.size());
        assertEquals( "foo",
                      result.get( 0 ) );
    }

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

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

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

    @Test
    @Ignore("Needs fixing")
    public void testFactTemplates() throws Exception {

        ServiceImplementation impl = getServiceImplementation();
        RulesRepository repo = impl.getRulesRepository();

        PackageItem item = repo.createPackage( "testLoader2",
                                               "to test the loader for fact templates" );
        DroolsHeader.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 {

        ServiceImplementation impl = getServiceImplementation();
        RulesRepository repo = impl.getRulesRepository();

        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( 3,
                      fields.size() );

        assertTrue( fields.contains( "this" ) );
        assertTrue( fields.contains( "pieceOfRubbish" ) );
        assertTrue( fields.contains( "name" ) );

        assertEquals( "this",
                      engine.getFieldType( "Car",
                                           "this" ) );
        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()";
       
        ServiceImplementation impl = getServiceImplementation();
        RulesRepository repo = impl.getRulesRepository();

        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].getDefinition() );
        assertEquals( "Send a notification to manufacturing '{message}'",
                      eng.actionDSLSentences[0].getDefinition() );

    }

    @Test
    public void testLoadEnumerations() throws Exception {
        String enumeration = "'Person.sex' : ['M', 'F']";

        ServiceImplementation impl = getServiceImplementation();
        RulesRepository repo = impl.getRulesRepository();

        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 {

        ServiceImplementation impl = getServiceImplementation();
        RulesRepository repo = impl.getRulesRepository();

        PackageItem item = repo.createPackage( "testErrorsInPackage",
                                               "to test error handling" );

        BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader();

        assertNotNull( loader.getSuggestionEngine( item ) );
        assertFalse( loader.hasErrors() );

        DroolsHeader.updateDroolsHeader( "gooble de gook",
                                                  item );
        loader = new BRMSSuggestionCompletionLoader();
        loader.getSuggestionEngine( item );
        assertTrue( loader.hasErrors() );

        DroolsHeader.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 {

        ServiceImplementation impl = getServiceImplementation();
        RulesRepository repo = impl.getRulesRepository();

        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.guvnor.server.util.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.