/*
* 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 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.kie.workbench.common.widgets.client.datamodel.PackageDataModelOracleTestUtils.*;
import static org.mockito.Mockito.*;
/**
* Tests for the ProjectDataModelOracle completions
*/
public class PackageDataModelOracleCompletionsTest {
@Mock
private Instance<DynamicValidator> validatorInstance;
@Test
public void testFactsAndFields() {
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()
.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() );
PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ),
new MockHasImports(),
oracle,
dataModel );
assertEquals( DataType.TYPE_NUMERIC_INTEGER,
oracle.getFieldType( "Person",
"age" ) );
assertEquals( DataType.TYPE_STRING,
oracle.getFieldType( "Person",
"sex" ) );
}
@Test
public void testFactCompletions() {
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( "rank",
Integer.class.getName(),
ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS,
ModelField.FIELD_ORIGIN.DECLARED,
FieldAccessorsAndMutators.BOTH,
DataType.TYPE_COMPARABLE ) )
.addField( new ModelField( "name",
String.class.getName(),
ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS,
ModelField.FIELD_ORIGIN.DECLARED,
FieldAccessorsAndMutators.BOTH,
DataType.TYPE_STRING ) )
.end()
.addFact( "Vehicle" )
.addField( new ModelField( "make",
String.class.getName(),
ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS,
ModelField.FIELD_ORIGIN.DECLARED,
FieldAccessorsAndMutators.BOTH,
DataType.TYPE_STRING ) )
.addField( new ModelField( "type",
String.class.getName(),
ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS,
ModelField.FIELD_ORIGIN.DECLARED,
FieldAccessorsAndMutators.BOTH,
DataType.TYPE_STRING ) )
.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() );
PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ),
new MockHasImports(),
oracle,
dataModel );
String[] types = oracle.getFactTypes();
assertEquals( 2,
types.length );
assertContains( "Person",
types );
assertContains( "Vehicle",
types );
}
@Test
public void testFactFieldCompletions() {
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( "rank",
Integer.class.getName(),
ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS,
ModelField.FIELD_ORIGIN.DECLARED,
FieldAccessorsAndMutators.BOTH,
DataType.TYPE_COMPARABLE ) )
.addField( new ModelField( "name",
String.class.getName(),
ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS,
ModelField.FIELD_ORIGIN.DECLARED,
FieldAccessorsAndMutators.BOTH,
DataType.TYPE_STRING ) )
.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() );
PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ),
new MockHasImports(),
oracle,
dataModel );
Callback<ModelField[]> callback = spy( new Callback<ModelField[]>() {
@Override
public void callback( final ModelField[] fields ) {
assertEquals( 4,
fields.length );
assertEquals( "age",
fields[ 0 ].getName() );
assertEquals( "name",
fields[ 1 ].getName() );
assertEquals( "rank",
fields[ 2 ].getName() );
assertEquals( "this",
fields[ 3 ].getName() );
}
} );
oracle.getFieldCompletions( "Person",
callback );
verify( callback ).callback( any( ModelField[].class ) );
}
@Test
public void testFactFieldOperatorCompletions() {
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( "rank",
Integer.class.getName(),
ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS,
ModelField.FIELD_ORIGIN.DECLARED,
FieldAccessorsAndMutators.BOTH,
DataType.TYPE_COMPARABLE ) )
.addField( new ModelField( "name",
String.class.getName(),
ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS,
ModelField.FIELD_ORIGIN.DECLARED,
FieldAccessorsAndMutators.BOTH,
DataType.TYPE_STRING ) )
.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() );
PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ),
new MockHasImports(),
oracle,
dataModel );
Callback<String[]> personCallback = spy( new Callback<String[]>() {
@Override
public void callback( final String[] personThisOperators ) {
assertEquals( 4,
personThisOperators.length );
assertEquals( personThisOperators[ 0 ],
"==" );
assertEquals( personThisOperators[ 1 ],
"!=" );
assertEquals( personThisOperators[ 2 ],
"== null" );
assertEquals( personThisOperators[ 3 ],
"!= null" );
}
} );
oracle.getOperatorCompletions( "Person",
"this",
personCallback );
verify( personCallback ).callback( any( String[].class ) );
Callback<String[]> personAgeCallback = spy( new Callback<String[]>() {
@Override
public void callback( final String[] personAgeOperators ) {
assertEquals( 10,
personAgeOperators.length );
assertEquals( personAgeOperators[ 0 ],
"==" );
assertEquals( personAgeOperators[ 1 ],
"!=" );
assertEquals( personAgeOperators[ 2 ],
"<" );
assertEquals( personAgeOperators[ 3 ],
">" );
assertEquals( personAgeOperators[ 4 ],
"<=" );
assertEquals( personAgeOperators[ 5 ],
">=" );
assertEquals( personAgeOperators[ 6 ],
"== null" );
assertEquals( personAgeOperators[ 7 ],
"!= null" );
assertEquals( personAgeOperators[ 8 ],
"in" );
assertEquals( personAgeOperators[ 9 ],
"not in" );
}
} );
oracle.getOperatorCompletions( "Person",
"age",
personAgeCallback );
verify( personAgeCallback ).callback( any( String[].class ) );
Callback<String[]> personRankCallback = spy( new Callback<String[]>() {
@Override
public void callback( final String[] personRankOperators ) {
assertEquals( 8,
personRankOperators.length );
assertEquals( personRankOperators[ 0 ],
"==" );
assertEquals( personRankOperators[ 1 ],
"!=" );
assertEquals( personRankOperators[ 2 ],
"<" );
assertEquals( personRankOperators[ 3 ],
">" );
assertEquals( personRankOperators[ 4 ],
"<=" );
assertEquals( personRankOperators[ 5 ],
">=" );
assertEquals( personRankOperators[ 6 ],
"== null" );
assertEquals( personRankOperators[ 7 ],
"!= null" );
}
} );
oracle.getOperatorCompletions( "Person",
"rank",
personRankCallback );
verify( personRankCallback ).callback( any( String[].class ) );
Callback<String[]> personNameCallback = spy( new Callback<String[]>() {
@Override
public void callback( final String[] personNameOperators ) {
assertEquals( 12,
personNameOperators.length );
assertEquals( "==",
personNameOperators[ 0 ] );
assertEquals( "!=",
personNameOperators[ 1 ] );
assertEquals( "<",
personNameOperators[ 2 ] );
assertEquals( ">",
personNameOperators[ 3 ] );
assertEquals( "<=",
personNameOperators[ 4 ] );
assertEquals( ">=",
personNameOperators[ 5 ] );
assertEquals( "matches",
personNameOperators[ 6 ] );
assertEquals( "soundslike",
personNameOperators[ 7 ] );
assertEquals( "== null",
personNameOperators[ 8 ] );
assertEquals( "!= null",
personNameOperators[ 9 ] );
assertEquals( "in",
personNameOperators[ 10 ] );
assertEquals( "not in",
personNameOperators[ 11 ] );
}
} );
oracle.getOperatorCompletions( "Person",
"name",
personNameCallback );
verify( personNameCallback ).callback( any( String[].class ) );
}
@Test
public void testFactFieldConnectiveOperatorCompletions() {
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( "rank",
Integer.class.getName(),
ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS,
ModelField.FIELD_ORIGIN.DECLARED,
FieldAccessorsAndMutators.BOTH,
DataType.TYPE_COMPARABLE ) )
.addField( new ModelField( "name",
String.class.getName(),
ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS,
ModelField.FIELD_ORIGIN.DECLARED,
FieldAccessorsAndMutators.BOTH,
DataType.TYPE_STRING ) )
.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() );
PackageDataModelOracleTestUtils.populateDataModelOracle( mock( Path.class ),
new MockHasImports(),
oracle,
dataModel );
Callback<String[]> personThisCallback = spy( new Callback<String[]>() {
@Override
public void callback( final String[] personThisConnectiveOperators ) {
assertEquals( 3,
personThisConnectiveOperators.length );
assertEquals( personThisConnectiveOperators[ 0 ],
"|| ==" );
assertEquals( personThisConnectiveOperators[ 1 ],
"|| !=" );
assertEquals( personThisConnectiveOperators[ 2 ],
"&& !=" );
}
} );
oracle.getConnectiveOperatorCompletions( "Person",
"this",
personThisCallback );
verify( personThisCallback ).callback( any( String[].class ) );
Callback<String[]> personAgeCallback = spy( new Callback<String[]>() {
@Override
public void callback( final String[] personAgeConnectiveOperators ) {
assertEquals( 11,
personAgeConnectiveOperators.length );
assertEquals( personAgeConnectiveOperators[ 0 ],
"|| ==" );
assertEquals( personAgeConnectiveOperators[ 1 ],
"|| !=" );
assertEquals( personAgeConnectiveOperators[ 2 ],
"&& !=" );
assertEquals( personAgeConnectiveOperators[ 3 ],
"&& >" );
assertEquals( personAgeConnectiveOperators[ 4 ],
"&& <" );
assertEquals( personAgeConnectiveOperators[ 5 ],
"|| >" );
assertEquals( personAgeConnectiveOperators[ 6 ],
"|| <" );
assertEquals( personAgeConnectiveOperators[ 7 ],
"&& >=" );
assertEquals( personAgeConnectiveOperators[ 8 ],
"&& <=" );
assertEquals( personAgeConnectiveOperators[ 9 ],
"|| <=" );
assertEquals( personAgeConnectiveOperators[ 10 ],
"|| >=" );
}
} );
oracle.getConnectiveOperatorCompletions( "Person",
"age",
personAgeCallback );
verify( personAgeCallback ).callback( any( String[].class ) );
Callback<String[]> personNameCallback = spy( new Callback<String[]>() {
@Override
public void callback( final String[] personRankConnectiveOperators ) {
assertEquals( 11,
personRankConnectiveOperators.length );
assertEquals( personRankConnectiveOperators[ 0 ],
"|| ==" );
assertEquals( personRankConnectiveOperators[ 1 ],
"|| !=" );
assertEquals( personRankConnectiveOperators[ 2 ],
"&& !=" );
assertEquals( personRankConnectiveOperators[ 3 ],
"&& >" );
assertEquals( personRankConnectiveOperators[ 4 ],
"&& <" );
assertEquals( personRankConnectiveOperators[ 5 ],
"|| >" );
assertEquals( personRankConnectiveOperators[ 6 ],
"|| <" );
assertEquals( personRankConnectiveOperators[ 7 ],
"&& >=" );
assertEquals( personRankConnectiveOperators[ 8 ],
"&& <=" );
assertEquals( personRankConnectiveOperators[ 9 ],
"|| <=" );
assertEquals( personRankConnectiveOperators[ 10 ],
"|| >=" );
}
} );
oracle.getConnectiveOperatorCompletions( "Person",
"rank",
personNameCallback );
verify( personAgeCallback ).callback( any( String[].class ) );
Callback<String[]> personNameCallback2 = spy( new Callback<String[]>() {
@Override
public void callback( final String[] personNameConnectiveOperators ) {
assertEquals( 13,
personNameConnectiveOperators.length );
assertEquals( personNameConnectiveOperators[ 0 ],
"|| ==" );
assertEquals( personNameConnectiveOperators[ 1 ],
"|| !=" );
assertEquals( personNameConnectiveOperators[ 2 ],
"&& !=" );
assertEquals( personNameConnectiveOperators[ 3 ],
"&& >" );
assertEquals( personNameConnectiveOperators[ 4 ],
"&& <" );
assertEquals( personNameConnectiveOperators[ 5 ],
"|| >" );
assertEquals( personNameConnectiveOperators[ 6 ],
"|| <" );
assertEquals( personNameConnectiveOperators[ 7 ],
"&& >=" );
assertEquals( personNameConnectiveOperators[ 8 ],
"&& <=" );
assertEquals( personNameConnectiveOperators[ 9 ],
"|| <=" );
assertEquals( personNameConnectiveOperators[ 10 ],
"|| >=" );
assertEquals( personNameConnectiveOperators[ 11 ],
"&& matches" );
assertEquals( personNameConnectiveOperators[ 12 ],
"|| matches" );
}
} );
oracle.getConnectiveOperatorCompletions( "Person",
"name",
personNameCallback2 );
verify( personNameCallback2 ).callback( any( String[].class ) );
}
}