/* * 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.common; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.List; import org.drools.core.common.TerminalNodeIterator; import org.drools.core.util.Iterator; import org.drools.core.reteoo.RuleTerminalNode; import org.drools.core.reteoo.TerminalNode; import org.junit.Test; import org.kie.internal.KnowledgeBase; import org.kie.internal.KnowledgeBaseFactory; import org.kie.internal.builder.KnowledgeBuilder; import org.kie.internal.builder.KnowledgeBuilderFactory; import org.kie.internal.io.ResourceFactory; import org.kie.api.io.ResourceType; public class TerminalNodeIteratorTest { @Test public void testTerminalNodeListener() { String str = "package org.kie.test \n" + "\n" + "rule rule1 when\n" + "then\n" + "end\n" + "rule rule2 when\n" + "then\n" + "end\n" + "rule rule3 when\n" + " Object()" + "then\n" + "end\n" + "rule rule4 when\n" + " Object()" + "then\n" + "end\n" + "rule rule5 when\n" + // this will result in two terminal nodes " Object() or\n" + " Object()\n" + "then\n" + "end\n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL ); if ( kbuilder.hasErrors() ) { fail( kbuilder.getErrors().toString() ); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); List<String> nodes = new ArrayList<String>(); Iterator it = TerminalNodeIterator.iterator(kbase); for ( TerminalNode node = (TerminalNode) it.next(); node != null; node = (TerminalNode) it.next() ) { nodes.add( ((RuleTerminalNode) node).getRule().getName() ); } assertEquals( 6, nodes.size() ); assertTrue( nodes.contains( "rule1" ) ); assertTrue( nodes.contains( "rule2" ) ); assertTrue( nodes.contains( "rule3" ) ); assertTrue( nodes.contains( "rule4" ) ); assertTrue( nodes.contains( "rule5" ) ); int first = nodes.indexOf( "rule5" ); int second = nodes.lastIndexOf( "rule5" ); assertTrue( first != second ); } }