/* * Copyright 2010 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. * 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 org.drools.compiler.compiler.DrlParser; import org.drools.compiler.compiler.DroolsParserException; import org.drools.compiler.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.junit.Before; import org.junit.Test; import org.kie.internal.builder.conf.LanguageLevelOption; import java.io.InputStream; 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 static org.junit.Assert.*; public class PackageDescrVisitorTest { private VerifierData verifierData; private PackageDescrVisitor packageDescrVisitor; @Before public void setUp() throws Exception { verifierData = VerifierReportFactory.newVerifierData(); packageDescrVisitor = new PackageDescrVisitor(verifierData, Collections.EMPTY_LIST); } @Test public void testVisit() throws Exception { PackageDescr packageDescr = getPackageDescr(Verifier.class.getResourceAsStream("Misc3.drl")); assertNotNull(packageDescr); packageDescrVisitor.visitPackageDescr(packageDescr); Collection<VerifierComponent> all = verifierData.getAll(); Set<String> names = new HashSet<String>(); for (VerifierComponent verifierComponent : all) { String path = verifierComponent.getPath(); System.out.println("-" + verifierComponent); if (verifierComponent.getDescr() != null) { System.out.println(" \n\t\t => " + verifierComponent.getDescr().getLine() + ":" + +verifierComponent.getDescr().getEndLine() + " " + verifierComponent.getDescr().getText()); } else { System.out.println(" \n\t\t => null for " + verifierComponent.getClass().getSimpleName()); } if (names.contains(path)) { fail("Dublicate path " + path); } else { names.add(path); } } assertNotNull(all); assertEquals(45, all.size()); } @Test public void testSubPatterns() throws Exception { PackageDescr packageDescr = getPackageDescr(getClass().getResourceAsStream("SubPattern.drl")); assertNotNull(packageDescr); packageDescrVisitor.visitPackageDescr(packageDescr); Collection<VerifierComponent> all = verifierData.getAll(); assertNotNull(all); SubPattern test1SubPattern = null; SubPattern test2SubPattern = null; SubRule test1SubRule = null; SubRule test2SubRule = null; for (VerifierComponent verifierComponent : all) { // System.out.println( verifierComponent ); System.out.println("-" + verifierComponent); if (verifierComponent.getDescr() != null) { System.out.println(" \n\t\t => " + verifierComponent.getDescr().getLine() + ":" + +verifierComponent.getDescr().getEndLine() + " " + verifierComponent.getDescr().getText()); } else { System.out.println(" \n\t\t => null for " + verifierComponent.getClass().getSimpleName()); } 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()); } private PackageDescr getPackageDescr(InputStream resourceAsStream) throws DroolsParserException { Reader drlReader = new InputStreamReader(resourceAsStream); return new DrlParser(LanguageLevelOption.DRL5).parse(drlReader); } }