/*
* Copyright 2005 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.template.model;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Tests how the rule parse tree renders itself to a rule XML fragment.
*/
public class RuleRenderTest {
@Test
public void testRuleRender() {
final Rule rule = new Rule("myrule",
new Integer(42),
1);
rule.setComment("rule comments");
final Condition cond = new Condition();
cond.setComment("cond comment");
cond.setSnippet("cond snippet");
rule.addCondition(cond);
final Consequence cons = new Consequence();
cons.setComment("cons comment");
cons.setSnippet("cons snippet;");
rule.addConsequence(cons);
rule.addConsequence(cons);
final DRLOutput out = new DRLOutput();
rule.renderDRL(out);
final String drl = out.getDRL();
assertNotNull(drl);
assertTrue(drl.indexOf("cond snippet") != -1);
assertTrue(drl.indexOf("cons snippet") != -1);
assertTrue(drl.indexOf("salience 42") != -1);
assertTrue(drl.indexOf("salience 42") < drl.indexOf("when"));
assertTrue(drl.indexOf("cond snippet") < drl.indexOf("then"));
assertTrue(drl.indexOf("cons snippet;") > drl.indexOf("then"));
assertTrue(drl.indexOf("rule") != -1);
assertTrue(drl.indexOf("end") > drl.indexOf("rule "));
assertTrue(drl.indexOf("//rule comments") > -1);
}
@Test
public void testAttributes() throws Exception {
Rule rule = new Rule("la",
new Integer(42),
2);
rule.setActivationGroup("foo");
rule.setNoLoop(true);
rule.setRuleFlowGroup("ruleflowgroup");
rule.setDuration(42L);
DRLOutput out = new DRLOutput();
rule.renderDRL(out);
String result = out.toString();
assertTrue(result.indexOf("ruleflow-group \"ruleflowgroup\"") > -1);
assertTrue(result.indexOf("no-loop true") > -1);
assertTrue(result.indexOf("activation-group \"foo\"") > -1);
assertTrue(result.indexOf("duration 42") > -1);
}
@Test
public void testMetadata() throws Exception {
Rule rule = new Rule("la", new Integer(42), 2);
rule.addMetadata("Author( A. U. Thor )");
rule.addMetadata("Revision( 42 )");
DRLOutput out = new DRLOutput();
rule.renderDRL(out);
String result = out.toString();
assertTrue(result.contains("@Author( A. U. Thor )"));
assertTrue(result.contains("@Revision( 42 )"));
}
@Test
public void testNotEscapeChars() {
//bit of a legacy from the olde XML dayes of yesteryeare
final Condition cond = new Condition();
cond.setSnippet("a < b");
final DRLOutput out = new DRLOutput();
cond.renderDRL(out);
assertTrue(out.toString().indexOf("a < b") != -1);
}
/**
* This checks that if the rule has "nil" salience, then
* no salience value should be put in the rule definition.
* This allows default salience to work as advertised.
*/
@Test
public void testNilSalience() {
Rule rule = new Rule("MyRule",
null,
1);
DRLOutput out = new DRLOutput();
rule.renderDRL(out);
String xml = out.toString();
int idx = xml.indexOf("salience");
assertEquals(-1,
idx);
rule = new Rule("MyRule",
new Integer(42),
1);
out = new DRLOutput();
rule.renderDRL(out);
xml = out.toString();
idx = xml.indexOf("salience");
assertTrue(idx > -1);
}
}