/*
* 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.integrationtests;
import org.drools.compiler.Cheese;
import org.drools.compiler.CommonTestMethodBase;
import org.junit.Test;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieSession;
import org.kie.internal.utils.KieHelper;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
/**
* This is a sample class to launch a rule.
*/
public class DateComparisonTest extends CommonTestMethodBase {
@Test
public void testDateComparisonThan() throws Exception {
String str = "";
str += "package org.drools.compiler;\n";
str += "global java.util.List results;\n";
str += "rule \"test date greater than\"\n";
str += " when\n";
str += " $c : Cheese(type == \"Yesterday\")\n";
str += " Cheese(type == \"Tomorrow\", usedBy > ($c.usedBy))\n";
str += " then\n";
str += " results.add( \"test date greater than\" );\n";
str += "end\n";
str += "rule \"test date less than\"\n";
str += " when\n";
str += " $c : Cheese(type == \"Tomorrow\")\n";
str += " Cheese(type == \"Yesterday\", usedBy < ($c.usedBy));\n";
str += " then\n";
str += " results.add( \"test date less than\" );\n";
str += "end\n";
KieSession ksession = new KieHelper().addContent( str, ResourceType.DRL )
.build()
.newKieSession();
List<String> results = new ArrayList<String>();
ksession.setGlobal( "results",
results );
// go !
Cheese yesterday = new Cheese( "Yesterday" );
yesterday.setUsedBy( yesterday() );
Cheese tomorrow = new Cheese( "Tomorrow" );
tomorrow.setUsedBy( tomorrow() );
ksession.insert( yesterday );
ksession.insert( tomorrow );
ksession.fireAllRules();
assertEquals( 2,
results.size() );
assertTrue( results.contains( "test date greater than" ) );
assertTrue( results.contains( "test date less than" ) );
}
@Test
public void testDateComparisonAfter() throws Exception {
String str = "";
str += "package org.drools.compiler;\n";
str += "global java.util.List results;\n";
str += "rule \"test date greater than\"\n";
str += " when\n";
str += " $c : Cheese(type == \"Yesterday\")\n";
str += " Cheese(type == \"Tomorrow\", $c.usedBy before usedBy)\n";
str += " then\n";
str += " results.add( \"test date greater than\" );\n";
str += "end\n";
str += "rule \"test date less than\"\n";
str += " when\n";
str += " $c : Cheese(type == \"Tomorrow\")\n";
str += " Cheese(type == \"Yesterday\", $c.usedBy after usedBy);\n";
str += " then\n";
str += " results.add( \"test date less than\" );\n";
str += "end\n";
KieSession ksession = new KieHelper().addContent( str, ResourceType.DRL )
.build()
.newKieSession();
List<String> results = new ArrayList<String>();
ksession.setGlobal( "results",
results );
// go !
Cheese yesterday = new Cheese( "Yesterday" );
yesterday.setUsedBy( yesterday() );
Cheese tomorrow = new Cheese( "Tomorrow" );
tomorrow.setUsedBy( tomorrow() );
ksession.insert( yesterday );
ksession.insert( tomorrow );
ksession.fireAllRules();
assertEquals( 2,
results.size() );
assertTrue( results.contains( "test date greater than" ) );
assertTrue( results.contains( "test date less than" ) );
}
@Test
public void testDateComparisonAfterWithThisBinding() throws Exception {
String str = "";
str += "package org.drools.compiler;\n";
str += "global java.util.List results;\n";
str += "rule \"test date greater than\"\n";
str += " when\n";
str += " Cheese(type == \"Yesterday\", $c: this)\n";
str += " Cheese(type == \"Tomorrow\", $c.usedBy before usedBy)\n";
str += " then\n";
str += " results.add( \"test date greater than\" );\n";
str += "end\n";
str += "rule \"test date less than\"\n";
str += " when\n";
str += " Cheese(type == \"Tomorrow\", $c: this)\n";
str += " Cheese(type == \"Yesterday\", $c.usedBy after usedBy);\n";
str += " then\n";
str += " results.add( \"test date less than\" );\n";
str += "end\n";
KieSession ksession = new KieHelper().addContent( str, ResourceType.DRL )
.build()
.newKieSession();
List<String> results = new ArrayList<String>();
ksession.setGlobal( "results",
results );
// go !
Cheese yesterday = new Cheese( "Yesterday" );
yesterday.setUsedBy( yesterday() );
Cheese tomorrow = new Cheese( "Tomorrow" );
tomorrow.setUsedBy( tomorrow() );
ksession.insert( yesterday );
ksession.insert( tomorrow );
ksession.fireAllRules();
assertEquals( 2,
results.size() );
assertTrue( results.contains( "test date greater than" ) );
assertTrue( results.contains( "test date less than" ) );
}
private Date yesterday() {
Calendar c = new GregorianCalendar();
c.set( Calendar.DAY_OF_MONTH,
c.get( Calendar.DAY_OF_MONTH ) - 1 );
return c.getTime();
}
private Date tomorrow() {
Calendar c = new GregorianCalendar();
c.set( Calendar.DAY_OF_MONTH,
c.get( Calendar.DAY_OF_MONTH ) + 1 );
return c.getTime();
}
}