/* * 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.api; import org.junit.Test; import org.kie.api.KieServices; import org.kie.api.builder.KieFileSystem; import org.kie.api.builder.Results; import org.kie.api.definition.rule.Rule; import org.kie.api.io.ResourceType; import org.kie.internal.builder.KnowledgeBuilder; import org.kie.internal.builder.KnowledgeBuilderFactory; import org.kie.internal.definition.KnowledgePackage; import org.kie.internal.io.ResourceFactory; import java.util.Collection; import static org.junit.Assert.*; public class KnowledgeBuilderTest { @Test public void testKnowledgeProvider() { KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(); assertNotNull( builder ); } @Test public void testKnowledgeProviderWithRules() { KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(); String str = ""; str += "package org.drools.compiler.test1\n"; str += "rule rule1\n"; str += "when\n"; str += "then\n"; str += "end\n\n"; str += "rule rule2\n"; str += "when\n"; str += "then\n"; str += "end\n"; builder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL ); str = "package org.drools.compiler.test2\n"; str += "rule rule3\n"; str += "when\n"; str += "then\n"; str += "end\n\n"; str += "rule rule4\n"; str += "when\n"; str += "then\n"; str += "end\n"; builder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL ); Collection<KnowledgePackage> pkgs = builder.getKnowledgePackages(); assertNotNull( pkgs ); assertEquals( 2, pkgs.size() ); KnowledgePackage test1 = getKnowledgePackage(pkgs, "org.drools.compiler.test1" ); Collection<Rule> rules = test1.getRules(); assertEquals( 2, rules.size() ); Rule rule = getRule( rules, "rule1" ); assertEquals("rule1", rule.getName() ); rule = getRule( rules, "rule2" ); assertEquals( "rule2", rule.getName() ); KnowledgePackage test2 = getKnowledgePackage(pkgs, "org.drools.compiler.test2" ); rules = test2.getRules(); assertEquals( 2, rules.size() ); rule = getRule( rules, "rule3" ); assertEquals("rule3", rule.getName() ); rule = getRule( rules, "rule4" ); assertEquals( "rule4", rule.getName() ); } public Rule getRule(Collection<Rule> rules, String name) { for ( Rule rule : rules ) { if ( rule.getName().equals( name ) ) { return rule; } } return null; } public KnowledgePackage getKnowledgePackage(Collection<KnowledgePackage> pkgs, String name) { for ( KnowledgePackage pkg : pkgs ) { if ( pkg.getName().equals( name ) ) { return pkg; } } return null; } @Test public void testEmptyByteResource() throws Exception { KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(); try { builder.add(ResourceFactory.newByteArrayResource(new byte[0]), ResourceType.DRL); fail(); } catch ( IllegalArgumentException e ) { } } @Test public void testMalformedDrl() throws Exception { // DROOLS-928 byte[] content = new byte[]{0x04,0x44,0x00,0x00,0x60,0x00,0x00,0x00}; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem().write( "src/main/resources/r1.drl", new String(content) ); Results results = ks.newKieBuilder( kfs ).buildAll().getResults(); assertTrue( results.getMessages().size() > 0 ); } }