Skip to content

Commit

Permalink
added tests to reproduce issue claeis/ilivalidator#336
Browse files Browse the repository at this point in the history
  • Loading branch information
claeis committed Dec 28, 2021
1 parent 1c3f3f8 commit b2c527f
Show file tree
Hide file tree
Showing 2 changed files with 124 additions and 35 deletions.
65 changes: 49 additions & 16 deletions src/test/data/validator/Function23.ili
Original file line number Diff line number Diff line change
Expand Up @@ -177,17 +177,7 @@ MODEL Function23

STRUCTURE StructAp EXTENDS StructA =
END StructAp;

CLASS ClassU =
attrU1 : BAG {1..*} OF StructA;
MANDATORY CONSTRAINT INTERLIS.isOfClass(attrU1[1],>StructAp);
END ClassU;

CLASS ClassUA =
attrU1 : BAG {1..*} OF StructA;
MANDATORY CONSTRAINT INTERLIS.isOfClass(INTERLIS.myClass(attrU1[1]),>StructAp);
END ClassUA;


STRUCTURE StructB =
END StructB;

Expand All @@ -197,11 +187,6 @@ MODEL Function23
STRUCTURE StructBpp EXTENDS StructBp =
END StructBpp;

CLASS ClassV =
attrV1 : BAG {1..*} OF StructB;
MANDATORY CONSTRAINT INTERLIS.isOfClass(attrV1[1],>StructBp);
END ClassV;

CLASS ClassW =
MANDATORY CONSTRAINT INTERLIS.isSubClass(>StructB,>StructBp);
END ClassW;
Expand Down Expand Up @@ -271,4 +256,52 @@ MODEL Function23

END Topic;

TOPIC IsOfClassTest =

STRUCTURE StructA =
END StructA;

STRUCTURE StructAp EXTENDS StructA =
END StructAp;

CLASS ClassU =
attrU1 : BAG {1..*} OF StructA;
MANDATORY CONSTRAINT INTERLIS.isOfClass(attrU1[1],>StructAp);
END ClassU;

CLASS ClassUA =
attrU1 : BAG {1..*} OF StructA;
MANDATORY CONSTRAINT INTERLIS.isOfClass(INTERLIS.myClass(attrU1[1]),>StructAp);
END ClassUA;

STRUCTURE StructB =
END StructB;

STRUCTURE StructBp EXTENDS StructB =
END StructBp;

STRUCTURE StructBpp EXTENDS StructBp =
END StructBpp;

CLASS ClassV =
attrV1 : BAG {1..*} OF StructB;
MANDATORY CONSTRAINT INTERLIS.isOfClass(attrV1[1],>StructBp);
END ClassV;

CLASS ClassA =
END ClassA;

CLASS ClassB =
END ClassB;
CLASS ClassBp EXTENDS ClassB =
END ClassBp;

ASSOCIATION a2b =
a -- {0..1} ClassA;
b -- {0..*} ClassB;
MANDATORY CONSTRAINT INTERLIS.isOfClass(b,>ClassBp);
END a2b;

END IsOfClassTest;

END Function23.
94 changes: 75 additions & 19 deletions src/test/java/ch/interlis/iox_j/validator/Function23Test.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,18 @@ public class Function23Test {
// START BASKET EVENT
private final static String BID1="b1";
private final static String BID2="b2";
private static final String ILI_ISOFCLASS_TOPIC = "Function23.IsOfClassTest";
private static final String ILI_ISOFCLASS_STRUCTA = ILI_ISOFCLASS_TOPIC+".StructA";
private static final String ILI_ISOFCLASS_STRUCTAP = ILI_ISOFCLASS_TOPIC+".StructAp";
private static final String ILI_ISOFCLASS_STRUCTB = ILI_ISOFCLASS_TOPIC+".StructB";
private static final String ILI_ISOFCLASS_STRUCTBP = ILI_ISOFCLASS_TOPIC+".StructBp";
private static final String ILI_ISOFCLASS_STRUCTBPP = ILI_ISOFCLASS_TOPIC+".StructBpp";
private static final String ILI_ISOFCLASS_CLASSV = ILI_ISOFCLASS_TOPIC+".ClassV";
private static final String ILI_ISOFCLASS_CLASSU = ILI_ISOFCLASS_TOPIC+".ClassU";
private static final String ILI_ISOFCLASS_CLASSUA = ILI_ISOFCLASS_TOPIC+".ClassUA";
private static final String ILI_ISOFCLASS_CLASSA = ILI_ISOFCLASS_TOPIC+".ClassA";
private static final String ILI_ISOFCLASS_CLASSB = ILI_ISOFCLASS_TOPIC+".ClassB";
private static final String ILI_ISOFCLASS_CLASSBp = ILI_ISOFCLASS_TOPIC+".ClassBp";

@Before
public void setUp() throws Exception {
Expand Down Expand Up @@ -545,19 +557,19 @@ public void objectCountALL_Ok(){
@Test
public void isOfClassWithRef_Ok(){
String objTargetId=OBJ_OID1;
Iom_jObject iomObjS1=new Iom_jObject(ILI_STRUCTA, null);
Iom_jObject iomObjAP=new Iom_jObject(ILI_STRUCTAP, null);
Iom_jObject iomObjS1=new Iom_jObject(ILI_ISOFCLASS_STRUCTA, null);
Iom_jObject iomObjAP=new Iom_jObject(ILI_ISOFCLASS_STRUCTAP, null);
Iom_jObject o1Ref=new Iom_jObject("REF", null);
o1Ref.setobjectrefoid(objTargetId);
Iom_jObject iomObjU=new Iom_jObject(ILI_CLASSU, OBJ_OID1);
Iom_jObject iomObjU=new Iom_jObject(ILI_ISOFCLASS_CLASSU, OBJ_OID1);
iomObjU.addattrobj("attrU1", iomObjAP);
ValidationConfig modelConfig=new ValidationConfig();
LogCollector logger=new LogCollector();
LogEventFactory errFactory=new LogEventFactory();
Settings settings=new Settings();
Validator validator=new Validator(td, modelConfig,logger,errFactory,settings);
validator.validate(new StartTransferEvent());
validator.validate(new StartBasketEvent(ILI_TOPIC,BID1));
validator.validate(new StartBasketEvent(ILI_ISOFCLASS_TOPIC,BID1));
validator.validate(new ObjectEvent(iomObjU));
validator.validate(new ObjectEvent(iomObjS1));
validator.validate(new EndBasketEvent());
Expand All @@ -570,18 +582,18 @@ public void isOfClassWithRef_Ok(){
@Test
public void isOfClassWithRefEqualToMyClass_Ok(){
String objTargetId=OBJ_OID1;
Iom_jObject iomObjAP=new Iom_jObject(ILI_STRUCTAP, null);
Iom_jObject iomObjAP=new Iom_jObject(ILI_ISOFCLASS_STRUCTAP, null);
Iom_jObject o1Ref=new Iom_jObject("REF", null);
o1Ref.setobjectrefoid(objTargetId);
Iom_jObject iomObjU=new Iom_jObject(ILI_CLASSUA, OBJ_OID1);
Iom_jObject iomObjU=new Iom_jObject(ILI_ISOFCLASS_CLASSUA, OBJ_OID1);
iomObjU.addattrobj("attrU1", iomObjAP);
ValidationConfig modelConfig=new ValidationConfig();
LogCollector logger=new LogCollector();
LogEventFactory errFactory=new LogEventFactory();
Settings settings=new Settings();
Validator validator=new Validator(td, modelConfig,logger,errFactory,settings);
validator.validate(new StartTransferEvent());
validator.validate(new StartBasketEvent(ILI_TOPIC,BID1));
validator.validate(new StartBasketEvent(ILI_ISOFCLASS_TOPIC,BID1));
validator.validate(new ObjectEvent(iomObjU));
validator.validate(new EndBasketEvent());
validator.validate(new EndTransferEvent());
Expand Down Expand Up @@ -1453,34 +1465,78 @@ public void objectCount_0Object_Fail(){

@Test
public void isOfClass_Ok(){
Iom_jObject iomStructBP=new Iom_jObject(ILI_STRUCTBP, null);
Iom_jObject iomObjV=new Iom_jObject(ILI_CLASSV, OBJ_OID1);
Iom_jObject iomStructBP=new Iom_jObject(ILI_ISOFCLASS_STRUCTBP, null);
Iom_jObject iomObjV=new Iom_jObject(ILI_ISOFCLASS_CLASSV, OBJ_OID1);
iomObjV.addattrobj("attrV1", iomStructBP);
ValidationConfig modelConfig=new ValidationConfig();
LogCollector logger=new LogCollector();
LogEventFactory errFactory=new LogEventFactory();
Settings settings=new Settings();
Validator validator=new Validator(td, modelConfig,logger,errFactory,settings);
validator.validate(new StartTransferEvent());
validator.validate(new StartBasketEvent(ILI_TOPIC,BID1));
validator.validate(new StartBasketEvent(ILI_ISOFCLASS_TOPIC,BID1));
validator.validate(new ObjectEvent(iomObjV));
validator.validate(new EndBasketEvent());
validator.validate(new EndTransferEvent());
// Asserts
assertEquals(0,logger.getErrs().size());
}
@Test
@Ignore("ilivalidator#336")
public void isOfClass_EmbeddedRole_Ok(){
Iom_jObject iomObjA=new Iom_jObject(ILI_ISOFCLASS_CLASSA, OBJ_OID1);
Iom_jObject iomObjB=new Iom_jObject(ILI_ISOFCLASS_CLASSB, OBJ_OID2);
Iom_jObject iomObjBp=new Iom_jObject(ILI_ISOFCLASS_CLASSBp, OBJ_OID3);
iomObjBp.addattrobj("a", "REF").setobjectrefoid(iomObjA.getobjectoid());
ValidationConfig modelConfig=new ValidationConfig();
LogCollector logger=new LogCollector();
LogEventFactory errFactory=new LogEventFactory();
Settings settings=new Settings();
Validator validator=new Validator(td, modelConfig,logger,errFactory,settings);
validator.validate(new StartTransferEvent());
validator.validate(new StartBasketEvent(ILI_ISOFCLASS_TOPIC,BID1));
validator.validate(new ObjectEvent(iomObjA));
validator.validate(new ObjectEvent(iomObjB));
validator.validate(new ObjectEvent(iomObjBp));
validator.validate(new EndBasketEvent());
validator.validate(new EndTransferEvent());
// Asserts
assertEquals(0,logger.getErrs().size());
}
@Test
@Ignore("ilivalidator#336")
public void isOfClass_EmbeddedRole_Fail(){
Iom_jObject iomObjA=new Iom_jObject(ILI_ISOFCLASS_CLASSA, OBJ_OID1);
Iom_jObject iomObjB=new Iom_jObject(ILI_ISOFCLASS_CLASSB, OBJ_OID2);
Iom_jObject iomObjBp=new Iom_jObject(ILI_ISOFCLASS_CLASSBp, OBJ_OID3);
iomObjB.addattrobj("a", "REF").setobjectrefoid(iomObjA.getobjectoid());
ValidationConfig modelConfig=new ValidationConfig();
LogCollector logger=new LogCollector();
LogEventFactory errFactory=new LogEventFactory();
Settings settings=new Settings();
Validator validator=new Validator(td, modelConfig,logger,errFactory,settings);
validator.validate(new StartTransferEvent());
validator.validate(new StartBasketEvent(ILI_ISOFCLASS_TOPIC,BID1));
validator.validate(new ObjectEvent(iomObjA));
validator.validate(new ObjectEvent(iomObjB));
validator.validate(new ObjectEvent(iomObjBp));
validator.validate(new EndBasketEvent());
validator.validate(new EndTransferEvent());
// Asserts
assertEquals(1,logger.getErrs().size());
}
@Test
public void isOfClass_subClassOk(){
Iom_jObject iomStructBPP=new Iom_jObject(ILI_STRUCTBPP, null);
Iom_jObject iomObjV=new Iom_jObject(ILI_CLASSV, OBJ_OID1);
Iom_jObject iomStructBPP=new Iom_jObject(ILI_ISOFCLASS_STRUCTBPP, null);
Iom_jObject iomObjV=new Iom_jObject(ILI_ISOFCLASS_CLASSV, OBJ_OID1);
iomObjV.addattrobj("attrV1", iomStructBPP);
ValidationConfig modelConfig=new ValidationConfig();
LogCollector logger=new LogCollector();
LogEventFactory errFactory=new LogEventFactory();
Settings settings=new Settings();
Validator validator=new Validator(td, modelConfig,logger,errFactory,settings);
validator.validate(new StartTransferEvent());
validator.validate(new StartBasketEvent(ILI_TOPIC,BID1));
validator.validate(new StartBasketEvent(ILI_ISOFCLASS_TOPIC,BID1));
validator.validate(new ObjectEvent(iomObjV));
validator.validate(new EndBasketEvent());
validator.validate(new EndTransferEvent());
Expand All @@ -1489,22 +1545,22 @@ public void isOfClass_subClassOk(){
}
@Test
public void isOfClass_Object_Fail(){
Iom_jObject iomStructB=new Iom_jObject(ILI_STRUCTB, null);
Iom_jObject iomObjV=new Iom_jObject(ILI_CLASSV, OBJ_OID1);
Iom_jObject iomStructB=new Iom_jObject(ILI_ISOFCLASS_STRUCTB, null);
Iom_jObject iomObjV=new Iom_jObject(ILI_ISOFCLASS_CLASSV, OBJ_OID1);
iomObjV.addattrobj("attrV1", iomStructB);
ValidationConfig modelConfig=new ValidationConfig();
LogCollector logger=new LogCollector();
LogEventFactory errFactory=new LogEventFactory();
Settings settings=new Settings();
Validator validator=new Validator(td, modelConfig,logger,errFactory,settings);
validator.validate(new StartTransferEvent());
validator.validate(new StartBasketEvent(ILI_TOPIC,BID1));
validator.validate(new StartBasketEvent(ILI_ISOFCLASS_TOPIC,BID1));
validator.validate(new ObjectEvent(iomObjV));
validator.validate(new EndBasketEvent());
validator.validate(new EndTransferEvent());
// Asserts
assertEquals(1,logger.getErrs().size());
assertEquals("Mandatory Constraint Function23.Topic.ClassV.Constraint1 is not true.", logger.getErrs().get(0).getEventMsg());
assertEquals("Mandatory Constraint Function23.IsOfClassTest.ClassV.Constraint1 is not true.", logger.getErrs().get(0).getEventMsg());
}

// Es wird getestet ob eine Fehlermeldung ausgegeben wird, wenn bei der Funktion: isSubClass, die beiden Konstanten Klassen nicht uebereinstimmen.
Expand All @@ -1527,9 +1583,9 @@ public void isSubClassConstants_SubClassNotValid_Fail(){
}


// Es wird getestet ob eine Fehlermeldung ausgegeben wird, wenn bei der Funktion: isOfClass die MyClass ueber eine falsche Referenz fuehrt.
// Es wird getestet ob eine Fehlermeldung ausgegeben wird, wenn bei der Funktion: isSubClass die MyClass ueber eine falsche Referenz fuehrt.
@Test
public void isOfClass_MyClassNotValid_Fail(){
public void isSubClass_MyClassNotValid_Fail(){
String objTargetId=OBJ_OID1;
Iom_jObject iomObjS1=new Iom_jObject(ILI_STRUCTA, null);
Iom_jObject iomObjAP=new Iom_jObject(ILI_STRUCTAP, null);
Expand Down

0 comments on commit b2c527f

Please sign in to comment.