/** * Marshalls the given value into FEEL code that can be executed to * reconstruct the value. For instance, here are some examples of the marshalling process: * * * number 10 marshalls as: 10 * * string foo marshalls as: "foo" * * duration P1D marshalls as: duration( "P1D" ) * * context { x : 10, y : foo } marshalls as: { x : 10, y : "foo" } * * @param value the FEEL value to be marshalled * * @return a string representing the FEEL code that needs to be executed to reconstruct the value */ @Override public String marshall(Object value) { if( value == null ) { return "null"; } return KieExtendedDMNFunctions.getFunction(CodeFunction.class).invoke(value).cata(justNull(), Function.identity()); }
@Before public void setUp() { codeFunction = new CodeFunction(); }
@Test public void invokeDurationMinutes() { FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofMinutes(9)), "duration( \"PT9M\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofMinutes(200)), "duration( \"PT3H20M\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofMinutes(5000)), "duration( \"P3DT11H20M\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofMinutes(-5000)), "duration( \"-P3DT11H20M\" )"); }
@Test public void invokeDurationSeconds() { FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofSeconds(9)), "duration( \"PT9S\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofSeconds(200)), "duration( \"PT3M20S\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofSeconds(5000)), "duration( \"PT1H23M20S\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofSeconds(90061)), "duration( \"P1DT1H1M1S\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofSeconds(-90061)), "duration( \"-P1DT1H1M1S\" )"); }
@Test public void invokeListNonEmpty() { final List<Object> values = new ArrayList<>(); values.add(1); values.add(BigDecimal.valueOf(10.5)); values.add("test"); FunctionTestUtil.assertResult(codeFunction.invoke(values), "[ 1, 10.5, \"test\" ]"); }
@Test public void invokeContextNonEmpty() { final Map<String, Object> childContextMap = new HashMap<>(); childContextMap.put("childKey1", "childValue1"); final Map<String, Object> contextMap = new HashMap<>(); contextMap.put("key1", "value1"); contextMap.put("key2", childContextMap); FunctionTestUtil.assertResult(codeFunction.invoke(contextMap), "{ key1 : \"value1\", key2 : { childKey1 : \"childValue1\" } }"); } }
@Test public void invokeDurationNanosMillis() { FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofNanos(25)), "duration( \"PT0.000000025S\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofNanos(10000)), "duration( \"PT0.00001S\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofNanos(10025)), "duration( \"PT0.000010025S\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofMillis(1500)), "duration( \"PT1.5S\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofMillis(90061025)), "duration( \"P1DT1H1M1.025S\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ofMillis(-90061025)), "duration( \"-P1DT1H1M1.025S\" )"); }
@Test public void invokeZonedDateTime() { final ZonedDateTime zonedDateTime = ZonedDateTime.now(); FunctionTestUtil.assertResult(codeFunction.invoke(zonedDateTime), "date and time( \"" + DateAndTimeFunction.REGION_DATETIME_FORMATTER.format(zonedDateTime) + "\" )"); }
@Test public void invokeLocalDateTime() { final LocalDateTime localDateTime = LocalDateTime.now(); FunctionTestUtil.assertResult(codeFunction.invoke(localDateTime), "date and time( \"" + DateAndTimeFunction.FEEL_DATE_TIME.format(localDateTime) + "\" )"); }
@Test public void invokeContextEmpty() { FunctionTestUtil.assertResult(codeFunction.invoke(new HashMap<>()), "{ }"); }
@Test public void invokeBigDecimal() { FunctionTestUtil.assertResult(codeFunction.invoke(BigDecimal.valueOf(10.7)), "10.7"); }
@Test public void invokeListEmpty() { FunctionTestUtil.assertResult(codeFunction.invoke(Collections.emptyList()), "[ ]"); }
@Test public void invokeNull() { FunctionTestUtil.assertResult(codeFunction.invoke(null), "null"); }
@Test public void invokeDurationZero() { FunctionTestUtil.assertResult(codeFunction.invoke(Duration.ZERO), "duration( \"PT0S\" )"); }
@Test public void invokeString() { FunctionTestUtil.assertResult(codeFunction.invoke("test"), "\"test\""); }
@Test public void invokePeriodZero() { FunctionTestUtil.assertResult(codeFunction.invoke(Period.ZERO), "duration( \"P0M\" )"); }
@Test public void invokeLocalDate() { final LocalDate localDate = LocalDate.now(); FunctionTestUtil.assertResult(codeFunction.invoke(localDate), "date( \"" + localDate.toString() + "\" )"); }
@Test public void invokeOffsetTime() { final OffsetTime offsetTime = OffsetTime.now(); FunctionTestUtil.assertResult(codeFunction.invoke(offsetTime), "time( \"" + TimeFunction.FEEL_TIME.format(offsetTime) + "\" )"); }
@Test public void invokePeriodMonths() { FunctionTestUtil.assertResult(codeFunction.invoke(Period.ofMonths(2)), "duration( \"P2M\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Period.ofMonths(27)), "duration( \"P2Y3M\" )"); FunctionTestUtil.assertResult(codeFunction.invoke(Period.ofMonths(-27)), "duration( \"-P2Y3M\" )"); }
@Test public void invokeOffsetDateTime() { final OffsetDateTime offsetDateTime = OffsetDateTime.now(); FunctionTestUtil.assertResult(codeFunction.invoke(offsetDateTime), "date and time( \"" + DateAndTimeFunction.FEEL_DATE_TIME.format(offsetDateTime) + "\" )"); }