/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * 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.kie.workbench.common.widgets.client.datamodel; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.enterprise.inject.Instance; import org.drools.workbench.models.datamodel.oracle.DataType; import org.drools.workbench.models.datamodel.oracle.DropDownData; import org.drools.workbench.models.datamodel.oracle.FieldAccessorsAndMutators; import org.drools.workbench.models.datamodel.oracle.ModelField; import org.drools.workbench.models.datamodel.oracle.PackageDataModelOracle; import org.drools.workbench.models.datamodel.oracle.ProjectDataModelOracle; import org.jboss.errai.common.client.api.Caller; import org.jboss.errai.validation.client.dynamic.DynamicValidator; import org.junit.Test; import org.kie.workbench.common.services.datamodel.backend.server.builder.packages.PackageDataModelOracleBuilder; import org.kie.workbench.common.services.datamodel.backend.server.builder.projects.ProjectDataModelOracleBuilder; import org.kie.workbench.common.services.datamodel.model.PackageDataModelOracleBaselinePayload; import org.kie.workbench.common.services.datamodel.service.IncrementalDataModelService; import org.kie.workbench.common.widgets.client.datamodel.testclasses.TestJavaEnum1; import org.kie.workbench.common.widgets.client.datamodel.testclasses.TestJavaEnum2; import org.mockito.Mock; import org.uberfire.backend.vfs.Path; import static org.junit.Assert.*; import static org.mockito.Mockito.*; /** * Tests for the ProjectDataModelOracle enums */ public class PackageDataModelOracleEnumTest { @Mock private Instance<DynamicValidator> validatorInstance; @Test public void testBasicEnums() { final ProjectDataModelOracle projectLoader = ProjectDataModelOracleBuilder.newProjectOracleBuilder() .addFact( "Person" ) .addField( new ModelField( "age", Integer.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_NUMERIC_INTEGER ) ) .addField( new ModelField( "sex", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .end() .addFact( "Driver" ) .addField( new ModelField( "sex", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .end() .addEnum( "Person", "age", new String[]{ "42", "43" } ) .addEnum( "Person", "sex", new String[]{ "M", "F" } ) .addEnum( "Driver", "sex", new String[]{ "M", "F" } ) .build(); final PackageDataModelOracle packageLoader = PackageDataModelOracleBuilder.newPackageOracleBuilder().setProjectOracle( projectLoader ).build(); //Emulate server-to-client conversions final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller( packageLoader ); final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl( service, validatorInstance ); final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload(); dataModel.setPackageName( packageLoader.getPackageName() ); dataModel.setModelFields( packageLoader.getProjectModelFields() ); dataModel.setJavaEnumDefinitions( packageLoader.getProjectJavaEnumDefinitions() ); dataModel.setWorkbenchEnumDefinitions( packageLoader.getPackageWorkbenchDefinitions() ); PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ), new MockHasImports(), oracle, dataModel ); String[] personAgeEnum = oracle.getEnumValues( "Person", "age" ); assertEquals( 2, personAgeEnum.length ); assertEquals( "42", personAgeEnum[ 0 ] ); assertEquals( "43", personAgeEnum[ 1 ] ); String[] personSexEnum = oracle.getEnumValues( "Person", "sex" ); assertEquals( 2, personSexEnum.length ); assertEquals( "M", personSexEnum[ 0 ] ); assertEquals( "F", personSexEnum[ 1 ] ); String[] driverSexEnum = oracle.getEnumValues( "Driver", "sex" ); assertEquals( 2, driverSexEnum.length ); assertEquals( "M", driverSexEnum[ 0 ] ); assertEquals( "F", driverSexEnum[ 1 ] ); } @Test public void testBasicDependentEnums() { final ProjectDataModelOracle projectLoader = ProjectDataModelOracleBuilder.newProjectOracleBuilder() .addFact( "Fact" ) .addField( new ModelField( "field1", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .addField( new ModelField( "field2", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .end() .addFact( "Driver" ) .addField( new ModelField( "sex", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .end() .addEnum( "'Fact.field1' : ['val1', 'val2'], 'Fact.field2' : ['val3', 'val4'], 'Fact.field2[field1=val1]' : ['f1val1a', 'f1val1b'], 'Fact.field2[field1=val2]' : ['f1val2a', 'f1val2b']", Thread.currentThread().getContextClassLoader() ) .build(); final PackageDataModelOracle packageLoader = PackageDataModelOracleBuilder.newPackageOracleBuilder().setProjectOracle( projectLoader ).build(); //Emulate server-to-client conversions final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller( packageLoader ); final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl( service, validatorInstance ); final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload(); dataModel.setPackageName( packageLoader.getPackageName() ); dataModel.setModelFields( packageLoader.getProjectModelFields() ); dataModel.setJavaEnumDefinitions( packageLoader.getProjectJavaEnumDefinitions() ); dataModel.setWorkbenchEnumDefinitions( packageLoader.getPackageWorkbenchDefinitions() ); PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ), new MockHasImports(), oracle, dataModel ); assertEquals( "String", oracle.getFieldType( "Fact", "field1" ) ); assertEquals( "String", oracle.getFieldType( "Fact", "field2" ) ); String[] field1Enums = oracle.getEnumValues( "Fact", "field1" ); assertEquals( 2, field1Enums.length ); assertEquals( "val1", field1Enums[ 0 ] ); assertEquals( "val2", field1Enums[ 1 ] ); String[] field2Enums = oracle.getEnumValues( "Fact", "field2" ); assertEquals( 2, field2Enums.length ); assertEquals( "val3", field2Enums[ 0 ] ); assertEquals( "val4", field2Enums[ 1 ] ); } @Test public void testSmartEnums1() { final ProjectDataModelOracle projectLoader = ProjectDataModelOracleBuilder.newProjectOracleBuilder() .addFact( "Fact" ) .addField( new ModelField( "type", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .addField( new ModelField( "value", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .end() .addEnum( "Fact", "type", new String[]{ "sex", "colour" } ) .addEnum( "Fact", "value[type=sex]", new String[]{ "M", "F" } ) .addEnum( "Fact", "value[type=colour]", new String[]{ "RED", "WHITE", "BLUE" } ) .build(); final PackageDataModelOracle packageLoader = PackageDataModelOracleBuilder.newPackageOracleBuilder().setProjectOracle( projectLoader ).build(); //Emulate server-to-client conversions final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller( packageLoader ); final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl( service, validatorInstance ); final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload(); dataModel.setPackageName( packageLoader.getPackageName() ); dataModel.setModelFields( packageLoader.getProjectModelFields() ); dataModel.setJavaEnumDefinitions( packageLoader.getProjectJavaEnumDefinitions() ); dataModel.setWorkbenchEnumDefinitions( packageLoader.getPackageWorkbenchDefinitions() ); PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ), new MockHasImports(), oracle, dataModel ); String[] typeResult = oracle.getEnums( "Fact", "type" ).getFixedList(); assertEquals( 2, typeResult.length ); assertEquals( "sex", typeResult[ 0 ] ); assertEquals( "colour", typeResult[ 1 ] ); Map<String, String> currentValueMap = new HashMap<String, String>(); currentValueMap.put( "type", "sex" ); String[] typeSexResult = oracle.getEnums( "Fact", "value", currentValueMap ).getFixedList(); assertEquals( 2, typeSexResult.length ); assertEquals( "M", typeSexResult[ 0 ] ); assertEquals( "F", typeSexResult[ 1 ] ); currentValueMap.clear(); currentValueMap.put( "type", "colour" ); String[] typeColourResult = oracle.getEnums( "Fact", "value", currentValueMap ).getFixedList(); assertEquals( 3, typeColourResult.length ); assertEquals( "RED", typeColourResult[ 0 ] ); assertEquals( "WHITE", typeColourResult[ 1 ] ); assertEquals( "BLUE", typeColourResult[ 2 ] ); } @Test public void testSmartEnumsDependingOnSeveralFields1() { final ProjectDataModelOracle projectLoader = ProjectDataModelOracleBuilder.newProjectOracleBuilder() .addFact( "Fact" ) .addField( new ModelField( "field1", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .addField( new ModelField( "field2", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .addField( new ModelField( "field3", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .addField( new ModelField( "field4", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .end() .addEnum( "Fact", "field1", new String[]{ "a1", "a2" } ) .addEnum( "Fact", "field2", new String[]{ "b1", "b2" } ) .addEnum( "Fact", "field3[field1=a1,field2=b1]", new String[]{ "c1", "c2", "c3" } ) .addEnum( "Fact", "field4[field1=a1]", new String[]{ "d1", "d2" } ) .build(); final PackageDataModelOracle packageLoader = PackageDataModelOracleBuilder.newPackageOracleBuilder().setProjectOracle( projectLoader ).build(); //Emulate server-to-client conversions final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller( packageLoader ); final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl( service, validatorInstance ); final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload(); dataModel.setPackageName( packageLoader.getPackageName() ); dataModel.setModelFields( packageLoader.getProjectModelFields() ); dataModel.setJavaEnumDefinitions( packageLoader.getProjectJavaEnumDefinitions() ); dataModel.setWorkbenchEnumDefinitions( packageLoader.getPackageWorkbenchDefinitions() ); PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ), new MockHasImports(), oracle, dataModel ); Map<String, String> currentValueMap = new HashMap<String, String>(); currentValueMap.put( "field1", "a1" ); currentValueMap.put( "field2", "b1" ); String[] field3Result = oracle.getEnums( "Fact", "field3", currentValueMap ).getFixedList(); assertEquals( 3, field3Result.length ); assertEquals( "c1", field3Result[ 0 ] ); assertEquals( "c2", field3Result[ 1 ] ); assertEquals( "c3", field3Result[ 2 ] ); String[] field4Result = oracle.getEnums( "Fact", "field4", currentValueMap ).getFixedList(); assertEquals( 2, field4Result.length ); assertEquals( "d1", field4Result[ 0 ] ); assertEquals( "d2", field4Result[ 1 ] ); } @Test public void testSmartLookupEnums() { final ProjectDataModelOracle projectLoader = ProjectDataModelOracleBuilder.newProjectOracleBuilder() .addFact( "Fact" ) .addField( new ModelField( "type", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .addField( new ModelField( "value", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .end() .addEnum( "Fact", "type", new String[]{ "sex", "colour" } ) .addEnum( "Fact", "value[f1, f2]", new String[]{ "select something from database where x=@{f1} and y=@{f2}" } ) .build(); final PackageDataModelOracle packageLoader = PackageDataModelOracleBuilder.newPackageOracleBuilder().setProjectOracle( projectLoader ).build(); //Emulate server-to-client conversions final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller( packageLoader ); final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl( service, validatorInstance ); final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload(); dataModel.setPackageName( packageLoader.getPackageName() ); dataModel.setModelFields( packageLoader.getProjectModelFields() ); dataModel.setJavaEnumDefinitions( packageLoader.getProjectJavaEnumDefinitions() ); dataModel.setWorkbenchEnumDefinitions( packageLoader.getPackageWorkbenchDefinitions() ); PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ), new MockHasImports(), oracle, dataModel ); Map<String, String> currentValueMap = new HashMap<String, String>(); currentValueMap.put( "f1", "f1val" ); currentValueMap.put( "f2", "f2val" ); DropDownData dd = oracle.getEnums( "Fact", "value", currentValueMap ); assertNull( dd.getFixedList() ); assertNotNull( dd.getQueryExpression() ); assertNotNull( dd.getValuePairs() ); assertEquals( 2, dd.getValuePairs().length ); assertEquals( "select something from database where x=@{f1} and y=@{f2}", dd.getQueryExpression() ); assertEquals( "f1=f1val", dd.getValuePairs()[ 0 ] ); assertEquals( "f2=f2val", dd.getValuePairs()[ 1 ] ); } @Test public void testDataDropDown() { assertNull( DropDownData.create( null ) ); assertNull( DropDownData.create( null, null ) ); assertNotNull( DropDownData.create( new String[]{ "hey" } ) ); assertNotNull( DropDownData.create( "abc", new String[]{ "hey" } ) ); } @Test public void testDataHasEnums() { final ProjectDataModelOracle projectLoader = ProjectDataModelOracleBuilder.newProjectOracleBuilder() .addFact( "Fact" ) .addField( new ModelField( "field1", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .addField( new ModelField( "field2", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .end() .addEnum( "'Fact.field1' : ['val1', 'val2'], 'Fact.field2[field1=val1]' : ['f1val1a', 'f1val1b'], 'Fact.field2[field1=val2]' : ['f1val2a', 'f1val2b']", Thread.currentThread().getContextClassLoader() ) .build(); final PackageDataModelOracle packageLoader = PackageDataModelOracleBuilder.newPackageOracleBuilder().setProjectOracle( projectLoader ).build(); //Emulate server-to-client conversions final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller( packageLoader ); final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl( service, validatorInstance ); final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload(); dataModel.setPackageName( packageLoader.getPackageName() ); dataModel.setModelFields( packageLoader.getProjectModelFields() ); dataModel.setJavaEnumDefinitions( packageLoader.getProjectJavaEnumDefinitions() ); dataModel.setWorkbenchEnumDefinitions( packageLoader.getPackageWorkbenchDefinitions() ); PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ), new MockHasImports(), oracle, dataModel ); //Fact.field1 has explicit enumerations assertTrue( oracle.hasEnums( "Fact.field1" ) ); assertTrue( oracle.hasEnums( "Fact", "field1" ) ); //Fact.field2 has explicit enumerations dependent upon Fact.field1 assertTrue( oracle.hasEnums( "Fact.field2" ) ); assertTrue( oracle.hasEnums( "Fact", "field2" ) ); } @Test public void testDataHasEnumsFieldSuffixes() { final ProjectDataModelOracle projectLoader = ProjectDataModelOracleBuilder.newProjectOracleBuilder() .addFact( "Fact" ) .addField( new ModelField( "field1", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .addField( new ModelField( "field2", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .addField( new ModelField( "field2suffixed", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .end() .addEnum( "'Fact.field1' : ['val1', 'val2'], 'Fact.field2[field1=val1]' : ['f1val1a', 'f1val1b']", Thread.currentThread().getContextClassLoader() ) .build(); final PackageDataModelOracle packageLoader = PackageDataModelOracleBuilder.newPackageOracleBuilder().setProjectOracle( projectLoader ).build(); //Emulate server-to-client conversions final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller( packageLoader ); final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl( service, validatorInstance ); final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload(); dataModel.setPackageName( packageLoader.getPackageName() ); dataModel.setModelFields( packageLoader.getProjectModelFields() ); dataModel.setJavaEnumDefinitions( packageLoader.getProjectJavaEnumDefinitions() ); dataModel.setWorkbenchEnumDefinitions( packageLoader.getPackageWorkbenchDefinitions() ); PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ), new MockHasImports(), oracle, dataModel ); //Fact.field1 has explicit enumerations assertTrue( oracle.hasEnums( "Fact.field1" ) ); assertTrue( oracle.hasEnums( "Fact", "field1" ) ); //Fact.field2 has explicit enumerations dependent upon Fact.field1 assertTrue( oracle.hasEnums( "Fact.field2" ) ); assertTrue( oracle.hasEnums( "Fact", "field2" ) ); //Fact.field2suffixed has no enums assertFalse( oracle.hasEnums( "Fact.field2suffixed" ) ); assertFalse( oracle.hasEnums( "Fact", "field2suffixed" ) ); } @Test public void testDependentEnums() { final ProjectDataModelOracle projectLoader = ProjectDataModelOracleBuilder.newProjectOracleBuilder() .addFact( "Fact" ) .addField( new ModelField( "field1", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .addField( new ModelField( "field2", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .addField( new ModelField( "field3", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .addField( new ModelField( "field4", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_STRING ) ) .end() .addEnum( "'Fact.field1' : ['val1', 'val2']", Thread.currentThread().getContextClassLoader() ) .addEnum( "'Fact.field2[field1=val1]' : ['f1val1a', 'f1val1b']", Thread.currentThread().getContextClassLoader() ) .addEnum( "'Fact.field2[field1=val2]' : ['f1val2a', 'f1val2b']", Thread.currentThread().getContextClassLoader() ) .addEnum( "'Fact.field3[field2=f1val1a]' : ['f1val1a1a', 'f1val1a1b']", Thread.currentThread().getContextClassLoader() ) .addEnum( "'Fact.field3[field2=f1val1b]' : ['f1val1b1a', 'f1val1b1b']", Thread.currentThread().getContextClassLoader() ) .addEnum( "'Fact.field3[field2=f1val2a]' : ['f1val2a1a', 'f1val2a1b']", Thread.currentThread().getContextClassLoader() ) .addEnum( "'Fact.field3[field2=f1val2b]' : ['f1val2a2a', 'f1val2b2b']", Thread.currentThread().getContextClassLoader() ) .addEnum( "'Fact.field4' : ['f4val1', 'f4val2']", Thread.currentThread().getContextClassLoader() ) .build(); final PackageDataModelOracle packageLoader = PackageDataModelOracleBuilder.newPackageOracleBuilder().setProjectOracle( projectLoader ).build(); //Emulate server-to-client conversions final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller( packageLoader ); final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl( service, validatorInstance ); final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload(); dataModel.setPackageName( packageLoader.getPackageName() ); dataModel.setModelFields( packageLoader.getProjectModelFields() ); dataModel.setJavaEnumDefinitions( packageLoader.getProjectJavaEnumDefinitions() ); dataModel.setWorkbenchEnumDefinitions( packageLoader.getPackageWorkbenchDefinitions() ); PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ), new MockHasImports(), oracle, dataModel ); assertTrue( oracle.isDependentEnum( "Fact", "field1", "field2" ) ); assertTrue( oracle.isDependentEnum( "Fact", "field1", "field3" ) ); assertTrue( oracle.isDependentEnum( "Fact", "field2", "field3" ) ); assertFalse( oracle.isDependentEnum( "Fact", "field1", "field4" ) ); } @Test public void testJavaEnum1() throws IOException { final ProjectDataModelOracle projectLoader = ProjectDataModelOracleBuilder.newProjectOracleBuilder() .addClass( TestJavaEnum1.class ) .build(); final PackageDataModelOracle packageLoader = PackageDataModelOracleBuilder.newPackageOracleBuilder( "org.kie.workbench.common.widgets.client.datamodel.testclasses" ).setProjectOracle( projectLoader ).build(); //Emulate server-to-client conversions final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller( packageLoader ); final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl( service, validatorInstance ); final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload(); dataModel.setPackageName( packageLoader.getPackageName() ); dataModel.setModelFields( packageLoader.getProjectModelFields() ); dataModel.setJavaEnumDefinitions( packageLoader.getProjectJavaEnumDefinitions() ); dataModel.setWorkbenchEnumDefinitions( packageLoader.getPackageWorkbenchDefinitions() ); PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ), new MockHasImports(), oracle, dataModel ); assertEquals( 2, oracle.getFactTypes().length ); assertEquals( "TestJavaEnum1.TestEnum", oracle.getFactTypes()[ 1 ] ); final DropDownData dd = oracle.getEnums( TestJavaEnum1.class.getSimpleName(), "field1" ); assertNotNull( dd ); assertEquals( 3, dd.getFixedList().length ); assertEquals( "TestJavaEnum1.TestEnum.ZERO=TestJavaEnum1.TestEnum.ZERO", dd.getFixedList()[ 0 ] ); assertEquals( "TestJavaEnum1.TestEnum.ONE=TestJavaEnum1.TestEnum.ONE", dd.getFixedList()[ 1 ] ); assertEquals( "TestJavaEnum1.TestEnum.TWO=TestJavaEnum1.TestEnum.TWO", dd.getFixedList()[ 2 ] ); final String[] ddValues = oracle.getEnumValues( TestJavaEnum1.class.getSimpleName(), "field1" ); assertNotNull( ddValues ); assertEquals( 3, ddValues.length ); assertEquals( "TestJavaEnum1.TestEnum.ZERO=TestJavaEnum1.TestEnum.ZERO", ddValues[ 0 ] ); assertEquals( "TestJavaEnum1.TestEnum.ONE=TestJavaEnum1.TestEnum.ONE", ddValues[ 1 ] ); assertEquals( "TestJavaEnum1.TestEnum.TWO=TestJavaEnum1.TestEnum.TWO", ddValues[ 2 ] ); } @Test public void testJavaEnum2() throws IOException { final ProjectDataModelOracle projectLoader = ProjectDataModelOracleBuilder.newProjectOracleBuilder() .addClass( TestJavaEnum2.class ) .build(); final PackageDataModelOracle packageLoader = PackageDataModelOracleBuilder.newPackageOracleBuilder( "org.kie.workbench.common.widgets.client.datamodel.testclasses" ).setProjectOracle( projectLoader ).build(); //Emulate server-to-client conversions final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller( packageLoader ); final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl( service, validatorInstance ); final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload(); dataModel.setPackageName( packageLoader.getPackageName() ); dataModel.setModelFields( packageLoader.getProjectModelFields() ); dataModel.setJavaEnumDefinitions( packageLoader.getProjectJavaEnumDefinitions() ); dataModel.setWorkbenchEnumDefinitions( packageLoader.getPackageWorkbenchDefinitions() ); PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ), new MockHasImports(), oracle, dataModel ); assertEquals( 2, oracle.getFactTypes().length ); assertEquals( TestJavaEnum2.class.getSimpleName(), oracle.getFactTypes()[ 1 ] ); final DropDownData dd = oracle.getEnums( TestJavaEnum2.class.getSimpleName(), "field1" ); assertNotNull( dd ); assertEquals( 3, dd.getFixedList().length ); assertEquals( "TestExternalEnum.ZERO=TestExternalEnum.ZERO", dd.getFixedList()[ 0 ] ); assertEquals( "TestExternalEnum.ONE=TestExternalEnum.ONE", dd.getFixedList()[ 1 ] ); assertEquals( "TestExternalEnum.TWO=TestExternalEnum.TWO", dd.getFixedList()[ 2 ] ); final String[] ddValues = oracle.getEnumValues( TestJavaEnum2.class.getSimpleName(), "field1" ); assertNotNull( ddValues ); assertEquals( 3, ddValues.length ); assertEquals( "TestExternalEnum.ZERO=TestExternalEnum.ZERO", ddValues[ 0 ] ); assertEquals( "TestExternalEnum.ONE=TestExternalEnum.ONE", ddValues[ 1 ] ); assertEquals( "TestExternalEnum.TWO=TestExternalEnum.TWO", ddValues[ 2 ] ); } }