/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.compiler;
import org.junit.Ignore;
import org.junit.Test;
import org.kie.internal.KnowledgeBase;
import org.kie.internal.runtime.StatefulKnowledgeSession;
public class NestedAccessorsTest extends CommonTestMethodBase {
@Test
public void testNestedAccessor() throws Exception {
String str = "import org.drools.compiler.*;\n" +
"rule R1 when\n" +
" Person( name == \"mark\", cheese.(type == \"gorgonzola\", price == 10) )\n" +
"then\n" +
"end\n";
KnowledgeBase kbase = loadKnowledgeBaseFromString(str);
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Person mark1 = new Person("mark");
mark1.setCheese(new Cheese("gorgonzola", 10));
ksession.insert(mark1);
assertEquals(1, ksession.fireAllRules());
ksession.dispose();
}
@Test
public void testNestedAccessorWithBinding() throws Exception {
String str = "import org.drools.compiler.*;\n" +
"global StringBuilder sb\n" +
"rule R1 when\n" +
" Person( name == \"mark\", cheese.(price == 10, $type : type) )\n" +
"then\n" +
" sb.append( $type );\n" +
"end\n";
KnowledgeBase kbase = loadKnowledgeBaseFromString(str);
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
StringBuilder sb = new StringBuilder();
ksession.setGlobal("sb", sb);
Person mark1 = new Person("mark");
mark1.setCheese(new Cheese("gorgonzola", 10));
ksession.insert(mark1);
assertEquals(1, ksession.fireAllRules());
assertEquals("gorgonzola", sb.toString());
ksession.dispose();
}
@Test
public void testDoubleNestedAccessor() throws Exception {
String str = "import org.drools.compiler.*;\n" +
"rule R1 when\n" +
" Person( name == \"mark\", cheese.(price == 10, type.(length == 10) ) )\n" +
"then\n" +
"end\n";
KnowledgeBase kbase = loadKnowledgeBaseFromString(str);
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Person mark1 = new Person("mark");
mark1.setCheese(new Cheese("gorgonzola", 10));
ksession.insert(mark1);
assertEquals(1, ksession.fireAllRules());
ksession.dispose();
}
@Test
public void testNestedAccessorWithInlineCast() throws Exception {
String str = "import org.drools.compiler.*;\n" +
"rule R1 when\n" +
" Person( name == \"mark\", address#LongAddress.(country == \"uk\", suburb == \"suburb\") )\n" +
"then\n" +
"end\n";
KnowledgeBase kbase = loadKnowledgeBaseFromString(str);
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Person mark1 = new Person("mark");
mark1.setAddress(new LongAddress("street", "suburb", "zipCode", "uk"));
ksession.insert(mark1);
Person mark2 = new Person("mark");
ksession.insert(mark2);
Person mark3 = new Person("mark");
mark3.setAddress(new Address("street", "suburb", "zipCode"));
ksession.insert(mark3);
assertEquals(1, ksession.fireAllRules());
ksession.dispose();
}
}