[jboss-jira] [JBoss JIRA] (DROOLS-5346) Enhance unit test to detect non-externalized lambda widely

Toshiya Kobayashi (Jira) issues at jboss.org
Tue May 19 04:36:35 EDT 2020


     [ https://issues.redhat.com/browse/DROOLS-5346?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Toshiya Kobayashi updated DROOLS-5346:
--------------------------------------
    Summary: Enhance unit test to detect non-externalized lambda widely  (was: Enhance unit test to detect non-externalized lambda easier)


> Enhance unit test to detect non-externalized lambda widely
> ----------------------------------------------------------
>
>                 Key: DROOLS-5346
>                 URL: https://issues.redhat.com/browse/DROOLS-5346
>             Project: Drools
>          Issue Type: Sub-task
>          Components: executable model
>    Affects Versions: 7.37.0.Final
>            Reporter: Toshiya Kobayashi
>            Assignee: Toshiya Kobayashi
>            Priority: Major
>
> Currently "lambda is not externalized" issue is not widely detected in unit tests. We need to write a specific assertion like this:
> {code:java}
>     @Test
>     public void testExternalizeBindingVariableLambda() throws Exception {
>         String str =
>                 "package defaultpkg;\n" +
>                 "import " + Person.class.getCanonicalName() + ";" +
>                 "global java.util.List list;\n" +
>                 "rule R when\n" +
>                 "  $p : Person($n : name == \"Mario\")\n" +
>                 "then\n" +
>                 "  list.add($n);\n" +
>                 "end";
>         KieModuleModel kieModuleModel = KieServices.get().newKieModuleModel();
>         kieModuleModel.setConfigurationProperty("drools.externaliseCanonicalModelLambda", Boolean.TRUE.toString());
>         KieSession ksession = getKieSession(kieModuleModel, str );
>         final List<String> list = new ArrayList<>();
>         ksession.setGlobal("list", list);
>         if (testRunType == RUN_TYPE.FLOW_DSL || testRunType == RUN_TYPE.PATTERN_DSL) {
>             RuleImpl rule = (RuleImpl)ksession.getKieBase().getRule("defaultpkg", "R");
>             Pattern pattern = (Pattern)rule.getLhs().getChildren().get(0);
>             Declaration declaration = pattern.getDeclarations().get("$n");
>             LambdaReadAccessor lambdaReadAccessor = (LambdaReadAccessor)declaration.getExtractor();
>             Field field = LambdaReadAccessor.class.getDeclaredField("lambda");
>             field.setAccessible(true);
>             Function1.Impl function1 = (Function1.Impl)field.get(lambdaReadAccessor);
>             Object lambda = function1.getLambda();
>             assertThat(lambda.getClass().getName(), containsString("LambdaExtractor")); // materialized Lambda
>         }
>         Person me = new Person( "Mario", 40 );
>         ksession.insert( me );
>         ksession.fireAllRules();
>         Assertions.assertThat(list).containsExactlyInAnyOrder("Mario");
>     }
> {code}
> This JIRA is to enhance unit tests to assert it widely.



--
This message was sent by Atlassian Jira
(v7.13.8#713008)


More information about the jboss-jira mailing list