/*
* 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.verifier.visitor;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Collection;
import java.util.Collections;
import org.drools.compiler.compiler.DrlParser;
import org.drools.compiler.lang.descr.PackageDescr;
import org.drools.verifier.Verifier;
import org.drools.verifier.components.Field;
import org.drools.verifier.components.Import;
import org.drools.verifier.components.NumberRestriction;
import org.drools.verifier.components.ObjectType;
import org.drools.verifier.components.Pattern;
import org.drools.verifier.components.PatternOperatorDescr;
import org.drools.verifier.components.RuleOperatorDescr;
import org.drools.verifier.components.RulePackage;
import org.drools.verifier.components.SubPattern;
import org.drools.verifier.components.SubRule;
import org.drools.verifier.components.TextConsequence;
import org.drools.verifier.components.VerifierRule;
import org.drools.verifier.components.WorkingMemory;
import org.drools.verifier.data.VerifierComponent;
import org.drools.verifier.data.VerifierData;
import org.drools.verifier.data.VerifierReportFactory;
import org.junit.Test;
import org.kie.internal.builder.conf.LanguageLevelOption;
public class VerifierComponentTest {
@Test
public void testVisit() throws Exception {
// Drools Package description from Drl file
Reader drlReader = new InputStreamReader(Verifier.class.getResourceAsStream("Misc3.drl"));
PackageDescr descr = new DrlParser(LanguageLevelOption.DRL5).parse(drlReader);
// Drools Verifier objects
VerifierData verifierData = VerifierReportFactory.newVerifierData();
PackageDescrVisitor visitor = new PackageDescrVisitor(verifierData, Collections.EMPTY_LIST);
visitor.visitPackageDescr(descr);
// Collect the results.
Collection<VerifierComponent> datas = verifierData.getAll();
VerifierComponent[] components = datas.toArray(new VerifierComponent[datas.size()]);
// Misc3.drl
assertVerifierComponent((TextConsequence) components[0],51);
assertVerifierComponent((TextConsequence) components[1],42);
assertVerifierComponent((Field) components[2],48);
assertVerifierComponent((Field) components[3],39);
assertVerifierComponent((Field) components[4],40);
assertVerifierComponent((Field) components[5],41);
assertVerifierComponent((Import) components[6],19);
assertVerifierComponent((ObjectType) components[7],48);
assertVerifierComponent((ObjectType) components[8],19);
assertVerifierComponent((ObjectType) components[9],39);
assertVerifierComponent((ObjectType) components[10],40);
assertVerifierComponent((ObjectType) components[11],41);
assertVerifierComponent((RuleOperatorDescr) components[12],48);
assertVerifierComponent((PatternOperatorDescr) components[13],48);
assertVerifierComponent((PatternOperatorDescr) components[14],49);
assertVerifierComponent((PatternOperatorDescr) components[15],50);
assertVerifierComponent((RuleOperatorDescr) components[16],39);
assertVerifierComponent((PatternOperatorDescr) components[17],39);
assertVerifierComponent((PatternOperatorDescr) components[18],40);
assertVerifierComponent((PatternOperatorDescr) components[19],41);
assertVerifierComponent((Pattern) components[20],48);
assertVerifierComponent((Pattern) components[21],49);
assertVerifierComponent((Pattern) components[22],50);
assertVerifierComponent((Pattern) components[23],39);
assertVerifierComponent((Pattern) components[24],40);
assertVerifierComponent((Pattern) components[25],41);
assertVerifierComponent((NumberRestriction) components[26],48);
assertVerifierComponent((NumberRestriction) components[27],49);
assertVerifierComponent((NumberRestriction) components[28],50);
assertVerifierComponent((NumberRestriction) components[29],39);
assertVerifierComponent((NumberRestriction) components[30],40);
assertVerifierComponent((NumberRestriction) components[31],41);
assertVerifierComponent((NumberRestriction) components[32],41);
assertVerifierComponent((VerifierRule) components[33],46);
assertVerifierComponent((VerifierRule) components[34],37);
assertVerifierComponent((RulePackage) components[35],17);
assertVerifierComponent((SubPattern) components[36],48);
assertVerifierComponent((SubPattern) components[37],49);
assertVerifierComponent((SubPattern) components[38],50);
assertVerifierComponent((SubPattern) components[39],39);
assertVerifierComponent((SubPattern) components[40],40);
assertVerifierComponent((SubPattern) components[41],41);
assertVerifierComponent((SubRule) components[42],46);
assertVerifierComponent((SubRule) components[43],37);
assertVerifierComponent((WorkingMemory) components[44],-1);
}
void assertVerifierComponent(VerifierComponent component, int line) {
assertNotNull(component);
assertNotNull(component.getDescr());
if(component instanceof TextConsequence) {
assertEquals(line, ((TextConsequence)component).getDescr().getConsequenceLine());
} else {
assertEquals(line, component.getDescr().getLine());
}
}
}