List<FEELProfile> profiles = (List)((DMNRuntimeImpl) runtime).getProfiles(); FEEL feel = FEEL.newInstance(runtime.getRootClassLoader(), profiles);
@Test public void testDMNContextContainingListAndSublist() { // DROOLS-2713 DMN evaluation response containing list and sublist fail on server DMNContext ctx = new DMNContextImpl(); List<?> list = IntStream.range(1, 11).boxed().collect(Collectors.toList()); List<?> sublist = list.subList(1, 3); ctx.set("list", list); ctx.set("sublist", sublist); DMNResultImpl dmnResults = new DMNResultImpl(null); dmnResults.setContext(ctx); dmnResults.addDecisionResult(new DMNDecisionResultImpl("list", "list", DecisionEvaluationStatus.SUCCEEDED, list, Collections.emptyList())); dmnResults.addDecisionResult(new DMNDecisionResultImpl("sublist", "sublist", DecisionEvaluationStatus.SUCCEEDED, sublist, Collections.emptyList())); DMNResultKS results = new DMNResultKS(dmnResults); Assertions.assertThat(results.getContext().get("list")).isEqualTo(list); Assertions.assertThat(results.getContext().get("sublist")).isEqualTo(sublist); Assertions.assertThat(results.getDecisionResultByName("list").getResult()).isEqualTo(list); Assertions.assertThat(results.getDecisionResultByName("sublist").getResult()).isEqualTo(sublist); }
@Test public void execute() { RegistryContext registryContext = new ContextImpl(); GetDMNMessagesCommand getDMNMessagesCommand = new GetDMNMessagesCommand(); assertThatThrownBy(() -> getDMNMessagesCommand.execute(registryContext)) .isInstanceOf(IllegalStateException.class) .hasMessage("There is no DMNResult available"); DMNResultImpl dmnResult = new DMNResultImpl(null); dmnResult.setContext(new DMNContextImpl()); registryContext.register(DMNResult.class, dmnResult); List<DMNMessage> result = getDMNMessagesCommand.execute(registryContext); assertEquals(0, result.size()); } }
@Test public void testCycleDetectionSelfReference() { final Definitions defs = buildSimplifiedDefinitions("ns", "self"); final DecisionNodeImpl decision = buildSimplifiedDecisionNode(defs, "self"); decision.addDependency("self", decision); final DMNModelImpl model = new DMNModelImpl(defs); model.setDefinitions(defs); model.addDecision(decision); final DMNRuntime runtime = DMNRuntimeUtil.createRuntime(this.getClass()); final DMNResult result = runtime.evaluateAll(model, DMNFactory.newContext()); assertTrue(result.hasErrors()); }
@Test public void testCompositeItemDefinition() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("0008-LX-arithmetic.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel("https://github.com/kiegroup/kie-dmn", "0008-LX-arithmetic" ); assertThat( dmnModel, notNullValue() ); final ItemDefNode itemDef = dmnModel.getItemDefinitionByName("tLoan" ); assertThat( itemDef.getName(), is( "tLoan" ) ); assertThat( itemDef.getId(), is( "tLoan" ) ); final DMNType type = itemDef.getType(); assertThat( type, is( notNullValue() ) ); assertThat( type.getName(), is( "tLoan" ) ); assertThat( type.getId(), is( "tLoan" ) ); assertThat( type, is( instanceOf( CompositeTypeImpl.class ) ) ); final CompositeTypeImpl compType = (CompositeTypeImpl) type; assertThat( compType.getFields().size(), is( 3 ) ); final DMNType principal = compType.getFields().get("principal" ); assertThat( principal, is( notNullValue() ) ); assertThat( principal.getName(), is( "number" ) ); assertThat( ((SimpleTypeImpl)principal).getFeelType(), is( BuiltInType.NUMBER ) ); final DMNType rate = compType.getFields().get("rate" ); assertThat( rate, is( notNullValue() ) ); assertThat( rate.getName(), is( "number" ) ); assertThat( ((SimpleTypeImpl)rate).getFeelType(), is( BuiltInType.NUMBER ) ); final DMNType termMonths = compType.getFields().get("termMonths" ); assertThat( termMonths, is( notNullValue() ) ); assertThat( termMonths.getName(), is( "number" ) ); assertThat( ((SimpleTypeImpl)termMonths).getFeelType(), is( BuiltInType.NUMBER ) ); }
@Test public void execute() { RegistryContext registryContext = new ContextImpl(); ExecuteDMNCommand executeDMNCommand = new ExecuteDMNCommand(); assertThatThrownBy(() -> executeDMNCommand.execute(registryContext)) .isInstanceOf(IllegalStateException.class) .hasMessage("No DMN active model defined"); registryContext.register(DMNModel.class, new DMNModelImpl(null)); assertThatThrownBy(() -> executeDMNCommand.execute(registryContext)) .isInstanceOf(IllegalStateException.class) .hasMessage("No DMNRuntime available"); DMNContext dmnContext = DMNFactory.newContext(); dmnContext.set("example", 10); registryContext.register(DMNRuntime.class, new DMNRuntimeImpl(null)); registryContext.register(DMNContext.class, dmnContext); DMNResult result = executeDMNCommand.execute(registryContext); assertNotNull(result); DMNContext newDmnContext = registryContext.lookup(DMNContext.class); assertEquals(1, dmnContext.getAll().size()); assertEquals(0, newDmnContext.getAll().size()); } }
@Test public void testItemDefAllowedValuesString() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("0003-input-data-string-allowed-values.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel("https://github.com/kiegroup/kie-dmn", "0003-input-data-string-allowed-values" ); assertThat( dmnModel, notNullValue() ); final ItemDefNode itemDef = dmnModel.getItemDefinitionByName("tEmploymentStatus" ); assertThat( itemDef.getName(), is( "tEmploymentStatus" ) ); assertThat( itemDef.getId(), is( nullValue() ) ); final DMNType type = itemDef.getType(); assertThat( type, is( notNullValue() ) ); assertThat( type.getName(), is( "tEmploymentStatus" ) ); assertThat( type.getId(), is( nullValue() ) ); assertThat( type, is( instanceOf( SimpleTypeImpl.class ) ) ); final SimpleTypeImpl feelType = (SimpleTypeImpl) type; final EvaluationContext ctx = new EvaluationContextImpl(ClassLoaderUtil.findDefaultClassLoader(), null); assertThat( feelType.getFeelType(), is(instanceOf(AliasFEELType.class))); assertThat( feelType.getFeelType().getName(), is("tEmploymentStatus")); assertThat( feelType.getAllowedValuesFEEL().size(), is( 4 ) ); assertThat( feelType.getAllowedValuesFEEL().get( 0 ).apply( ctx, "UNEMPLOYED" ), is( true ) ); assertThat( feelType.getAllowedValuesFEEL().get( 1 ).apply( ctx, "EMPLOYED" ), is( true ) ); assertThat( feelType.getAllowedValuesFEEL().get( 2 ).apply( ctx, "SELF-EMPLOYED" ), is( true ) ); assertThat( feelType.getAllowedValuesFEEL().get( 3 ).apply( ctx, "STUDENT" ), is( true ) ); }
public static DMNRuntime typeSafeGetKieRuntime(final KieContainer kieContainer) { DMNRuntime dmnRuntime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); ((DMNRuntimeImpl) dmnRuntime).setOption(new RuntimeTypeCheckOption(true)); return dmnRuntime; }
@Test public void testImportChain() { // DROOLS-3045 DMN model API to display namespace transitive import dependencies final DMNRuntime runtime = DMNRuntimeUtil.createRuntimeWithAdditionalResources("Sayhello1ID1D.dmn", this.getClass(), "ModelB.dmn", "ModelB2.dmn", "ModelC.dmn"); final DMNModelImpl modelA = (DMNModelImpl) getAndAssertModelNoErrors(runtime, "http://www.trisotech.com/dmn/definitions/_ae5b3c17-1ac3-4e1d-b4f9-2cf861aec6d9", "Say hello 1ID1D"); assertThat(modelA.getImportChainAliases().entrySet(), hasSize(0)); final DMNModelImpl modelB = (DMNModelImpl) getAndAssertModelNoErrors(runtime, "http://www.trisotech.com/dmn/definitions/_2a1d771a-a899-4fef-abd6-fc894332337c", "Model B"); assertThat(modelB.getImportChainAliases().entrySet(), hasSize(1)); assertThat(modelB.getImportChainAliases(), hasEntry(is("http://www.trisotech.com/dmn/definitions/_ae5b3c17-1ac3-4e1d-b4f9-2cf861aec6d9"), contains(Collections.singletonList("modelA")))); final DMNModelImpl modelC = (DMNModelImpl) getAndAssertModelNoErrors(runtime, "http://www.trisotech.com/dmn/definitions/_10435dcd-8774-4575-a338-49dd554a0928", "Model C"); assertThat(modelC.getImportChainAliases().entrySet(), hasSize(3)); assertThat(modelC.getImportChainAliases(), hasEntry(is("http://www.trisotech.com/dmn/definitions/_2a1d771a-a899-4fef-abd6-fc894332337c"), contains(Collections.singletonList("Model B")))); assertThat(modelC.getImportChainAliases(), hasEntry(is("http://www.trisotech.com/definitions/_9d46ece4-a96c-4cb0-abc0-0ca121ac3768"), contains(Collections.singletonList("Model B2")))); assertThat(modelC.getImportChainAliases(), hasEntry(is("http://www.trisotech.com/dmn/definitions/_ae5b3c17-1ac3-4e1d-b4f9-2cf861aec6d9"), containsInAnyOrder(Arrays.asList("Model B2", "modelA"), Arrays.asList("Model B", "modelA")))); } }
@Test public void testAllowedValuesForASimpleTypeCollection() { // DROOLS-2357 final String testNS = "testDROOLS2357"; final FEEL feel = FEEL.newInstance(); final DMNType tDecision1 = typeRegistry.registerType(new SimpleTypeImpl(testNS, "tListOfVowels", null, true, feel.evaluateUnaryTests("\"a\",\"e\",\"i\",\"o\",\"u\""), FEEL_STRING, BuiltInType.STRING)); assertTrue(tDecision1.isAssignableValue("a")); assertTrue(tDecision1.isAssignableValue(Collections.singletonList("a"))); assertFalse(tDecision1.isAssignableValue("z")); assertTrue(tDecision1.isAssignableValue(Arrays.asList("a", "e"))); assertFalse(tDecision1.isAssignableValue(Arrays.asList("a", "e", "zzz"))); }
final DMNType dmnPerson = typeRegistry.registerType(new CompositeTypeImpl(testNS, "person", null, false, personPrototype, null, null)); final DMNType dmnPersonList = typeRegistry.registerType(new CompositeTypeImpl(testNS, "personList", null, true, null, dmnPerson, null)); final DMNType dmnListOfPersonsGrouped = typeRegistry.registerType(new CompositeTypeImpl(testNS, "groups", null, true, null, dmnPersonList, null)); final DMNType listOfGroups = typeRegistry.registerType(new CompositeTypeImpl(testNS, "listOfGroups", null, true, null, dmnListOfPersonsGrouped, null)); final List<Object> groupsContainingBobPartitionedBySize = Arrays.asList(the2ListsThatContainBob, Collections.singletonList(bobANDjohn));
@Test public void execute() { RegistryContext registryContext = new ContextImpl(); GetDMNDecisionResultsCommand getDMNDecisionResultsCommand = new GetDMNDecisionResultsCommand(); assertThatThrownBy(() -> getDMNDecisionResultsCommand.execute(registryContext)) .isInstanceOf(IllegalStateException.class) .hasMessage("There is no DMNResult available"); DMNResultImpl dmnResult = new DMNResultImpl(null); dmnResult.setContext(new DMNContextImpl()); registryContext.register(DMNResult.class, dmnResult); List<DMNDecisionResult> result = getDMNDecisionResultsCommand.execute(registryContext); assertEquals(0, result.size()); } }
@Test public void testSharedDependency() { final Definitions defs = buildSimplifiedDefinitions("ns", "a", "b", "c"); final DecisionNodeImpl a = buildSimplifiedDecisionNode(defs, "a"); final DecisionNodeImpl b = buildSimplifiedDecisionNode(defs, "b"); final DecisionNodeImpl c = buildSimplifiedDecisionNode(defs, "c"); a.addDependency("c", c); b.addDependency("c", c); final DMNModelImpl model = new DMNModelImpl(defs); model.setDefinitions(defs); model.addDecision(a); model.addDecision(b); model.addDecision(c); final DMNRuntime runtime = DMNRuntimeUtil.createRuntime(this.getClass()); final DMNResult result = runtime.evaluateAll(model, DMNFactory.newContext()); assertFalse(result.hasErrors()); }
@Test public void testAskTypeCheckInKModuleButOverrideRuntime() { final DMNRuntime runtime = getRuntimeWithTypeCheckOption("true", ks.getResources().newClassPathResource("forTypeCheckTest.dmn", this.getClass())); ((DMNRuntimeImpl) runtime).setOption(new RuntimeTypeCheckOption(false)); assertPerformTypeCheck(runtime); }
List<FEELProfile> profiles = (List)((DMNRuntimeImpl) runtime).getProfiles(); FEEL feel = FEEL.newInstance(runtime.getRootClassLoader(), profiles);
@Test public void execute() { RegistryContext registryContext = new ContextImpl(); GetAllDMNContextCommand getAllDMNContextCommand = new GetAllDMNContextCommand(); assertThatThrownBy(() -> getAllDMNContextCommand.execute(registryContext)) .isInstanceOf(IllegalStateException.class) .hasMessage("There is not DMNResult available"); DMNResultImpl dmnResult = new DMNResultImpl(null); dmnResult.setContext(new DMNContextImpl()); registryContext.register(DMNResult.class, dmnResult); Map<String, Object> result = getAllDMNContextCommand.execute(registryContext); assertEquals(0, result.size()); } }
@Test public void testCycleDetection() { final Definitions defs = buildSimplifiedDefinitions("ns", "a", "b"); final DecisionNodeImpl a = buildSimplifiedDecisionNode(defs, "a"); final DecisionNodeImpl b = buildSimplifiedDecisionNode(defs, "b"); a.addDependency("b", b); b.addDependency("a", b); final DMNModelImpl model = new DMNModelImpl(defs); model.setDefinitions(defs); model.addDecision(a); model.addDecision(b); final DMNRuntime runtime = DMNRuntimeUtil.createRuntime(this.getClass()); final DMNResult result = runtime.evaluateAll(model, DMNFactory.newContext()); assertTrue(result.hasErrors()); }
@Test public void testExplicitDisableTypeCheckInKModuleButOverrideRuntime() { final DMNRuntime runtime = getRuntimeWithTypeCheckOption("false", ks.getResources().newClassPathResource("forTypeCheckTest.dmn", this.getClass())); ((DMNRuntimeImpl) runtime).setOption(new RuntimeTypeCheckOption(true)); assertPerformTypeCheck(runtime); }
@Test public void testCycleDetectionDeadlyDiamond() { final Definitions defs = buildSimplifiedDefinitions("ns", "a", "b", "c", "d"); final DecisionNodeImpl a = buildSimplifiedDecisionNode(defs, "a"); final DecisionNodeImpl b = buildSimplifiedDecisionNode(defs, "b"); final DecisionNodeImpl c = buildSimplifiedDecisionNode(defs, "c"); final DecisionNodeImpl d = buildSimplifiedDecisionNode(defs, "d"); a.addDependency("b", b); a.addDependency("c", c); b.addDependency("d", d); c.addDependency("d", d); final DMNModelImpl model = new DMNModelImpl(defs); model.setDefinitions(defs); model.addDecision(a); model.addDecision(b); model.addDecision(c); model.addDecision(d); final DMNRuntime runtime = DMNRuntimeUtil.createRuntime(this.getClass()); final DMNResult result = runtime.evaluateAll(model, DMNFactory.newContext()); assertFalse(result.hasErrors()); }
@Test public void testDefaultNoTypeCheckButOverrideRuntime() { // do NOT use the DMNRuntimeUtil as that enables typeSafe check override for runtime. final KieContainer kieContainer = KieHelper.getKieContainer(ks.newReleaseId("org.kie", "dmn-test-" + UUID.randomUUID(), "1.0"), ks.getResources().newClassPathResource("forTypeCheckTest.dmn", this.getClass())); final DMNRuntime runtime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); ((DMNRuntimeImpl) runtime).setOption(new RuntimeTypeCheckOption(true)); assertPerformTypeCheck(runtime); }