@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 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 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 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 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 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()); }