Package org.drools.compiler.integrationtests

Source Code of org.drools.compiler.integrationtests.ExpressionConstraintsTest

package org.drools.compiler.integrationtests;

import org.drools.compiler.CommonTestMethodBase;
import org.drools.compiler.Mailbox;
import org.drools.compiler.Mailbox.FolderType;
import org.drools.compiler.Message;
import org.drools.core.io.impl.ByteArrayResource;
import org.junit.Assert;
import org.junit.Test;
import org.kie.api.io.ResourceType;
import org.kie.internal.KnowledgeBase;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.runtime.StatefulKnowledgeSession;

/**
* This is a sample class to launch a rule.
*/
public class ExpressionConstraintsTest extends CommonTestMethodBase {
   
    @Test
    public void testExpressionConstraints1() {
        String drl = "package org.drools.compiler.integrationtests\n" +
                 "import " + Mailbox.FolderType.class.getCanonicalName() + ";\n" +
                     "import " + Mailbox.class.getCanonicalName() + ";\n" +
                 "rule R1\n" +
                 "        dialect \"mvel\"\n" +
                 "    when\n" +
                 "        $m : Mailbox( \n" +
                 "                $folderType : getDefaultFolderType(),\n" +
                 "                FolderType.INBOX == $folderType,\n" +
                 "                $folderType == FolderType.INBOX,\n" +
                 "                $mailForFolder2 : getMailTypeForFolderType(getDefaultFolderType()),\n" +
                 "                FolderType.SENT != getDefaultFolderType(), \n" +
                 "                getDefaultFolderType() != FolderType.SENT, \n" +
                 "                getMailTypeForFolderType($folderType) == MailType.WORK,\n" +
                 "                1 > 0\n" +
                 "        )\n" +
                 "    then\n" +
                 "end\n";
        KnowledgeBase kbase = loadKnowledgeBaseFromString( drl );
        StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);

        Mailbox mbox = new Mailbox(Mailbox.TEST_EMAIL);
        Message message = new Message();
        message.setMessage("Welcome");
        message.setStatus(Message.HELLO);
        mbox.getFolder(FolderType.INBOX).add(message);

        ksession.insert(mbox);
        ksession.insert(message);
        int rules = ksession.fireAllRules();
       
        Assert.assertEquals( 1, rules );
    }

    @Test
    public void testExpressionConstraints2() {
        String drl = "package org.drools.compiler.integrationtests\n" +
                     "import " + Mailbox.FolderType.class.getCanonicalName() + ";\n" +
                     "import " + Mailbox.class.getCanonicalName() + ";\n" +
                     "rule R1\n" +
                     "    dialect \"mvel\"\n" +
                     "    when\n" +
                     "        $m : Mailbox( \n" +
                     "                $me : owneremail,\n" +
                     "                recentContacts[Mailbox.TEST_EMAIL] != null,\n" +
                     "                recentContacts[\"me@test.com\"] != null,\n" +
                     "                $d1 : recentContacts[Mailbox.TEST_EMAIL],\n" +
                     "                $d2 : recentContacts[\"me@test.com\"],\n" +
                     "                recentContacts.get(owneremail) != null,\n" +
                     "                recentContacts.get($me) != null,\n" +
                     "                recentContacts[$me] != null,\n" +
                     "                $d3: recentContacts.get(owneremail),\n" +
                     "                // Waiting for MVEL fixes for the following 2 scenarios" +
                     "                // recentContacts[owneremail] != null,\n" +
                     "                // recentContacts[getOwneremail()] != null,\n" +
                     "                0 < 1\n" +
                     "        )\n" +
                     "    then\n" +
                     "end\n";
        KnowledgeBase kbase = loadKnowledgeBaseFromString( drl );
        StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);

        Mailbox mbox = new Mailbox(Mailbox.TEST_EMAIL);
        Message message = new Message();
        message.setMessage("Welcome");
        message.setStatus(Message.HELLO);
        mbox.getFolder(FolderType.INBOX).add(message);

        ksession.insert(mbox);
        ksession.insert(message);
        int rules = ksession.fireAllRules();
       
        Assert.assertEquals( 1, rules );
    }

    @Test
    public void testExpressionConstraints3() {
        String drl = "package org.drools.compiler.integrationtests\n" +
                     "import " + Mailbox.FolderType.class.getCanonicalName() + ";\n" +
                     "import " + Mailbox.class.getCanonicalName() + ";\n" +
                     "rule R1\n" +
                     "    dialect \"mvel\"\n" +
                     "    when\n" +
                     "        $m : Mailbox( \n" +
                     "                $type1 : FolderType.INBOX,\n" +
                     "                $type2 : org.drools.compiler.Mailbox$FolderType.INBOX,\n" +
                     "                $work1 : getFolder(null),\n" +
                     "                $work2 : getFolder(org.drools.compiler.Mailbox$FolderType.INBOX),\n" +
                     "                $work3 : getFolder(FolderType.INBOX),\n" +
                     "                getFolder($type1) != null,\n" +
                     "                getFolder($type1).size() > 0,\n" +
                     "                ! getFolder($type1).isEmpty(),\n" +
                     "                $work6 : folders,\n" +
                     "                $work7 : folders.size,\n" +
                     "                //folders.containsKey(FolderType.INBOX),\n" +
                     "                folders.containsKey(org.drools.compiler.Mailbox$FolderType.INBOX),\n" +
                     "                folders.containsKey($type2),\n" +
                     "                !folders.isEmpty,\n" +
                     "                getFolder(FolderType.INBOX) != null,\n" +
                     "                //$v1 : folders[FolderType.INBOX], \n" +
                     "                //$v2 : folders[com.sample.Mailbox.FolderType.INBOX],\n" +
                     "                //$v3 : folders[com.sample.Mailbox$FolderType.INBOX],\n" +
                     "                //folders[$type1]!=null,\n" +
                     "                //folders.get(FolderType.INBOX)!=null, // sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl cannot be cast to java.lang.Class\n" +
                     "                //folders.isEmpty(),  // SAME ERROR\n" +
                     "                0 < 1\n" +
                     "        )\n" +
                     "    then\n" +
                     "end";
        KnowledgeBase kbase = loadKnowledgeBaseFromString( drl );
        StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);

        Mailbox mbox = new Mailbox(Mailbox.TEST_EMAIL);
        Message message = new Message();
        message.setMessage("Welcome");
        message.setStatus(Message.HELLO);
        mbox.getFolder(FolderType.INBOX).add(message);

        ksession.insert(mbox);
        ksession.insert(message);
        int rules = ksession.fireAllRules();
       
        Assert.assertEquals( 1, rules );
    }

    @Test
    public void testExpressionConstraints4() {
        String drl = "package org.drools.compiler.integrationtests\n" +
                     "import " + Mailbox.FolderType.class.getCanonicalName() + ";\n" +
                     "import " + Mailbox.class.getCanonicalName() + ";\n" +
                     "rule R1\n" +
                     "        dialect \"mvel\"\n" +
                     "    when\n" +
                     "        Mailbox( owneremail == 'bob@mail' || owneremail == 'john@mail' )\n" +
                     "    then\n" +
                     "end\n" +
                     "rule R2\n" +
                     "        dialect \"mvel\"\n" +
                     "    when\n" +
                     "        Mailbox( ( owneremail == 'bob@mail' ) || ( owneremail == 'john@mail' ) )\n" +
                     "    then\n" +
                     "end\n";
        KnowledgeBase kbase = loadKnowledgeBaseFromString( drl );
        StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);

        ksession.insert(new Mailbox("foo@mail"));
        int rules = ksession.fireAllRules();
        Assert.assertEquals( 0, rules );

        ksession.insert(new Mailbox("john@mail"));
        rules = ksession.fireAllRules();
        Assert.assertEquals( 2, rules );
    }

    @Test
    public void testDeeplyNestedCompactExpressions() {
        String drl = "package org.drools\n" +
                     "rule R1\n" +
                     " when\n" +
                     " Person( age > 10 && ( < 20 || > 30 ) )\n" +
                     // nested () are not supported with compact constraints.
                     // workaround : use field names explicitly:
                     //" Person( age > 10 && ( age < 20 || age > 30 ) )\n" +
                     " then\n" +
                     "end\n";

        KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        knowledgeBuilder.add( new ByteArrayResource( drl.getBytes() ), ResourceType.DRL );
        assertTrue( knowledgeBuilder.hasErrors() );
    }
}
TOP

Related Classes of org.drools.compiler.integrationtests.ExpressionConstraintsTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.