/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * 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.verifier.visitor; import java.io.InputStreamReader; import java.io.Reader; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.drools.compiler.DrlParser; import org.drools.compiler.DroolsParserException; import org.drools.lang.descr.PackageDescr; import org.drools.verifier.Verifier; import org.drools.verifier.components.SubPattern; import org.drools.verifier.components.SubRule; import org.drools.verifier.components.VerifierComponentType; import org.drools.verifier.data.VerifierComponent; import org.drools.verifier.data.VerifierData; import org.drools.verifier.data.VerifierReportFactory; import org.drools.verifier.visitor.PackageDescrVisitor; import org.drools.verifier.visitor.UnknownDescriptionException; import junit.framework.TestCase; public class PackageDescrVisitorTest extends TestCase { public void testVisit() throws DroolsParserException, UnknownDescriptionException { VerifierData data = VerifierReportFactory.newVerifierData(); PackageDescrVisitor visitor = new PackageDescrVisitor( data, Collections.EMPTY_LIST ); assertNotNull( data ); Reader drlReader = new InputStreamReader( Verifier.class.getResourceAsStream( "Misc3.drl" ) ); PackageDescr packageDescr = new DrlParser().parse( drlReader ); assertNotNull( packageDescr ); visitor.visitPackageDescr( packageDescr ); Collection<VerifierComponent> all = data.getAll(); Set<String> names = new HashSet<String>(); for ( VerifierComponent verifierComponent : all ) { String path = verifierComponent.getPath(); // System.out.println( "-" + verifierComponent ); if ( names.contains( path ) ) { fail( "Dublicate path " + path ); } else { names.add( path ); } } assertNotNull( all ); assertEquals( 52, all.size() ); } public void testSubPatterns() throws DroolsParserException, UnknownDescriptionException { VerifierData data = VerifierReportFactory.newVerifierData(); PackageDescrVisitor visitor = new PackageDescrVisitor( data, Collections.EMPTY_LIST ); assertNotNull( data ); Reader drlReader = new InputStreamReader( getClass().getResourceAsStream( "SubPattern.drl" ) ); PackageDescr packageDescr = new DrlParser().parse( drlReader ); assertNotNull( packageDescr ); visitor.visitPackageDescr( packageDescr ); Collection<VerifierComponent> all = data.getAll(); assertNotNull( all ); SubPattern test1SubPattern = null; SubPattern test2SubPattern = null; SubRule test1SubRule = null; SubRule test2SubRule = null; for ( VerifierComponent verifierComponent : all ) { // System.out.println( verifierComponent ); if ( verifierComponent.getVerifierComponentType().equals( VerifierComponentType.SUB_PATTERN ) ) { SubPattern subPattern = (SubPattern) verifierComponent; if ( "Test 1".equals( subPattern.getRuleName() ) ) { assertNull( test1SubPattern ); test1SubPattern = subPattern; } else if ( "Test 2".equals( subPattern.getRuleName() ) ) { assertNull( test2SubPattern ); test2SubPattern = subPattern; } } if ( verifierComponent.getVerifierComponentType().equals( VerifierComponentType.SUB_RULE ) ) { SubRule subRule = (SubRule) verifierComponent; if ( "Test 1".equals( subRule.getRuleName() ) ) { assertNull( test1SubRule ); test1SubRule = subRule; } else if ( "Test 2".equals( subRule.getRuleName() ) ) { assertNull( test2SubRule ); test2SubRule = subRule; } } } assertNotNull( test1SubPattern ); assertEquals( 3, test1SubPattern.getItems().size() ); assertNotNull( test2SubPattern ); assertEquals( 3, test2SubPattern.getItems().size() ); assertNotNull( test1SubRule ); assertEquals( 1, test1SubRule.getItems().size() ); assertNotNull( test2SubRule ); assertEquals( 1, test2SubRule.getItems().size() ); } }