From b05c05cb3ec66c5787078405b7127ab27865eadf Mon Sep 17 00:00:00 2001 From: rhiltbrunner Date: Tue, 5 Jun 2018 14:49:03 +0200 Subject: [PATCH] changed: numeric rounding for ili10 and ili23 (claeis/ilivalidator#111) - added separate test class for numeric - added test class to test the numericRounding methode --- .../interlis/iox_j/validator/Validator.java | 49 +- src/test/data/validator/Datatypes23.ili | 8 +- .../iox_j/validator/Datatypes10Test.java | 102 ++- .../iox_j/validator/Datatypes23Test.java | 266 ++----- .../iox_j/validator/Numeric23Test.java | 668 ++++++++++++++++++ .../iox_j/validator/RoundNumeric23Test.java | 175 +++++ 6 files changed, 1033 insertions(+), 235 deletions(-) create mode 100644 src/test/java/ch/interlis/iox_j/validator/Numeric23Test.java create mode 100644 src/test/java/ch/interlis/iox_j/validator/RoundNumeric23Test.java diff --git a/src/main/java/ch/interlis/iox_j/validator/Validator.java b/src/main/java/ch/interlis/iox_j/validator/Validator.java index 9138d266..6883d6d8 100644 --- a/src/main/java/ch/interlis/iox_j/validator/Validator.java +++ b/src/main/java/ch/interlis/iox_j/validator/Validator.java @@ -1,6 +1,10 @@ package ch.interlis.iox_j.validator; import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -3215,25 +3219,36 @@ private void validateNumericType(String validateType, NumericType type, String v if(value!=null){ PrecisionDecimal minimum=((NumericType) type).getMinimum(); PrecisionDecimal maximum=((NumericType) type).getMaximum(); - BigDecimal rounded = new BigDecimal( - value.toString()).setScale( - value.getExponent(), - BigDecimal.ROUND_HALF_UP); - BigDecimal min_general = new BigDecimal( - minimum.toString()).setScale( - minimum.getExponent(), - BigDecimal.ROUND_HALF_UP); - BigDecimal max_general = new BigDecimal( - maximum.toString()).setScale( - maximum.getExponent(), - BigDecimal.ROUND_HALF_UP); - if (rounded.compareTo (min_general) == -1 - || rounded.compareTo (max_general) == +1){ - logMsg(validateType,"value {0} is out of range", valueStr); - } + BigDecimal min_general = new BigDecimal(minimum.toString()); + BigDecimal max_general = new BigDecimal(maximum.toString()); + BigDecimal valueBigDec = new BigDecimal(value.toString()); + int precision= minimum.getAccuracy(); + BigDecimal rounded=roundNumeric(precision,valueStr); + if (rounded!=null && (rounded.compareTo(min_general)==-1 || rounded.compareTo(max_general)==+1)){ + logMsg(validateType,"value {0} is out of range", rounded.toString()); + } } } - + + public static BigDecimal roundNumeric(int precision, String valueStr) { + if(valueStr==null) { + return null; + } + double valueDouble=Double.valueOf(valueStr); + boolean isNegative=valueDouble<0; + + BigDecimal value=new BigDecimal(valueStr); + BigDecimal rounded=null; + if(value!=null) { + if(isNegative){ + rounded=value.setScale(precision, BigDecimal.ROUND_HALF_DOWN); + }else { + rounded=value.setScale(precision, BigDecimal.ROUND_HALF_UP); + } + } + return rounded; + } + public boolean isValidUuid(String valueStr) { return valueStr.length() == 36 && valueStr.matches("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}?"); } diff --git a/src/test/data/validator/Datatypes23.ili b/src/test/data/validator/Datatypes23.ili index 54723ba3..cbcaca9b 100644 --- a/src/test/data/validator/Datatypes23.ili +++ b/src/test/data/validator/Datatypes23.ili @@ -64,8 +64,12 @@ MODEL Datatypes23 aBoolean : BOOLEAN; !! NumericType - numericInt : 0 .. 10; - numericDec : 0.0 .. 10.0; + numericInt : -10 .. 10; + numericInt2 : -9 .. 9; + numericInt3 : -199999 .. 199999; + numericDec : -10.0 .. 10.0; + numericDec2 : -0.001 .. 0.001; + numericDec3 : -1.999999999999 .. 1.999999999999; numericNum : numerictype; !!numCountClockWise : numericCounterClockwise; !!numCountClock : numericCounterClock; diff --git a/src/test/java/ch/interlis/iox_j/validator/Datatypes10Test.java b/src/test/java/ch/interlis/iox_j/validator/Datatypes10Test.java index 6f4f3182..e6da2174 100644 --- a/src/test/java/ch/interlis/iox_j/validator/Datatypes10Test.java +++ b/src/test/java/ch/interlis/iox_j/validator/Datatypes10Test.java @@ -195,7 +195,7 @@ public void text2ZeichensatzContentOk(){ @Test public void bereichMaximumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("bereich", "10.4"); + objTest.setattrvalue("bereich", "9.94"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -210,13 +210,14 @@ public void bereichMaximumOk(){ assertTrue(logger.getErrs().size()==0); } - // Dezimal 0.0 wird gerundet auf (0). - // -0.4 gerundet = 0. valid. - // -0.5 gerundet = -1. unvalid. + // Dezimal -0.05 wird gerundet auf (0). + // -0.04 gerundet = 0. valid. + // -0.05 gerundet = 0. valid. + // -0.06 gerundet = -1. unvalid. @Test public void bereichMinimumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("bereich", "-0.4"); + objTest.setattrvalue("bereich", "-0.05"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -235,7 +236,7 @@ public void bereichMinimumOk(){ @Test public void bereich2MaximumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("bereich2", "10.499"); + objTest.setattrvalue("bereich2", "9.999"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -254,7 +255,7 @@ public void bereich2MaximumOk(){ @Test public void bereich2MinimumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("bereich2", "-0.499"); + objTest.setattrvalue("bereich2", "0.000"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -330,7 +331,7 @@ public void aufzaehlungVerschachtelungOk(){ @Test public void laengeMaximumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("laenge", "10.4"); + objTest.setattrvalue("laenge", "9.94"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -349,7 +350,7 @@ public void laengeMaximumOk(){ @Test public void laengeMinimumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("laenge", "0.5"); + objTest.setattrvalue("laenge", "0.95"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -387,7 +388,7 @@ public void laenge2ThirdPositionAfterDotOk(){ @Test public void flaecheMaximumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("flaeche", "10.4"); + objTest.setattrvalue("flaeche", "9.94"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -406,7 +407,7 @@ public void flaecheMaximumOk(){ @Test public void flaecheMinimumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("flaeche", "0.5"); + objTest.setattrvalue("flaeche", "0.95"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -425,7 +426,7 @@ public void flaecheMinimumOk(){ @Test public void flaeche2ThirdPositionAfterDotOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("flaeche2", "99.000"); + objTest.setattrvalue("flaeche2", "98.999"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -444,7 +445,7 @@ public void flaeche2ThirdPositionAfterDotOk(){ @Test public void winkelRadianMaximumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("radians", "10.4"); + objTest.setattrvalue("radians", "10.0"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -463,7 +464,7 @@ public void winkelRadianMaximumOk(){ @Test public void winkelRadianMinimumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("radians", "0.5"); + objTest.setattrvalue("radians", "1.0"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -482,7 +483,7 @@ public void winkelRadianMinimumOk(){ @Test public void winkelGradsMaximumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("grads", "10.4"); + objTest.setattrvalue("grads", "10.04"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -501,7 +502,7 @@ public void winkelGradsMaximumOk(){ @Test public void winkelGradsMinimumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("grads", "0.5"); + objTest.setattrvalue("grads", "0.95"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -520,7 +521,7 @@ public void winkelGradsMinimumOk(){ @Test public void winkelDegreesMaximumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("degrees", "10.4"); + objTest.setattrvalue("degrees", "10.04"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -539,7 +540,7 @@ public void winkelDegreesMaximumOk(){ @Test public void winkelDegreesMinimumOk(){ Iom_jObject objTest=new Iom_jObject("Datatypes10.Topic.Table", "o1"); - objTest.setattrvalue("degrees", "0.5"); + objTest.setattrvalue("degrees", "0.95"); ValidationConfig modelConfig=new ValidationConfig(); LogCollector logger=new LogCollector(); LogEventFactory errFactory=new LogEventFactory(); @@ -1784,5 +1785,68 @@ public void koord3WrongDimensionsFail(){ assertEquals("Wrong COORD structure, C3 expected", logger.getErrs().get(0).getEventMsg()); } - + // eine Fehlermeldung wird erwartet, da 9(4) auf 90 abgerundet werden soll, + // und somit der gueltige Bereich unterschritten wird. + @Test + public void coordType_Rounding_Down_Fail(){ + Iom_jObject obj=new Iom_jObject("Datatypes10.Topic.Table", "o1"); + IomObject coordValue=obj.addattrobj("koord2", "COORD"); + coordValue.setattrvalue("C1", "5.55"); + coordValue.setattrvalue("C2", "99.94"); + 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("Datatypes10.Topic","b1")); + validator.validate(new ObjectEvent(obj)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value 99.9 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob 9(5) erfolgreich auf 100 aufgerundet wird. + @Test + public void coordType_Rounding_UpFrom5_Ok(){ + Iom_jObject obj=new Iom_jObject("Datatypes10.Topic.Table", "o1"); + IomObject coordValue=obj.addattrobj("koord2", "COORD"); + coordValue.setattrvalue("C1", "5.55"); + coordValue.setattrvalue("C2", "99.95"); + 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("Datatypes10.Topic","b1")); + validator.validate(new ObjectEvent(obj)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // prueft, ob 9(6) erfolgreich auf 100 aufgerundet wird. + @Test + public void coordType_Rounding_Up_Ok(){ + Iom_jObject obj=new Iom_jObject("Datatypes10.Topic.Table", "o1"); + IomObject coordValue=obj.addattrobj("koord2", "COORD"); + coordValue.setattrvalue("C1", "5.55"); + coordValue.setattrvalue("C2", "99.96"); + 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("Datatypes10.Topic","b1")); + validator.validate(new ObjectEvent(obj)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } } \ No newline at end of file diff --git a/src/test/java/ch/interlis/iox_j/validator/Datatypes23Test.java b/src/test/java/ch/interlis/iox_j/validator/Datatypes23Test.java index 73ef88fe..7f70cf58 100644 --- a/src/test/java/ch/interlis/iox_j/validator/Datatypes23Test.java +++ b/src/test/java/ch/interlis/iox_j/validator/Datatypes23Test.java @@ -661,82 +661,6 @@ public void dateTimeMinSecondOk(){ // Assert assertTrue(logger.getErrs().size()==0); } - - // Die kleinste Nummern Angabe wird getestet. - @Test - public void numericIntTypeMinOk(){ - Iom_jObject objMinLength=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); - objMinLength.setattrvalue("numericInt", "0"); - 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("Datatypes23.Topic","b1")); - validator.validate(new ObjectEvent(objMinLength)); - validator.validate(new EndBasketEvent()); - validator.validate(new EndTransferEvent()); - // Asserts - assertTrue(logger.getErrs().size()==0); - } - - // Die groesste Numnern Angabe wird getestet. - @Test - public void numericIntTypeMaxOk(){ - Iom_jObject objMaxLength=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); - objMaxLength.setattrvalue("numericInt", "10"); - 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("Datatypes23.Topic","b1")); - validator.validate(new ObjectEvent(objMaxLength)); - validator.validate(new EndBasketEvent()); - validator.validate(new EndTransferEvent()); - // Asserts - assertTrue(logger.getErrs().size()==0); - } - - // Die kleinste Dezimale Angabe wird getestet. - @Test - public void numericDecTypeMinOk(){ - Iom_jObject objMaxLength=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); - objMaxLength.setattrvalue("numericDec", "0.0"); - 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("Datatypes23.Topic","b1")); - validator.validate(new ObjectEvent(objMaxLength)); - validator.validate(new EndBasketEvent()); - validator.validate(new EndTransferEvent()); - // Asserts - assertTrue(logger.getErrs().size()==0); - } - - // Die groesste Dezimale Zahl wird getestet. - @Test - public void numericDecTypeMaxOk(){ - Iom_jObject objMaxLength=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); - objMaxLength.setattrvalue("numericDec", "10.0"); - 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("Datatypes23.Topic","b1")); - validator.validate(new ObjectEvent(objMaxLength)); - validator.validate(new EndBasketEvent()); - validator.validate(new EndTransferEvent()); - // Asserts - assertTrue(logger.getErrs().size()==0); - } // Das kleinste Element einer Aufzaehlung wird getestet. @Test @@ -1208,6 +1132,9 @@ public void coordType3DOk(){ ///////////////////////////////// FAILING Tests ////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// + + + // Es wird getestet, ob true auch gross geschrieben werden kann. @Test public void booleanUppercaseFail(){ @@ -1930,126 +1857,6 @@ public void dateTimeFormatWithoutTFail() { assertTrue(logger.getErrs().size()==1); assertEquals("invalid format of datetime value <2016-2-29V12:59:59.999>", logger.getErrs().get(0).getEventMsg()); } - - // Falsches Format bei NumericType unzulaessig. - @Test - public void numericTypeWrongFormatFail(){ - Iom_jObject objWrongFormat=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); - objWrongFormat.setattrvalue("numericInt", "a"); - 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("Datatypes23.Topic","b1")); - validator.validate(new ObjectEvent(objWrongFormat)); - validator.validate(new EndBasketEvent()); - validator.validate(new EndTransferEvent()); - // Asserts - assertTrue(logger.getErrs().size()==1); - assertEquals("value is not a number", logger.getErrs().get(0).getEventMsg()); - } - - // Numeric Laenge zu klein. 0-10. Kann nicht minus sein. - @Test - public void numericTypeMinWrongFail(){ - Iom_jObject objWrongFormat=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); - objWrongFormat.setattrvalue("numericInt", "-1"); - 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("Datatypes23.Topic","b1")); - validator.validate(new ObjectEvent(objWrongFormat)); - validator.validate(new EndBasketEvent()); - validator.validate(new EndTransferEvent()); - // Asserts - assertTrue(logger.getErrs().size()==1); - assertEquals("value -1 is out of range", logger.getErrs().get(0).getEventMsg()); - } - - // Numeric Laenge zu gross. 0-10. Kann nicht 11 sein. - @Test - public void numericTypeMaxWrongFail(){ - Iom_jObject objWrongFormat=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); - objWrongFormat.setattrvalue("numericInt", "11"); - 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("Datatypes23.Topic","b1")); - validator.validate(new ObjectEvent(objWrongFormat)); - validator.validate(new EndBasketEvent()); - validator.validate(new EndTransferEvent()); - // Asserts - assertTrue(logger.getErrs().size()==1); - assertEquals("value 11 is out of range", logger.getErrs().get(0).getEventMsg()); - } - - // Es muss eine Zahl eingegeben werden bei einer Numeric Dezimalen. - @Test - public void numericTypeDecWrongFormatFail(){ - Iom_jObject objWrongFormat=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); - objWrongFormat.setattrvalue("numericDec", "a"); - 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("Datatypes23.Topic","b1")); - validator.validate(new ObjectEvent(objWrongFormat)); - validator.validate(new EndBasketEvent()); - validator.validate(new EndTransferEvent()); - // Asserts - assertTrue(logger.getErrs().size()==1); - assertEquals("value is not a number", logger.getErrs().get(0).getEventMsg()); - } - - // Dezimales Minimum unterschritten. - @Test - public void numericTypeDecMinWrongFail(){ - Iom_jObject objWrongFormat=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); - objWrongFormat.setattrvalue("numericDec", "-1"); - 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("Datatypes23.Topic","b1")); - validator.validate(new ObjectEvent(objWrongFormat)); - validator.validate(new EndBasketEvent()); - validator.validate(new EndTransferEvent()); - // Asserts - assertTrue(logger.getErrs().size()==1); - assertEquals("value -1 is out of range", logger.getErrs().get(0).getEventMsg()); - } - - // Dezimales Maximum ueberschritten. - @Test - public void numericTypeDecMaxWrongFail(){ - Iom_jObject objWrongFormat=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); - objWrongFormat.setattrvalue("numericDec", "11"); - 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("Datatypes23.Topic","b1")); - validator.validate(new ObjectEvent(objWrongFormat)); - validator.validate(new EndBasketEvent()); - validator.validate(new EndTransferEvent()); - // Asserts - assertTrue(logger.getErrs().size()==1); - assertEquals("value 11 is out of range", logger.getErrs().get(0).getEventMsg()); - } // Es wird die Eingabe einer ungueltigen Sub Value getestet. @Test @@ -2210,7 +2017,7 @@ public void textTypeUriLengthToHighFail(){ assertTrue(logger.getErrs().size()==1); assertEquals("Attribute uritext is length restricted to 1023", logger.getErrs().get(0).getEventMsg()); } - + @Test public void coordType2DRangeFail(){ Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); @@ -2295,4 +2102,69 @@ public void booleanTestConfigONFail(){ assertTrue(logger.getErrs().size()==1); assertEquals("value is not a BOOLEAN", logger.getErrs().get(0).getEventMsg()); } + + // eine Fehlermeldung wird erwartet, da 9(4) auf 90 abgerundet werden soll, + // und somit der gueltige Bereich unterschritten wird. + @Test + public void coordType_Rounding_Down_Fail(){ + Iom_jObject objWrongFormat=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + IomObject coordValue=objWrongFormat.addattrobj("lcoord", "COORD"); + coordValue.setattrvalue("C1", "479999.9994"); + coordValue.setattrvalue("C2", "70000.000"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objWrongFormat)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value 479999.999 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob 9(5) erfolgreich auf 100 aufgerundet wird. + @Test + public void coordType_Rounding_UpFrom5_Ok(){ + Iom_jObject objWrongFormat=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + IomObject coordValue=objWrongFormat.addattrobj("lcoord", "COORD"); + coordValue.setattrvalue("C1", "479999.9995"); + coordValue.setattrvalue("C2", "70000.000"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objWrongFormat)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // prueft, ob 9(6) erfolgreich auf 100 aufgerundet wird. + @Test + public void coordType_Rounding_Up_Ok(){ + Iom_jObject objWrongFormat=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + IomObject coordValue=objWrongFormat.addattrobj("lcoord", "COORD"); + coordValue.setattrvalue("C1", "479999.9996"); + coordValue.setattrvalue("C2", "70000.000"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objWrongFormat)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } } \ No newline at end of file diff --git a/src/test/java/ch/interlis/iox_j/validator/Numeric23Test.java b/src/test/java/ch/interlis/iox_j/validator/Numeric23Test.java new file mode 100644 index 00000000..a5d4a08b --- /dev/null +++ b/src/test/java/ch/interlis/iox_j/validator/Numeric23Test.java @@ -0,0 +1,668 @@ +package ch.interlis.iox_j.validator; + +import static org.junit.Assert.*; +import org.junit.Before; +import org.junit.Test; +import ch.ehi.basics.settings.Settings; +import ch.interlis.ili2c.config.Configuration; +import ch.interlis.ili2c.config.FileEntry; +import ch.interlis.ili2c.config.FileEntryKind; +import ch.interlis.ili2c.metamodel.TransferDescription; +import ch.interlis.iom_j.Iom_jObject; +import ch.interlis.iox_j.EndBasketEvent; +import ch.interlis.iox_j.EndTransferEvent; +import ch.interlis.iox_j.ObjectEvent; +import ch.interlis.iox_j.StartBasketEvent; +import ch.interlis.iox_j.StartTransferEvent; +import ch.interlis.iox_j.logging.LogEventFactory; + +public class Numeric23Test { + + // ili names + private static final String NUMERICINT="numericInt"; + private static final String NUMERICINT2="numericInt2"; + private static final String NUMERICINT3="numericInt3"; + private static final String NUMERICDEC1="numericDec"; + private static final String NUMERICDEC2="numericDec2"; + private static final String NUMERICDEC3="numericDec3"; + + private TransferDescription td=null; + + @Before + public void setUp() throws Exception { + // ili-datei lesen + Configuration ili2cConfig=new Configuration(); + FileEntry fileEntry=new FileEntry("src/test/data/validator/Datatypes23.ili", FileEntryKind.ILIMODELFILE); + ili2cConfig.addFileEntry(fileEntry); + td=ch.interlis.ili2c.Ili2c.runCompiler(ili2cConfig); + assertNotNull(td); + } + + // Die kleinste Nummer wird getestet. + @Test + public void negative_Min_NoDecimalPlaces_Ok(){ + Iom_jObject objMinLength=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + objMinLength.setattrvalue(NUMERICINT, "-10"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objMinLength)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // Es wird eine Fehlermeldung erwartet, da der gueltige Bereich unterschritten wird. + @Test + public void negative_Min_NoDecimalPlaces_False(){ + Iom_jObject objMinLength=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + objMinLength.setattrvalue(NUMERICINT, "-11"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objMinLength)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value -11 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // Die groesste Numnern Angabe wird getestet. + @Test + public void positive_Max_NoDecimalPlaces_Ok(){ + Iom_jObject objMaxLength=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + objMaxLength.setattrvalue(NUMERICINT, "10"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objMaxLength)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // Es wird eine Fehlermeldung erwartet, da der gueltige Bereich ueberschritten wird. + @Test + public void positive_Max_NoDecimalPlaces_False(){ + Iom_jObject objMinLength=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + objMinLength.setattrvalue(NUMERICINT, "11"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objMinLength)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value 11 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // Die kleinste Dezimale Angabe wird getestet. + @Test + public void negative_Min_WithDecimalPlaces_Ok(){ + Iom_jObject objMaxLength=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + objMaxLength.setattrvalue(NUMERICDEC1, "-10.0"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objMaxLength)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // Es wird eine Fehlermeldung erwartet, da der gueltige Bereich unterschritten wird. + @Test + public void negative_Min_WithDecimalPlaces_False(){ + Iom_jObject objMaxLength=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + objMaxLength.setattrvalue(NUMERICDEC1, "-10.1"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objMaxLength)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value -10.1 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // Die groesste Dezimale Zahl wird getestet. + @Test + public void positive_Max_WithDecimalPlaces_Ok(){ + Iom_jObject objMaxLength=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + objMaxLength.setattrvalue(NUMERICDEC1, "10.0"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objMaxLength)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // Es wird eine Fehlermeldung erwartet, da der gueltige Bereich ueberschritten wird. + @Test + public void positive_Max_WithDecimalPlaces_False(){ + Iom_jObject objMaxLength=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + objMaxLength.setattrvalue(NUMERICDEC1, "10.1"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objMaxLength)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value 10.1 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // Es wird eine Fehlermeldung erwartet, da der eingegebene Wert nicht dem Format entspricht. + @Test + public void numericTypeWrongFormatFail(){ + Iom_jObject objWrongFormat=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + objWrongFormat.setattrvalue(NUMERICINT, "a"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objWrongFormat)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value is not a number", logger.getErrs().get(0).getEventMsg()); + } + + // Es wird eine Fehlermeldung erwartet, da der eingegebene Wert nicht dem Format entspricht. + @Test + public void format_Wrong_Fail(){ + Iom_jObject objWrongFormat=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + objWrongFormat.setattrvalue(NUMERICDEC1, "a"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(objWrongFormat)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value is not a number", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob 0.0(6) erfolgreich auf 0.1 aufrundet + // und das Resultat erfolgreich in der precision:1 zurueckgegeben wird. + @Test + public void positive_Round_Over2DecimalPlaces_Up_Fail(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICDEC1, "10.06"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value 10.1 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob 4(5) erfolgreich auf 50 aufrundet + // und das Resultat erfolgreich in der precision:1 zurueckgegeben wird. + @Test + public void positive_Round_Over2DecimalPlaces_UpFrom5_Fail(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICDEC1, "10.05"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value 10.1 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob 4(4) erfolgreich auf 40 abrundet + // und das Resultat erfolgreich in der precision:1 zurueckgegeben wird. + @Test + public void positive_Round_Over2DecimalPlaces_Down_Ok(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICDEC1, "10.04"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // prueft, ob die erste Zahl: 1, erfolgreich durch das Runden der Zahlen: 9, zu 2 aufgerundet wird + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void positive_Round_SerevalDecimalPlaces_Up_Fail(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICINT3, "199999.99999"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value 200000 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob die erste Zahl: (minus) -1, erfolgreich durch das Runden der Zahlen: 9, zu (minus) -2 abgerundet wird + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void negative_Round_SerevalDecimalPlaces_Down_Fail(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICINT3, "-199999.99999"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value -200000 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob die Zahl erfolgreich durch das Aufrunden der Zahlen: 9, den Amount um 1 Zahl erweitert + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void positive_Round_ResultProduceOnePlaceMore_Up_Fail(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICINT2, "9.99999"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value 10 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob die (minus) Zahl erfolgreich durch das Abrunden der Zahlen: 9, den Amount um 1 Zahl erweitert + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void negative_Round_ResultProduceOnePlaceMore_Down_Fail(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICINT2, "-9.99999"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value -10 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob 0.6 erfolgreich auf 1.0 aufrundet + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void positive_Round_NoDecimalPlaces_Up_Fail(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICINT, "10.6"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value 11 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob 0.4 erfolgreich auf 0.0 abrundet + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void positive_Round_NoDecimalPlaces_Down_Ok(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICINT, "10.4"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // prueft, ob 0.5 erfolgreich auf 1.0 aufrundet + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void positive_Round_NoDecimalPlaces_UpFrom5_Fail(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICINT, "10.5"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value 11 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob 0.0016 erfolgreich auf 0.002 aufrundet + // und das Resultat erfolgreich in der precision:3 zurueckgegeben wird. + @Test + public void positive_Round_WithDecimalPlaces_Up_Fail(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICDEC2, "0.0016"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value 0.002 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob 0.0014 erfolgreich auf 0.001 abrundet + // und das Resultat erfolgreich in der precision:3 zurueckgegeben wird. + @Test + public void positive_Round_WithDecimalPlaces_Down_Ok(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICDEC2, "0.0014"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // prueft, ob 0.0015 erfolgreich auf 0.002 aufrundet + // und das Resultat erfolgreich in der precision:3 zurueckgegeben wird. + @Test + public void positive_Round_WithDecimalPlaces_UpFrom5_Fail(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICDEC2, "0.0015"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value 0.002 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob (minus) -0.6 erfolgreich auf (minus) -1.0 abrundet + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void negative_Round_NoDecimalPlaces_Down_Fail(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICINT, "-10.6"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value -11 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob (minus) -0.4 erfolgreich auf (minus) -0.0 aufrundet + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void negative_Round_NoDecimalPlaces_Up_Ok(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICINT, "-10.4"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // prueft, ob (minus) -0.5 erfolgreich auf (minus) -0.0 aufrundet + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void negative_Round_NoDecimalPlaces_UpFrom5_Ok(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICINT, "-10.5"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // prueft, ob (minus) -0.0016 erfolgreich auf (minus) -0.002 abrundet + // und das Resultat erfolgreich in der precision:3 zurueckgegeben wird. + @Test + public void negative_Round_WithDecimalPlaces_Down_Fail(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICDEC2, "-0.0016"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==1); + assertEquals("value -0.002 is out of range", logger.getErrs().get(0).getEventMsg()); + } + + // prueft, ob (minus) -0.0014 erfolgreich auf (minus) -0.001 aufrundet + // und das Resultat erfolgreich in der precision:3 zurueckgegeben wird. + @Test + public void negative_Round_WithDecimalPlaces_Up_Ok(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICDEC2, "-0.0014"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // prueft, ob (minus) -0.0015 erfolgreich auf (minus) -0.001 aufrundet + // und das Resultat erfolgreich in der precision:3 zurueckgegeben wird. + @Test + public void negative_Round_WithDecimalPlaces_UpFrom5_Ok(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICDEC2, "-0.0015"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // prueft, ob 0.999999999994 erfolgreich nicht gerundet wird. + // und das Resultat erfolgreich in der precision:12 zurueckgegeben wird. + @Test + public void positive_Round_WithSerevalDecimalPlaces_NotRounded_Ok(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICDEC3, "1.999999999999"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } + + // prueft, ob (minus) -0.999999999996 erfolgreich nicht gerundet wird. + // und das Resultat erfolgreich in der precision:12 zurueckgegeben wird. + @Test + public void negative_Round_WithSerevalDecimalPlaces_NotRounded_Ok(){ + Iom_jObject obj1=new Iom_jObject("Datatypes23.Topic.ClassA", "o1"); + obj1.setattrvalue(NUMERICDEC3, "-1.999999999999"); + 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("Datatypes23.Topic","b1")); + validator.validate(new ObjectEvent(obj1)); + validator.validate(new EndBasketEvent()); + validator.validate(new EndTransferEvent()); + // Asserts + assertTrue(logger.getErrs().size()==0); + } +} \ No newline at end of file diff --git a/src/test/java/ch/interlis/iox_j/validator/RoundNumeric23Test.java b/src/test/java/ch/interlis/iox_j/validator/RoundNumeric23Test.java new file mode 100644 index 00000000..7b48d20d --- /dev/null +++ b/src/test/java/ch/interlis/iox_j/validator/RoundNumeric23Test.java @@ -0,0 +1,175 @@ +package ch.interlis.iox_j.validator; + +import static org.junit.Assert.*; +import java.math.BigDecimal; +import org.junit.Test; + +public class RoundNumeric23Test { + // prueft, ob 4(6) erfolgreich auf 50 aufrundet + // und das Resultat erfolgreich in der precision:1 zurueckgegeben wird. + @Test + public void positive_RoundOver2DecimalPlaces_Up(){ + BigDecimal result=Validator.roundNumeric(1, "100000.46"); + assertEquals("100000.5", result.toString()); + } + + // prueft, ob 4(5) erfolgreich auf 50 aufrundet + // und das Resultat erfolgreich in der precision:1 zurueckgegeben wird. + @Test + public void positive_RoundOver2DecimalPlaces_UpFrom5(){ + BigDecimal result=Validator.roundNumeric(1, "100000.45"); + assertEquals("100000.5", result.toString()); + } + + // prueft, ob 4(4) erfolgreich auf 40 abrundet + // und das Resultat erfolgreich in der precision:1 zurueckgegeben wird. + @Test + public void positive_RoundOver2DecimalPlaces_Down(){ + BigDecimal result=Validator.roundNumeric(1, "100000.44"); + assertEquals("100000.4", result.toString()); + } + + // prueft, ob die erste Zahl: 1, erfolgreich durch das Runden der Zahlen: 9, zu 2 aufgerundet wird + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void positive_RoundSerevalDecimalPlaces_Up(){ + BigDecimal result=Validator.roundNumeric(0, "199999.99999"); + assertEquals("200000", result.toString()); + } + + // prueft, ob die erste Zahl: (minus) -1, erfolgreich durch das Runden der Zahlen: 9, zu (minus) -2 abgerundet wird + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void negative_RoundSerevalDecimalPlaces_Down(){ + BigDecimal result=Validator.roundNumeric(0, "-199999.99999"); + assertEquals("-200000", result.toString()); + } + + // prueft, ob die Zahl erfolgreich durch das Aufrunden der Zahlen: 9, den Amount um 1 Zahl erweitert + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void positive_ResultProduceOnePlaceMore_Up(){ + BigDecimal result=Validator.roundNumeric(0, "999999.99999"); + assertEquals("1000000", result.toString()); + } + + // prueft, ob die (minus) Zahl erfolgreich durch das Abrunden der Zahlen: 9, den Amount um 1 Zahl erweitert + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void negative_ResultProduceOnePlaceMore_Down(){ + BigDecimal result=Validator.roundNumeric(0, "-999999.99999"); + assertEquals("-1000000", result.toString()); + } + + // prueft, ob 0.6 erfolgreich auf 1.0 aufrundet + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void positive_NoDecimalPlaces_Up(){ + BigDecimal result=Validator.roundNumeric(0, "100000.6"); + assertEquals("100001", result.toString()); + } + + // prueft, ob 0.4 erfolgreich auf 0.0 abrundet + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void positive_NoDecimalPlaces_Down(){ + BigDecimal result=Validator.roundNumeric(0, "100000.4"); + assertEquals("100000", result.toString()); + } + + // prueft, ob 0.5 erfolgreich auf 1.0 aufrundet + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void positive_NoDecimalPlaces_UpFrom5(){ + BigDecimal result=Validator.roundNumeric(0, "100000.5"); + assertEquals("100001", result.toString()); + } + + // prueft, ob 0.0016 erfolgreich auf 0.002 aufrundet + // und das Resultat erfolgreich in der precision:3 zurueckgegeben wird. + @Test + public void positive_WithDecimalPlaces_Up(){ + BigDecimal result=Validator.roundNumeric(3, "100000.0016"); + assertEquals("100000.002", result.toString()); + } + + // prueft, ob 0.0014 erfolgreich auf 0.001 abrundet + // und das Resultat erfolgreich in der precision:3 zurueckgegeben wird. + @Test + public void positive_WithDecimalPlaces_Down(){ + BigDecimal result=Validator.roundNumeric(3, "100000.0014"); + assertEquals("100000.001", result.toString()); + } + + // prueft, ob 0.0015 erfolgreich auf 0.002 aufrundet + // und das Resultat erfolgreich in der precision:3 zurueckgegeben wird. + @Test + public void positive_WithDecimalPlaces_UpFrom5(){ + BigDecimal result=Validator.roundNumeric(3, "100000.0015"); + assertEquals("100000.002", result.toString()); + } + + // prueft, ob (minus) -0.6 erfolgreich auf (minus) -1.0 abrundet + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void negative_NoDecimalPlaces_Down(){ + BigDecimal result=Validator.roundNumeric(0, "-100000.6"); + assertEquals("-100001", result.toString()); + } + + // prueft, ob (minus) -0.4 erfolgreich auf (minus) -0.0 aufrundet + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void negative_NoDecimalPlaces_Up(){ + BigDecimal result=Validator.roundNumeric(0, "-100000.4"); + assertEquals("-100000", result.toString()); + } + + // prueft, ob (minus) -0.5 erfolgreich auf (minus) -0.0 aufrundet + // und das Resultat erfolgreich in der precision:0 zurueckgegeben wird. + @Test + public void negative_NoDecimalPlaces_UpFrom5(){ + BigDecimal result=Validator.roundNumeric(0, "-100000.5"); + assertEquals("-100000", result.toString()); + } + + // prueft, ob (minus) -0.0016 erfolgreich auf (minus) -0.002 abrundet + // und das Resultat erfolgreich in der precision:3 zurueckgegeben wird. + @Test + public void negative_WithDecimalPlaces_Down(){ + BigDecimal result=Validator.roundNumeric(3, "-100000.0016"); + assertEquals("-100000.002", result.toString()); + } + + // prueft, ob (minus) -0.0014 erfolgreich auf (minus) -0.001 aufrundet + // und das Resultat erfolgreich in der precision:3 zurueckgegeben wird. + @Test + public void negative_WithDecimalPlaces_Up(){ + BigDecimal result=Validator.roundNumeric(3, "-100000.0014"); + assertEquals("-100000.001", result.toString()); + } + + // prueft, ob (minus) -0.0015 erfolgreich auf (minus) -0.001 aufrundet + // und das Resultat erfolgreich in der precision:3 zurueckgegeben wird. + @Test + public void negative_WithDecimalPlaces_UpFrom5(){ + BigDecimal result=Validator.roundNumeric(3, "-100000.0015"); + assertEquals("-100000.001", result.toString()); + } + + // prueft, ob 0.999999999994 erfolgreich nicht gerundet wird. + // und das Resultat erfolgreich in der precision:12 zurueckgegeben wird. + @Test + public void positive_WithSerevalDecimalPlaces_NotRounded(){ + BigDecimal result=Validator.roundNumeric(12, "0.999999999994"); + assertEquals("0.999999999994", result.toString()); + } + + // prueft, ob (minus) -0.999999999996 erfolgreich nicht gerundet wird. + // und das Resultat erfolgreich in der precision:12 zurueckgegeben wird. + @Test + public void negative_WithSerevalDecimalPlaces_NotRounded(){ + BigDecimal result=Validator.roundNumeric(12, "-0.999999999996"); + assertEquals("-0.999999999996", result.toString()); + } +} \ No newline at end of file