blob: 69c90e7e3505eff94540a1d17660cc844af9e70b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Bosch Software Innovations GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* The Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Bosch Software Innovations GmbH - Please refer to git log
*
*******************************************************************************/
package org.eclipse.vorto.fbeditor.tests.validator
import org.eclipse.vorto.fbeditor.FunctionblockStandaloneSetup
import org.eclipse.vorto.fbeditor.validation.FunctionblockValidator
import org.eclipse.vorto.fbeditor.internal.validation.SystemMessage
import org.eclipse.vorto.functionblock.ConstraintIntervalType
import org.eclipse.vorto.functionblock.FunctionblockFactory
import org.eclipse.vorto.functionblock.PrimitiveType
import org.eclipse.xtext.junit4.AbstractXtextTests
import org.eclipse.xtext.junit4.validation.ValidatorTester
import org.junit.Test
class FbValidatorTest extends AbstractXtextTests {
private ValidatorTester<FunctionblockValidator> tester;
def override void setUp() throws Exception {
super.setUp();
with(FunctionblockStandaloneSetup);
var validator = get(FunctionblockValidator);
tester = new ValidatorTester<FunctionblockValidator>(validator, getInjector());
}
@Test
def test_Duplicated_Entity() {
var fbmodel = FunctionblockFactory.eINSTANCE.createFunctionblockModel();
var entity1 = FunctionblockFactory.eINSTANCE.createEntity();
entity1.setName("abc");
var entity2 = FunctionblockFactory.eINSTANCE.createEntity();
entity2.setName("abc");
fbmodel.getElements().add(entity1);
fbmodel.getElements().add(entity2);
tester.validator().checkDuplicateEntityName(entity1);
tester.diagnose().assertErrorContains(SystemMessage.ERROR_DUPLICATED_ENTITY_NAME);
}
@Test
def test_Duplicated_OperationName() {
var fbmodel = FunctionblockFactory.eINSTANCE.createFunctionBlock();
var op1=FunctionblockFactory.eINSTANCE.createOperation();
op1.setMethodName("on");
var op2=FunctionblockFactory.eINSTANCE.createOperation();
op2.setMethodName("on");
fbmodel.getFeatures().add(op1);
fbmodel.getFeatures().add(op2);
tester.validator().checkDuplicateOperation(op1);
tester.diagnose().assertErrorContains(SystemMessage.ERROR_DUPLICATED_METHOD_NAME);
}
@Test
def test_Duplicated_ParameterName() {
var operation = FunctionblockFactory.eINSTANCE.createOperation();
var param1= FunctionblockFactory.eINSTANCE.createPrimitiveParam()
param1.setParamName("ABB");
var param2= FunctionblockFactory.eINSTANCE.createPrimitiveParam();
param2.setParamName("ABB");
operation.getParams().add(param1);
operation.getParams().add(param2);
tester.validator().checkDuplicateParameter(operation);
tester.diagnose().assertErrorContains(SystemMessage.ERROR_DUPLICATED_PARAMETER_NAME);
}
@Test
def test_Duplicated_Feature() {
var fbFeature = FunctionblockFactory.eINSTANCE.createFBFeature();
var feature = FunctionblockFactory.eINSTANCE.createProperty();
feature.setPropName("Test");
var feature2 = FunctionblockFactory.eINSTANCE.createProperty();
feature2.setPropName("Test");
fbFeature.properties.add(feature);
fbFeature.properties.add(feature2);
tester.validator().checkProperty(feature);
tester.diagnose().assertErrorContains(SystemMessage.ERROR_DUPLICATED_PROPERTY_NAME);
}
@Test
def test_EntityName_CamelCase() {
var entity = FunctionblockFactory.eINSTANCE.createEntity();
entity.setName("abc");
tester.validator().checkEntityName(entity);
tester.diagnose().assertErrorContains(SystemMessage.ERROR_ENTITYNAME_INVALID_CAMELCASE);
}
@Test
def test_EntityName_SuffixReply() {
var entity = FunctionblockFactory.eINSTANCE.createEntity();
entity.setName("AbcReply");
tester.validator().checkEntityName(entity);
tester.diagnose().assertErrorContains(SystemMessage.ERROR_ENTITYNAME_SUFFIX_REPLY);
}
@Test
def test_EntityName_SuffixReply_JustReply() {
var entity = FunctionblockFactory.eINSTANCE.createEntity();
entity.setName("Reply");
tester.validator().checkEntityName(entity);
tester.diagnose().assertErrorContains(SystemMessage.ERROR_ENTITYNAME_SUFFIX_REPLY);
}
@Test
def test_FBName() {
var fbmodel = FunctionblockFactory.eINSTANCE.createFunctionblockModel();
fbmodel.setName("fame")
tester.validator().checkFunctionBlockName(fbmodel);
tester.diagnose().assertErrorContains(SystemMessage.ERROR_FBNAME_INVALID);
}
@Test
def test_Property_Name_SuffixTS(){
var property = FunctionblockFactory.eINSTANCE.createProperty();
property.setPropName("sodaTS")
tester.validator().checkPropertyName(property)
tester.diagnose().assertErrorContains(SystemMessage.ERROR_PROPNAME_SUFFIX_TS);
}
@Test
def test_Property_Name_Suffixts(){
var feature = FunctionblockFactory.eINSTANCE.createProperty();
feature.setPropName("products")
tester.validator().checkPropertyName(feature)
tester.diagnose().assertOK()
}
@Test
def test_OperationName_Same_EntityName() {
var fbmodel = FunctionblockFactory.eINSTANCE.createFunctionblockModel();
var fb = FunctionblockFactory.eINSTANCE.createFunctionBlock();
var op1=FunctionblockFactory.eINSTANCE.createOperation();
var ent = FunctionblockFactory.eINSTANCE.createEntity()
op1.setMethodName("transAction");
ent.setName("TransAction")
fb.features.add(op1)
fbmodel.elements.add(ent)
fbmodel.setFunctionblock(fb);
tester.validator().checkOpNameAgainstEntityName(op1)
tester.diagnose().assertErrorContains(SystemMessage.ERROR_OPERATION_SAME_ENTITYNAME);
}
@Test
def test_OperationName_Same_EnumName() {
var fbmodel = FunctionblockFactory.eINSTANCE.createFunctionblockModel();
var fb = FunctionblockFactory.eINSTANCE.createFunctionBlock();
var op1=FunctionblockFactory.eINSTANCE.createOperation();
var ent = FunctionblockFactory.eINSTANCE.createEnum()
op1.setMethodName("transAction");
ent.setName("TransAction")
fb.features.add(op1)
fbmodel.enums.add(ent)
fbmodel.setFunctionblock(fb);
tester.validator().checkOpNameAgainstEntityName(op1)
tester.diagnose().assertErrorContains(SystemMessage.ERROR_OPERATION_SAME_ENUMNAME);
}
@Test
def test_OperationName_Diff_EnumName() {
var fbmodel = FunctionblockFactory.eINSTANCE.createFunctionblockModel();
var fb = FunctionblockFactory.eINSTANCE.createFunctionBlock();
var op1=FunctionblockFactory.eINSTANCE.createOperation();
var ent = FunctionblockFactory.eINSTANCE.createEnum()
op1.setMethodName("transActionz");
ent.setName("TransAction")
fb.features.add(op1)
fbmodel.enums.add(ent)
fbmodel.setFunctionblock(fb);
tester.validator().checkOpNameAgainstEntityName(op1)
tester.diagnose().assertOK
}
@Test
def test_OperationName_Same_EntityName_Multiple_Op() {
var fbmodel = FunctionblockFactory.eINSTANCE.createFunctionblockModel();
var fb = FunctionblockFactory.eINSTANCE.createFunctionBlock();
var op1=FunctionblockFactory.eINSTANCE.createOperation();
var op2=FunctionblockFactory.eINSTANCE.createOperation();
var ent = FunctionblockFactory.eINSTANCE.createEntity()
var ent1 = FunctionblockFactory.eINSTANCE.createEntity()
op1.setMethodName("transAction");
op2.setMethodName("action");
ent.setName("TransAction")
ent1.setName("Trans");
fb.features.add(op1)
fb.features.add(op2)
fbmodel.elements.add(ent)
fbmodel.elements.add(ent1)
fbmodel.setFunctionblock(fb);
tester.validator().checkOpNameAgainstEntityName(op1)
tester.diagnose().assertErrorContains(SystemMessage.ERROR_OPERATION_SAME_ENTITYNAME);
}
@Test
def test_Duplicated_Constraint() {
var feature = FunctionblockFactory.eINSTANCE.createPrimitiveProperty();
feature.type = PrimitiveType.STRING
var constraint1 = FunctionblockFactory.eINSTANCE.createConstraint();
constraint1.type = ConstraintIntervalType.STRLEN
feature.constraints.add(constraint1)
var constraint2 = FunctionblockFactory.eINSTANCE.createConstraint();
constraint2.type = ConstraintIntervalType.STRLEN
feature.constraints.add(constraint2)
tester.validator().checkDuplicatedConstraint(feature);
tester.diagnose().assertErrorContains(SystemMessage.ERROR_DUPLICATED_CONSTRAINT);
}
@Test
def test_FuncBlock_Version_Valid(){
var fb = FunctionblockFactory.eINSTANCE.createFunctionBlock();
fb.version = "1.1.1-RC"
tester.validator().checkVersionPattern(fb)
tester.diagnose().assertOK
var fb1 = FunctionblockFactory.eINSTANCE.createFunctionBlock();
fb1.version = "1.1.1"
tester.validator().checkVersionPattern(fb1)
tester.diagnose().assertOK
var fb2 = FunctionblockFactory.eINSTANCE.createFunctionBlock();
fb2.version = "11.11.11"
tester.validator().checkVersionPattern(fb2)
tester.diagnose().assertOK
}
@Test
def test_FuncBlock_Version_Invalid(){
var fb = FunctionblockFactory.eINSTANCE.createFunctionBlock();
fb.version = "1.1"
tester.validator().checkVersionPattern(fb)
tester.diagnose().assertErrorContains(SystemMessage.ERROR_VERSION_PATTERN);
var fb1 = FunctionblockFactory.eINSTANCE.createFunctionBlock();
fb1.version = "1."
tester.validator().checkVersionPattern(fb1)
tester.diagnose().assertErrorContains(SystemMessage.ERROR_VERSION_PATTERN);
var fb2 = FunctionblockFactory.eINSTANCE.createFunctionBlock();
fb2.version = "1"
tester.validator().checkVersionPattern(fb2)
tester.diagnose().assertErrorContains(SystemMessage.ERROR_VERSION_PATTERN);
var fb3 = FunctionblockFactory.eINSTANCE.createFunctionBlock();
fb3.version = "1.1-RC"
tester.validator().checkVersionPattern(fb3)
tester.diagnose().assertErrorContains(SystemMessage.ERROR_VERSION_PATTERN);
var fb4 = FunctionblockFactory.eINSTANCE.createFunctionBlock();
fb4.version = "1-RC"
tester.validator().checkVersionPattern(fb4)
tester.diagnose().assertErrorContains(SystemMessage.ERROR_VERSION_PATTERN);
}
@Test
def test_Duplicated_Enum() {
var fbmodel = FunctionblockFactory.eINSTANCE.createFunctionblockModel();
var enum1 = FunctionblockFactory.eINSTANCE.createEnum();
enum1.setName("Abc");
var enum2 = FunctionblockFactory.eINSTANCE.createEnum();
enum2.setName("Abc");
fbmodel.getEnums().add(enum1);
fbmodel.getEnums().add(enum2);
tester.validator().checkDuplicateEnumName(enum1);
tester.diagnose().assertErrorContains(SystemMessage.ERROR_DUPLICATED_ENUM_NAME);
}
@Test
def test_Enum_Name() {
var enum1 = FunctionblockFactory.eINSTANCE.createEnum();
enum1.setName("abc");
tester.validator().checkEnumName(enum1);
tester.diagnose().assertErrorContains(SystemMessage.ERROR_ENUMNAME_INVALID_CAMELCASE);
var enum2 = FunctionblockFactory.eINSTANCE.createEnum();
enum2.setName("Abc");
tester.validator().checkEnumName(enum2);
tester.diagnose().assertOK
}
@Test
def test_Duplicated_Literal() {
var enum1 = FunctionblockFactory.eINSTANCE.createEnum();
enum1.setName("Abc");
var literal1 = FunctionblockFactory.eINSTANCE.createEnumLiteral
var literal2 = FunctionblockFactory.eINSTANCE.createEnumLiteral
literal1.literal = "green"
literal2.literal = "green"
enum1.enums.add(literal1)
enum1.enums.add(literal2)
tester.validator().checkDuplicatedLiteral(enum1)
tester.diagnose().assertErrorContains(SystemMessage.ERROR_DUPLICATED_ENUM_LITERAL);
}
@Test
def test_EntityName_Same_EnumName() {
var fbmodel = FunctionblockFactory.eINSTANCE.createFunctionblockModel();
var enm = FunctionblockFactory.eINSTANCE.createEnum()
var ent = FunctionblockFactory.eINSTANCE.createEntity()
ent.setName("TransAction")
enm.setName("TransAction")
fbmodel.elements.add(ent)
fbmodel.enums.add(enm)
tester.validator().checkEnumNameAgainstEntityName(enm)
tester.diagnose().assertErrorContains(SystemMessage.ERROR_ENTITY_SAME_ENUMNAME);
}
@Test
def test_EntityName_Diff_EnumName() {
var fbmodel = FunctionblockFactory.eINSTANCE.createFunctionblockModel();
var enm = FunctionblockFactory.eINSTANCE.createEnum()
var ent = FunctionblockFactory.eINSTANCE.createEntity()
ent.setName("TransAction")
enm.setName("TransActionZ")
fbmodel.elements.add(ent)
fbmodel.enums.add(enm)
tester.validator().checkEnumNameAgainstEntityName(enm)
tester.diagnose().assertOK
}
@Test
def test_Enum_Empty_Literal() {
var enum1 = FunctionblockFactory.eINSTANCE.createEnum();
enum1.setName("Abc");
tester.validator().checkEnum(enum1);
tester.diagnose().assertErrorContains(SystemMessage.ERROR_ENUM_CANNOT_BE_EMPTY);
var lit = FunctionblockFactory.eINSTANCE.createEnumLiteral;
lit.setLiteral("test")
enum1.enums.add(lit)
tester.validator().checkEnumName(enum1);
tester.diagnose().assertOK
}
}