/*
* Copyright 2017 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.testcoverage.regression;
import org.assertj.core.api.Assertions;
import org.drools.testcoverage.common.util.KieBaseUtil;
import org.drools.testcoverage.common.util.KieUtil;
import org.drools.testcoverage.common.util.TestConstants;
import org.junit.Test;
import org.kie.api.KieBase;
import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.Message.Level;
import org.kie.api.definition.type.FactType;
import org.kie.api.io.Resource;
import org.kie.api.runtime.KieSession;
import java.io.StringReader;
public class NonStringCompareTest {
private static final String genericDrl =
"package " + TestConstants.PACKAGE_REGRESSION + "\n"
+ "declare Fact\n"
+ " field : String\n"
+ "end\n"
+ "rule generic\n"
+ " when\n"
+ " Fact( field == %s )\n"
+ " then\n"
+ " // consequence\n"
+ "end\n";
@Test
public void testStringCompare() throws Exception {
testScenario("\"someString\"", "someString");
}
@Test
public void testNonQuotedStringComapre() {
final KieBuilder kbuilder = build("someString");
Assertions.assertThat(kbuilder.getResults().getMessages(Level.ERROR).size()).isEqualTo(1);
}
@Test
public void testIntCompare() throws Exception {
testScenario("13", "13");
}
private void testScenario(final String factFieldValueForDrl, final String factFieldValueForTest)
throws IllegalAccessException, InstantiationException {
final KieBuilder kbuilder = build(factFieldValueForDrl);
Assertions.assertThat(kbuilder.getResults().getMessages(Level.ERROR)).isEmpty();
final KieBase kbase = KieBaseUtil.getDefaultKieBaseFromKieBuilder(kbuilder);
final KieSession ksession = kbase.newKieSession();
try {
final FactType type = kbase.getFactType(TestConstants.PACKAGE_REGRESSION, "Fact");
final Object fact = type.newInstance();
type.set(fact, "field", factFieldValueForTest);
ksession.insert(fact);
final int count = ksession.fireAllRules();
Assertions.assertThat(count).isEqualTo(1);
} finally {
ksession.dispose();
}
}
private KieBuilder build(final String replacement) {
final String drl = String.format(genericDrl, replacement);
final Resource resource = KieServices.Factory.get().getResources().newReaderResource(new StringReader(drl));
resource.setTargetPath(TestConstants.DRL_TEST_TARGET_PATH);
return KieUtil.getKieBuilderFromResources(false, resource);
}
}