|
32 | 32 | import org.junit.jupiter.params.ParameterizedTest; |
33 | 33 | import org.junit.jupiter.params.provider.ValueSource; |
34 | 34 |
|
| 35 | +import com.fasterxml.jackson.databind.node.ArrayNode; |
35 | 36 | import com.fasterxml.jackson.databind.node.ObjectNode; |
36 | 37 |
|
37 | 38 | /** |
@@ -275,6 +276,66 @@ public void testInvokeIntegerMethodWithNullParameter() { |
275 | 276 | assertThat(value).isNull(); |
276 | 277 | } |
277 | 278 |
|
| 279 | + @Test |
| 280 | + @Deployment(resources = "org/flowable/engine/test/api/runtime/oneTaskProcess.bpmn20.xml") |
| 281 | + public void testInvokeOnArrayNode() { |
| 282 | + Map<String, Object> vars = new HashMap<>(); |
| 283 | + ArrayNode arrayNode = processEngineConfiguration.getObjectMapper().createArrayNode(); |
| 284 | + arrayNode.add("firstValue"); |
| 285 | + arrayNode.add("secondValue"); |
| 286 | + arrayNode.add(42); |
| 287 | + |
| 288 | + vars.put("array", arrayNode); |
| 289 | + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", vars); |
| 290 | + |
| 291 | + assertThat(getExpressionValue("${array.get(0).isTextual()}", processInstance)).isEqualTo(true); |
| 292 | + assertThat(getExpressionValue("${array.get(0).textValue()}", processInstance)).isEqualTo("firstValue"); |
| 293 | + assertThat(getExpressionValue("${array.get(0).isNumber()}", processInstance)).isEqualTo(false); |
| 294 | + |
| 295 | + assertThat(getExpressionValue("${array.get(2).isNumber()}", processInstance)).isEqualTo(true); |
| 296 | + assertThat(getExpressionValue("${array.get(2).asInt()}", processInstance)).isEqualTo(42); |
| 297 | + assertThat(getExpressionValue("${array.get(2).asLong()}", processInstance)).isEqualTo(42L); |
| 298 | + |
| 299 | + assertThat(getExpressionValue("${array.get(1).textValue()}", processInstance)).isEqualTo("secondValue"); |
| 300 | + assertThat(getExpressionValue("${array.get(1).asLong(123)}", processInstance)).isEqualTo(123L); |
| 301 | + |
| 302 | + assertThat(getExpressionValue("${array.get(3)}", processInstance)).isNull(); |
| 303 | + assertThat(getExpressionValue("${array.path(3).isMissingNode()}", processInstance)).isEqualTo(true); |
| 304 | + } |
| 305 | + |
| 306 | + @Test |
| 307 | + @Deployment(resources = "org/flowable/engine/test/api/runtime/oneTaskProcess.bpmn20.xml") |
| 308 | + public void testInvokeOnObjectNode() { |
| 309 | + Map<String, Object> vars = new HashMap<>(); |
| 310 | + ObjectNode objectNode = processEngineConfiguration.getObjectMapper().createObjectNode(); |
| 311 | + objectNode.put("firstAttribute", "foo"); |
| 312 | + objectNode.put("secondAttribute", "bar"); |
| 313 | + objectNode.put("thirdAttribute", 42); |
| 314 | + |
| 315 | + vars.put("object", objectNode); |
| 316 | + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", vars); |
| 317 | + |
| 318 | + assertThat(getExpressionValue("${object.get(\"firstAttribute\").isTextual()}", processInstance)).isEqualTo(true); |
| 319 | + assertThat(getExpressionValue("${object.get(\"firstAttribute\").textValue()}", processInstance)).isEqualTo("foo"); |
| 320 | + assertThat(getExpressionValue("${object.get(\"firstAttribute\").isNumber()}", processInstance)).isEqualTo(false); |
| 321 | + |
| 322 | + assertThat(getExpressionValue("${object.get(\"thirdAttribute\").isNumber()}", processInstance)).isEqualTo(true); |
| 323 | + assertThat(getExpressionValue("${object.get(\"thirdAttribute\").asInt()}", processInstance)).isEqualTo(42); |
| 324 | + assertThat(getExpressionValue("${object.get(\"thirdAttribute\").asLong()}", processInstance)).isEqualTo(42L); |
| 325 | + |
| 326 | + assertThat(getExpressionValue("${object.get(\"secondAttribute\").textValue()}", processInstance)).isEqualTo("bar"); |
| 327 | + assertThat(getExpressionValue("${object.get(\"secondAttribute\").asLong(123)}", processInstance)).isEqualTo(123L); |
| 328 | + |
| 329 | + assertThat(getExpressionValue("${object.get(\"dummyAttribute\")}", processInstance)).isNull(); |
| 330 | + assertThat(getExpressionValue("${object.path(\"dummyAttribute\").isMissingNode()}", processInstance)).isEqualTo(true); |
| 331 | + } |
| 332 | + |
| 333 | + private Object getExpressionValue(String expressionStr, ProcessInstance processInstance) { |
| 334 | + Expression expression = this.processEngineConfiguration.getExpressionManager().createExpression(expressionStr); |
| 335 | + return managementService.executeCommand(commandContext -> |
| 336 | + expression.getValue((ExecutionEntity) runtimeService.createProcessInstanceQuery().processInstanceId(processInstance.getId()).includeProcessVariables().singleResult())); |
| 337 | + } |
| 338 | + |
278 | 339 | @ParameterizedTest |
279 | 340 | @Deployment(resources = "org/flowable/engine/test/api/runtime/oneTaskProcess.bpmn20.xml") |
280 | 341 | @ValueSource(strings = { "", "flowable" }) |
|
0 commit comments