From 0cca0bcb3ac6301463fa62fb87daad81aaca4ea2 Mon Sep 17 00:00:00 2001 From: Philipp Ossler Date: Fri, 17 Jan 2025 14:55:10 +0100 Subject: [PATCH 1/3] test: Verify normalized string format of duration Add test cases to verify that a duration returns a normalized value. (cherry picked from commit bb287f08a2eb7fddc74744e82dcb2a644f7c86e7) --- .../api/StringRepresentationTypeTest.scala | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/test/scala/org/camunda/feel/api/StringRepresentationTypeTest.scala b/src/test/scala/org/camunda/feel/api/StringRepresentationTypeTest.scala index 1b259e3f2..59754158c 100644 --- a/src/test/scala/org/camunda/feel/api/StringRepresentationTypeTest.scala +++ b/src/test/scala/org/camunda/feel/api/StringRepresentationTypeTest.scala @@ -121,6 +121,14 @@ class StringRepresentationTypeTest extends AnyFlatSpec with Matchers { duration.toString should be("P2M") } + it should "return normalized format " in { + ValYearMonthDuration(Period.parse("P2Y")).toString should be("P2Y") + ValYearMonthDuration(Period.parse("P24M")).toString should be("P2Y") + + ValYearMonthDuration(Period.parse("P25M")).toString should be("P2Y1M") + ValYearMonthDuration(Period.parse("P35M")).toString should be("P2Y11M") + } + "A days-time-duration" should "return 'P1DT2H3M4S' " in { val duration = ValDayTimeDuration(Duration.parse("P1DT2H3M4S")) @@ -151,6 +159,17 @@ class StringRepresentationTypeTest extends AnyFlatSpec with Matchers { duration.toString should be("PT4S") } + it should "return normalized format " in { + ValDayTimeDuration(Duration.parse("P5D")).toString should be("P5D") + ValDayTimeDuration(Duration.parse("PT120H")).toString should be("P5D") + ValDayTimeDuration(Duration.parse("PT7200M")).toString should be("P5D") + ValDayTimeDuration(Duration.parse("PT432000S")).toString should be("P5D") + + ValDayTimeDuration(Duration.parse("PT121H")).toString should be("P5DT1H") + ValDayTimeDuration(Duration.parse("PT7201M")).toString should be("P5DT1M") + ValDayTimeDuration(Duration.parse("PT7261M")).toString should be("P5DT1H1M") + } + "A list" should "return '[1, 2]' " in { ValList(List(ValNumber(1), ValNumber(2))).toString should be("[1, 2]") } From 3b9082ac0c2159028af4354c107278a4bea9bb10 Mon Sep 17 00:00:00 2001 From: Philipp Ossler Date: Fri, 17 Jan 2025 14:58:50 +0100 Subject: [PATCH 2/3] fix: Return normalized years-months-durations A years-months-duration should return a normalized string format. Period.getYear returns the year-component but works only if the period is normalized. (cherry picked from commit d87a543465583bf828c7e4e05dfd0a43c40039b9) --- src/main/scala/org/camunda/feel/syntaxtree/Val.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/org/camunda/feel/syntaxtree/Val.scala b/src/main/scala/org/camunda/feel/syntaxtree/Val.scala index 0846d5f80..5c4618cf2 100644 --- a/src/main/scala/org/camunda/feel/syntaxtree/Val.scala +++ b/src/main/scala/org/camunda/feel/syntaxtree/Val.scala @@ -219,8 +219,8 @@ case class ValYearMonthDuration(value: YearMonthDuration) extends Val { object ValYearMonthDuration { def format(value: YearMonthDuration): String = { - val year = value.getYears - val month = value.getMonths % 12 + val year = value.toTotalMonths / 12 + val month = value.toTotalMonths % 12 if (year == 0 && month == 0) "P0Y" From fa3a724b2b125ac4e8def0cdccd683c602f1e811 Mon Sep 17 00:00:00 2001 From: Philipp Ossler Date: Tue, 21 Jan 2025 12:42:37 +0100 Subject: [PATCH 3/3] test: Verify normalized string format of duration Add another test case to verify that a years-months-duration returns a normalized value. (cherry picked from commit 8acb2036d7cace8f857e42968cca7924b4c1e480) --- .../org/camunda/feel/api/StringRepresentationTypeTest.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/scala/org/camunda/feel/api/StringRepresentationTypeTest.scala b/src/test/scala/org/camunda/feel/api/StringRepresentationTypeTest.scala index 59754158c..2a571e213 100644 --- a/src/test/scala/org/camunda/feel/api/StringRepresentationTypeTest.scala +++ b/src/test/scala/org/camunda/feel/api/StringRepresentationTypeTest.scala @@ -127,6 +127,8 @@ class StringRepresentationTypeTest extends AnyFlatSpec with Matchers { ValYearMonthDuration(Period.parse("P25M")).toString should be("P2Y1M") ValYearMonthDuration(Period.parse("P35M")).toString should be("P2Y11M") + + ValYearMonthDuration(Period.parse("P2Y13M")).toString should be("P3Y1M") } "A days-time-duration" should "return 'P1DT2H3M4S' " in {