@SafeVarargs public static <K, V> Map<K, V> mapOf(Map.Entry<K, V>... attributes) { return prototype(attributes); }
@Test public void testDROOLS2286bis() { // DROOLS-2286 (map case) final Map<String, Object> johnCena = prototype(entry("name", "John"), entry("surname", "Cena")); final Map<String, Object> leslieBrown = prototype(entry("name", "Leslie"), entry("surname", "Brown")); final Map<String, Object> johnWick = prototype(entry("name", "John"), entry("surname", "Wick")); final List<Map<String, Object>> personList = new ArrayList<>(); personList.add(johnCena); personList.add(leslieBrown); personList.add(johnWick); final DMNContext context = DMNFactory.newContext(); context.set("PersonList", personList); assertDROOLS2286(context); }
context.set("TheBook", Arrays.asList(prototype(entry("Title", "55"), entry("Price", new BigDecimal(5)), entry("Quantity", new BigDecimal(5))), prototype(entry("Title", "510"), entry("Price", new BigDecimal(5)), entry("Quantity", new BigDecimal(10))), prototype(entry("Title", "810"), entry("Price", new BigDecimal(8)), entry("Quantity", new BigDecimal(10))), prototype(entry("Title", "85"), entry("Price", new BigDecimal(8)), entry("Quantity", new BigDecimal(5))), prototype(entry("Title", "66"), entry("Price", new BigDecimal(6)), entry("Quantity", new BigDecimal(6)))));
@Test public void testEnhancedForLoop2() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("MACD-enhanced_iteration.dmn", this.getClass()); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/definitions/_6cfe7d88-6741-45d1-968c-b61a597d0964", "MACD-enhanced iteration"); assertThat(dmnModel, notNullValue()); assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false)); final DMNContext context = DMNFactory.newContext(); final Map<String, Object> d1 = prototype(entry("aDate", LocalDate.of(2018, 3, 5)), entry("Close", 1010)); final Map<String, Object> d2 = prototype(entry("aDate", LocalDate.of(2018, 3, 6)), entry("Close", 1020)); final Map<String, Object> d3 = prototype(entry("aDate", LocalDate.of(2018, 3, 7)), entry("Close", 1030)); context.set("DailyTable", Arrays.asList(d1, d2, d3)); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context); assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false)); final DMNContext resultContext = dmnResult.getContext(); assertThat(((Map<String, Object>) ((List) resultContext.get("MACDTable")).get(0)).get("aDate"), is(LocalDate.of(2018, 3, 5))); assertThat(((Map<String, Object>) ((List) resultContext.get("MACDTable")).get(1)).get("aDate"), is(LocalDate.of(2018, 3, 6))); assertThat(((Map<String, Object>) ((List) resultContext.get("MACDTable")).get(2)).get("aDate"), is(LocalDate.of(2018, 3, 7))); }
@Test public void testRelationwithemptycell() { // DROOLS-2439 final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("relation_with_empty_cell.dmn", this.getClass()); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/dmn/definitions/_99a00903-2943-47df-bab1-a32f276617ea", "Relation with empty cell"); assertThat(dmnModel, notNullValue()); assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false)); final DMNContext context = DMNFactory.newContext(); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context); System.out.println(dmnResult); assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false)); final DMNContext result = dmnResult.getContext(); assertThat(result.get("Decision A"), is(Arrays.asList(prototype(entry("name", null), entry("age", null)), prototype(entry("name", "John"), entry("age", new BigDecimal(1))), prototype(entry("name", null), entry("age", null)), prototype(entry("name", "Matteo"), entry("age", null))))); }
@Test public void testSingletonlist_function_call() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("singletonlist_fuction_call.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel( "http://www.trisotech.com/definitions/_0768879b-5ee1-410f-92f0-7732573b069d", "expression function subst [a] with a" ); assertThat( dmnModel, notNullValue() ); assertThat( DMNRuntimeUtil.formatMessages( dmnModel.getMessages() ), dmnModel.hasErrors(), is( false ) ); final DMNContext ctx = runtime.newContext(); ctx.set("InputLineItem", prototype(entry("Line", "0015"), entry("Description", "additional Battery"))); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, ctx ); assertThat( DMNRuntimeUtil.formatMessages( dmnResult.getMessages() ), dmnResult.hasErrors(), is( false ) ); final DMNContext result = dmnResult.getContext(); assertThat( result.get("The Battery"), is( prototype(entry("Line", "0010"), entry("Description", "Battery")) ) ); assertThat( (List<?>)result.get("Remove Battery"), contains( prototype(entry("Line", "0020"), entry("Description", "Case")), prototype(entry("Line", "0030"), entry("Description", "Power Supply")) ) ); assertThat( (List<?>)result.get("Remove Battery"), not( contains( prototype(entry("Line", "0010"), entry("Description", "Battery")) ) ) ); assertThat( (List<?>)result.get("Insert before Line 0020"), contains( prototype(entry("Line", "0010"), entry("Description", "Battery")), prototype(entry("Line", "0015"), entry("Description", "additional Battery")), prototype(entry("Line", "0020"), entry("Description", "Case")), prototype(entry("Line", "0030"), entry("Description", "Power Supply")) ) ); }
@Test public void testTypeInferenceForNestedContextAnonymousEntry() { // DROOLS-1585 final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("PersonListHelloBKM2.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel( "http://www.trisotech.com/definitions/_7e41a76e-2df6-4899-bf81-ae098757a3b6", "PersonListHelloBKM2" ); assertThat( dmnModel, notNullValue() ); assertThat( DMNRuntimeUtil.formatMessages( dmnModel.getMessages() ), dmnModel.hasErrors(), is( false ) ); final DMNContext context = runtime.newContext(); final Map<String, Object> p1 = prototype(entry("Full Name", "John Doe"), entry("Age", 33) ); final Map<String, Object> p2 = prototype(entry("Full Name", "47"), entry("Age", 47) ); context.set("My Input Data", Arrays.asList(p1, p2)); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context ); final DMNContext result = dmnResult.getContext(); assertThat( DMNRuntimeUtil.formatMessages( dmnResult.getMessages() ), dmnResult.hasErrors(), is( false ) ); assertThat( (List<?>)result.get("My Decision"), contains( prototype( entry("Full Name", "Prof. John Doe"), entry("Age", EvalHelper.coerceNumber(33)) ), prototype( entry("Full Name", "Prof. 47"), entry("Age", EvalHelper.coerceNumber(47)) ) ) ); }
@Test public void testForLoopTypeCheck() { // DROOLS-1580 final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("PersonListHelloBKM.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel( "http://www.trisotech.com/definitions/_ec5a78c7-a317-4c39-8310-db59be60f1c8", "PersonListHelloBKM" ); assertThat( dmnModel, notNullValue() ); assertThat( DMNRuntimeUtil.formatMessages( dmnModel.getMessages() ), dmnModel.hasErrors(), is( false ) ); final DMNContext context = runtime.newContext(); final Map<String, Object> p1 = prototype(entry("Full Name", "John Doe"), entry("Age", 33) ); final Map<String, Object> p2 = prototype(entry("Full Name", "47"), entry("Age", 47) ); context.set("My Input Data", Arrays.asList(p1, p2)); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context ); final DMNContext result = dmnResult.getContext(); assertThat( DMNRuntimeUtil.formatMessages( dmnResult.getMessages() ), dmnResult.hasErrors(), is( false ) ); assertThat( (List<?>)result.get("My Decision"), contains( "The person named John Doe is 33 years old.", "The person named 47 is 47 years old.") ); }
@Test public void testListContainmentDT() { // DROOLS-2416 final DMNRuntime runtime = DMNRuntimeUtil.createRuntime("list_containment_DT.dmn", this.getClass()); final DMNModel dmnModel = runtime.getModel("http://www.trisotech.com/definitions/_6ab2bd6d-adaa-45c4-a141-a84382a201eb", "list containment DT"); assertThat(dmnModel, notNullValue()); assertThat(DMNRuntimeUtil.formatMessages(dmnModel.getMessages()), dmnModel.hasErrors(), is(false)); final DMNContext context = DMNFactory.newContext(); context.set("Passenger", prototype(entry("name", "Osama bin Laden"))); final DMNResult dmnResult = runtime.evaluateAll(dmnModel, context); assertThat(DMNRuntimeUtil.formatMessages(dmnResult.getMessages()), dmnResult.hasErrors(), is(false)); final DMNContext result = dmnResult.getContext(); assertThat(result.get("Boarding Status"), is("Denied")); }
@Test public void testAllowedValuesChecks() { final DMNRuntime runtime = DMNRuntimeUtil.createRuntime( "AllowedValuesChecks.dmn", this.getClass() ); final DMNModel dmnModel = runtime.getModel( "http://www.trisotech.com/definitions/_238bd96d-47cd-4746-831b-504f3e77b442", "AllowedValuesChecks" ); assertThat( dmnModel, notNullValue() ); assertThat( DMNRuntimeUtil.formatMessages( dmnModel.getMessages() ), dmnModel.hasErrors(), is( false ) ); final DMNContext ctx1 = runtime.newContext(); ctx1.set("p1", prototype(entry("Name", "P1"), entry("Interests", Collections.singletonList("Golf")))); final DMNResult dmnResult1 = runtime.evaluateAll( dmnModel, ctx1 ); assertThat( DMNRuntimeUtil.formatMessages( dmnResult1.getMessages() ), dmnResult1.hasErrors(), is( false ) ); assertThat( dmnResult1.getContext().get( "MyDecision" ), is( "The Person P1 likes 1 thing(s)." ) ); final DMNContext ctx2 = runtime.newContext(); ctx2.set("p1", prototype(entry("Name", "P2"), entry("Interests", Collections.singletonList("x")))); final DMNResult dmnResult2 = runtime.evaluateAll( dmnModel, ctx2 ); assertThat( DMNRuntimeUtil.formatMessages( dmnResult2.getMessages() ), dmnResult2.hasErrors(), is( true ) ); assertThat( dmnResult2.getMessages().stream().anyMatch( m -> m.getMessageType().equals( DMNMessageType.ERROR_EVAL_NODE ) ), is( true ) ); final DMNContext ctx3 = runtime.newContext(); ctx3.set("p1", prototype(entry("Name", "P3"), entry("Interests", Arrays.asList("Golf", "Computer")))); final DMNResult dmnResult3 = runtime.evaluateAll( dmnModel, ctx3 ); assertThat( DMNRuntimeUtil.formatMessages( dmnResult3.getMessages() ), dmnResult3.hasErrors(), is( false ) ); assertThat( dmnResult3.getContext().get( "MyDecision" ), is( "The Person P3 likes 2 thing(s)." ) ); final DMNContext ctx4 = runtime.newContext(); ctx4.set("p1", prototype(entry("Name", "P4"), entry("Interests", Arrays.asList("Golf", "x")))); final DMNResult dmnResult4 = runtime.evaluateAll( dmnModel, ctx4 ); assertThat( DMNRuntimeUtil.formatMessages( dmnResult4.getMessages() ), dmnResult4.hasErrors(), is( true ) ); assertThat( dmnResult4.getMessages().stream().anyMatch( m -> m.getMessageType().equals( DMNMessageType.ERROR_EVAL_NODE ) ), is( true ) ); }
final Map<String, DMNType> personPrototype = prototype(entry("name", FEEL_STRING), entry("age", FEEL_NUMBER)); 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 Map<String, Object> instanceBob = prototype(entry("name", "Bob"), entry("age", 42)); final Map<String, Object> instanceJohn = prototype(entry("name", "John"), entry("age", 47)); final Map<String, Object> instanceNOTaPerson = prototype(entry("name", "NOTAPERSON"));