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