/* * 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.util.Date; import java.util.List; import javax.enterprise.inject.Instance; import org.drools.workbench.models.datamodel.oracle.DataType; 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.mockito.Mock; import org.uberfire.backend.vfs.Path; import org.uberfire.client.callbacks.Callback; import static org.junit.Assert.*; import static org.mockito.Mockito.*; /** * Tests for the ProjectDataModelOracle CEP completions */ public class PackageDataModelOracleCEPCompletionsTest { @Mock private Instance<DynamicValidator> validatorInstance; @Test public void testCEPCompletions() { final ProjectDataModelOracle projectLoader = ProjectDataModelOracleBuilder.newProjectOracleBuilder() .addFact( "NotAnEvent" ) .addField( new ModelField( "dateField", Date.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_DATE ) ) .end() .addFact( "AnEvent", true ) .addField( new ModelField( "this", Object.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.SELF, FieldAccessorsAndMutators.BOTH, "AnEvent" ) ) .addField( new ModelField( "dateField", Date.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.DECLARED, FieldAccessorsAndMutators.BOTH, DataType.TYPE_DATE ) ) .end() .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.setEventTypes( packageLoader.getProjectEventTypes() ); PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ), new MockHasImports(), oracle, dataModel ); //Check completions String[] types = oracle.getFactTypes(); assertEquals( 2, types.length ); PackageDataModelOracleTestUtils.assertContains( "NotAnEvent", types ); PackageDataModelOracleTestUtils.assertContains( "AnEvent", types ); oracle.getOperatorCompletions( "NotAnEvent", "dateField", new Callback<String[]>() { @Override public void callback( final String[] notAnEventDateFieldOperators ) { assertEquals( 13, notAnEventDateFieldOperators.length ); assertEquals( notAnEventDateFieldOperators[ 0 ], "==" ); assertEquals( notAnEventDateFieldOperators[ 1 ], "!=" ); assertEquals( notAnEventDateFieldOperators[ 2 ], "<" ); assertEquals( notAnEventDateFieldOperators[ 3 ], ">" ); assertEquals( notAnEventDateFieldOperators[ 4 ], "<=" ); assertEquals( notAnEventDateFieldOperators[ 5 ], ">=" ); assertEquals( notAnEventDateFieldOperators[ 6 ], "== null" ); assertEquals( notAnEventDateFieldOperators[ 7 ], "!= null" ); assertEquals( notAnEventDateFieldOperators[ 8 ], "in" ); assertEquals( notAnEventDateFieldOperators[ 9 ], "not in" ); assertEquals( notAnEventDateFieldOperators[ 10 ], "after" ); assertEquals( notAnEventDateFieldOperators[ 11 ], "before" ); assertEquals( notAnEventDateFieldOperators[ 12 ], "coincides" ); } } ); oracle.getOperatorCompletions( "AnEvent", "this", new Callback<String[]>() { @Override public void callback( final String[] anEventThisOperators ) { assertEquals( 17, anEventThisOperators.length ); assertEquals( anEventThisOperators[ 0 ], "==" ); assertEquals( anEventThisOperators[ 1 ], "!=" ); assertEquals( anEventThisOperators[ 2 ], "== null" ); assertEquals( anEventThisOperators[ 3 ], "!= null" ); assertEquals( anEventThisOperators[ 4 ], "after" ); assertEquals( anEventThisOperators[ 5 ], "before" ); assertEquals( anEventThisOperators[ 6 ], "coincides" ); assertEquals( anEventThisOperators[ 7 ], "during" ); assertEquals( anEventThisOperators[ 8 ], "finishes" ); assertEquals( anEventThisOperators[ 9 ], "finishedby" ); assertEquals( anEventThisOperators[ 10 ], "includes" ); assertEquals( anEventThisOperators[ 11 ], "meets" ); assertEquals( anEventThisOperators[ 12 ], "metby" ); assertEquals( anEventThisOperators[ 13 ], "overlaps" ); assertEquals( anEventThisOperators[ 14 ], "overlappedby" ); assertEquals( anEventThisOperators[ 15 ], "starts" ); assertEquals( anEventThisOperators[ 16 ], "startedby" ); } } ); } @Test @SuppressWarnings("serial") public void testCEPParameterCompletions() { List<Integer> c = CEPOracle.getCEPOperatorParameterSets( "after" ); assertEquals( 3, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); assertEquals( 2, c.get( 2 ).intValue() ); c = CEPOracle.getCEPOperatorParameterSets( "before" ); assertEquals( 3, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); assertEquals( 2, c.get( 2 ).intValue() ); c = CEPOracle.getCEPOperatorParameterSets( "coincides" ); assertEquals( 3, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); assertEquals( 2, c.get( 2 ).intValue() ); c = CEPOracle.getCEPOperatorParameterSets( "during" ); assertEquals( 4, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); assertEquals( 2, c.get( 2 ).intValue() ); assertEquals( 4, c.get( 3 ).intValue() ); c = CEPOracle.getCEPOperatorParameterSets( "finishes" ); assertEquals( 2, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); c = CEPOracle.getCEPOperatorParameterSets( "finishedby" ); assertEquals( 2, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); c = CEPOracle.getCEPOperatorParameterSets( "includes" ); assertEquals( 4, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); assertEquals( 2, c.get( 2 ).intValue() ); assertEquals( 4, c.get( 3 ).intValue() ); c = CEPOracle.getCEPOperatorParameterSets( "meets" ); assertEquals( 2, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); c = CEPOracle.getCEPOperatorParameterSets( "metby" ); assertEquals( 2, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); c = CEPOracle.getCEPOperatorParameterSets( "overlaps" ); assertEquals( 3, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); assertEquals( 2, c.get( 2 ).intValue() ); c = CEPOracle.getCEPOperatorParameterSets( "overlappedby" ); assertEquals( 3, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); assertEquals( 2, c.get( 2 ).intValue() ); c = CEPOracle.getCEPOperatorParameterSets( "starts" ); assertEquals( 2, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); c = CEPOracle.getCEPOperatorParameterSets( "startedby" ); assertEquals( 2, c.size() ); assertEquals( 0, c.get( 0 ).intValue() ); assertEquals( 1, c.get( 1 ).intValue() ); } @Test public void testCEPOperatorValidation() { assertFalse( CEPOracle.isCEPOperator( "==" ) ); assertFalse( CEPOracle.isCEPOperator( "!=" ) ); assertFalse( CEPOracle.isCEPOperator( "<" ) ); assertFalse( CEPOracle.isCEPOperator( ">" ) ); assertFalse( CEPOracle.isCEPOperator( "<=" ) ); assertFalse( CEPOracle.isCEPOperator( ">=" ) ); assertFalse( CEPOracle.isCEPOperator( "== null" ) ); assertFalse( CEPOracle.isCEPOperator( "!= null" ) ); assertTrue( CEPOracle.isCEPOperator( "after" ) ); assertTrue( CEPOracle.isCEPOperator( "before" ) ); assertTrue( CEPOracle.isCEPOperator( "coincides" ) ); assertTrue( CEPOracle.isCEPOperator( "during" ) ); assertTrue( CEPOracle.isCEPOperator( "finishes" ) ); assertTrue( CEPOracle.isCEPOperator( "finishedby" ) ); assertTrue( CEPOracle.isCEPOperator( "includes" ) ); assertTrue( CEPOracle.isCEPOperator( "meets" ) ); assertTrue( CEPOracle.isCEPOperator( "metby" ) ); assertTrue( CEPOracle.isCEPOperator( "overlaps" ) ); assertTrue( CEPOracle.isCEPOperator( "overlappedby" ) ); assertTrue( CEPOracle.isCEPOperator( "starts" ) ); assertTrue( CEPOracle.isCEPOperator( "startedby" ) ); } @Test public void testCEPWindowOperators() { List<String> operators = CEPOracle.getCEPWindowOperators(); assertEquals( 2, operators.size() ); assertEquals( "over window:time", operators.get( 0 ) ); assertEquals( "over window:length", operators.get( 1 ) ); } }