blob: 0e54fdb552f33cf044a96b44eb40fe263483db37 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Formal Mind GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Ingo Weigelt - initial API and implementation
* Michael Jastram - adding SUPPORTED_OPERATIONS
******************************************************************************/
package org.eclipse.rmf.reqif10.search.test;
import java.util.GregorianCalendar;
import java.util.Set;
import java.util.TimeZone;
import org.eclipse.rmf.reqif10.AttributeDefinitionDate;
import org.eclipse.rmf.reqif10.AttributeValueDate;
import org.eclipse.rmf.reqif10.DatatypeDefinitionDate;
import org.eclipse.rmf.reqif10.ReqIF10Factory;
import org.eclipse.rmf.reqif10.SpecObject;
import org.eclipse.rmf.reqif10.search.filter.DateFilter;
import org.eclipse.rmf.reqif10.search.filter.DateFilter.InternalAttribute;
import org.eclipse.rmf.reqif10.search.filter.IFilter;
import org.eclipse.rmf.reqif10.search.filter.IFilter.Operator;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
public class DateFilterTest extends AbstractFilterTest{
SpecObject specObject;
AttributeDefinitionDate attributeDefinition;
@Rule public ExpectedException thrown= ExpectedException.none();
@Override
public void createFixture(Object value){
GregorianCalendar theValue = (GregorianCalendar) value;
attributeDefinition = ReqIF10Factory.eINSTANCE.createAttributeDefinitionDate();
attributeDefinition.setIdentifier("AD_ID0");
DatatypeDefinitionDate definition = ReqIF10Factory.eINSTANCE.createDatatypeDefinitionDate();
definition.setIdentifier("DD_ID0");
attributeDefinition.setType(definition);
AttributeValueDate attributeValue = ReqIF10Factory.eINSTANCE.createAttributeValueDate();
attributeValue.setDefinition(attributeDefinition);
attributeValue.setTheValue(theValue);
SpecObject specObject = ReqIF10Factory.eINSTANCE.createSpecObject();
specObject.getValues().add(attributeValue);
specObject.setLastChange(new GregorianCalendar(2014, 11, 03, 12, 0, 0));
createSpecObjectType(specObject, attributeDefinition);
setFixture(specObject);
}
@Before
public void setUp(){
createFixture(new GregorianCalendar(2014, 11, 03));
}
@Test
public void testIs() throws Exception {
DateFilter filter;
filter = new DateFilter(IFilter.Operator.IS, new GregorianCalendar(2014, 11, 03), null, attributeDefinition);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.IS, new GregorianCalendar(2014, 11, 04), null, attributeDefinition);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.IS, new GregorianCalendar(2014,11,03,0,0,0), null, attributeDefinition);
doMatch(filter, true);
// we do the match on date only, the time of the day should be ignored
createFixture(new GregorianCalendar(2014, 11, 03, 13, 14, 15));
filter = new DateFilter(IFilter.Operator.IS, new GregorianCalendar(2014,11,03), null, attributeDefinition);
doMatch(filter, true);
// for is and is_not operator the time of the day is ignored
filter = new DateFilter(IFilter.Operator.IS, new GregorianCalendar(2014,11,03,20,0,0), null, attributeDefinition);
doMatch(filter, true);
// match two different representations of the same point in time (i.e. different time zones)
GregorianCalendar fixtureDate = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
fixtureDate.set(2014, 11, 3, 23, 0, 0);
GregorianCalendar filterDate = new GregorianCalendar(TimeZone.getTimeZone("GMT+9"));
filterDate.set(2014, 11, 4, 8, 0, 0);
//System.out.println((filterDate.getTimeInMillis() - fixtureDate.getTimeInMillis()) / 1000 / 60 / 60);
createFixture(fixtureDate);
filter = new DateFilter(IFilter.Operator.IS, filterDate, null, attributeDefinition);
doMatch(filter, true);
}
@Test
public void testIsOnInternal() throws Exception {
DateFilter filter;
filter = new DateFilter(IFilter.Operator.IS, new GregorianCalendar(2014, 11, 03), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.IS, new GregorianCalendar(2014, 11, 04), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.IS, new GregorianCalendar(2014,11,03,0,0,0), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
}
@Test
public void testIsNot() throws Exception {
DateFilter filter;
filter = new DateFilter(IFilter.Operator.IS_NOT, new GregorianCalendar(2014, 11, 04), null, attributeDefinition);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.IS_NOT, new GregorianCalendar(2014, 11, 03), null, attributeDefinition);
doMatch(filter, false);
}
@Test
public void testIsNotOnInternal() throws Exception {
DateFilter filter;
filter = new DateFilter(IFilter.Operator.IS_NOT, new GregorianCalendar(2014, 11, 04), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.IS_NOT, new GregorianCalendar(2014, 11, 03), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
}
@Test
public void testBetween() throws Exception {
DateFilter filter;
filter = new DateFilter(IFilter.Operator.BETWEEN, new GregorianCalendar(2014, 11, 01), new GregorianCalendar(2014, 11, 04), attributeDefinition);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BETWEEN, new GregorianCalendar(2014, 11, 04), new GregorianCalendar(2014, 11, 01), attributeDefinition);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BETWEEN, new GregorianCalendar(2014, 11, 03), new GregorianCalendar(2014, 11, 03), attributeDefinition);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BETWEEN, new GregorianCalendar(2014, 11, 01), new GregorianCalendar(2014, 11, 03), attributeDefinition);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BETWEEN, new GregorianCalendar(2014, 11, 03), new GregorianCalendar(2014, 11, 06), attributeDefinition);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BETWEEN, new GregorianCalendar(2014, 01, 01), new GregorianCalendar(2014, 11, 01), attributeDefinition);
doMatch(filter, false);
}
@Test
public void testBetweenOnInternal() throws Exception {
DateFilter filter;
filter = new DateFilter(IFilter.Operator.BETWEEN, new GregorianCalendar(2014, 11, 01), new GregorianCalendar(2014, 11, 04), DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BETWEEN, new GregorianCalendar(2014, 11, 03), new GregorianCalendar(2014, 11, 03), DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BETWEEN, new GregorianCalendar(2014, 01, 01), new GregorianCalendar(2014, 11, 01), DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
}
@Test
public void testBefore() throws Exception {
DateFilter filter;
filter = new DateFilter(IFilter.Operator.BEFORE, new GregorianCalendar(2015, 1, 1), new GregorianCalendar(2014, 11, 04), attributeDefinition);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BEFORE, new GregorianCalendar(2014, 11, 3), null, attributeDefinition);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.BEFORE, new GregorianCalendar(2014, 1, 1), null, attributeDefinition);
doMatch(filter, false);
}
@Test
public void testBeforeOnInternal(){
DateFilter filter;
filter = new DateFilter(IFilter.Operator.BEFORE, new GregorianCalendar(2015, 1, 1), new GregorianCalendar(2014, 11, 04), DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BEFORE, new GregorianCalendar(2014, 11, 3), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.BEFORE, new GregorianCalendar(2014, 1, 1), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
}
@Test
public void testAfter() throws Exception {
DateFilter filter;
filter = new DateFilter(IFilter.Operator.AFTER, new GregorianCalendar(2000, 1, 1), null, attributeDefinition);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.AFTER, new GregorianCalendar(3000, 1, 1), null, attributeDefinition);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.AFTER, new GregorianCalendar(2014, 11, 03), null, attributeDefinition);
doMatch(filter, false);
}
@Test
public void testAfterOnInternal() throws Exception {
DateFilter filter;
filter = new DateFilter(IFilter.Operator.AFTER, new GregorianCalendar(2000, 1, 1), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.AFTER, new GregorianCalendar(3000, 1, 1), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.AFTER, new GregorianCalendar(2014, 11, 02), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.AFTER, new GregorianCalendar(2014, 11, 03, 0, 0, 0), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.AFTER, new GregorianCalendar(2014, 11, 03), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.AFTER, new GregorianCalendar(2014, 11, 03, 12, 0, 0), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
}
public void doEmptyTest(){
DateFilter filter;
filter = new DateFilter(IFilter.Operator.IS, new GregorianCalendar(2014, 1, 1), null, attributeDefinition);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.IS_NOT, new GregorianCalendar(2014, 1, 1), null, attributeDefinition);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BETWEEN, new GregorianCalendar(2014, 1, 1), new GregorianCalendar(2014, 1, 1), attributeDefinition);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.BEFORE, new GregorianCalendar(2014, 1, 1), null, attributeDefinition);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.AFTER, new GregorianCalendar(2000, 1, 1), null, attributeDefinition);
doMatch(filter, false);
}
@Test
public void testInternalAttributes() throws Exception {
DateFilter filter;
filter = new DateFilter(IFilter.Operator.IS, new GregorianCalendar(
2014, 11, 3), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.IS, new GregorianCalendar(
2014, 11, 3, 17, 0, 0), null,
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.IS, new GregorianCalendar(
2014, 11, 4), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.IS_NOT, new GregorianCalendar(
2014, 11, 4), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.IS_NOT,
new GregorianCalendar(2014, 11, 3, 23, 59, 59),
null,
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.BETWEEN,
new GregorianCalendar(2014, 11, 3, 23, 59, 59),
new GregorianCalendar(2014, 11, 3, 23, 59, 59),
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.BETWEEN,
new GregorianCalendar(2014, 11, 3, 0, 0, 0),
new GregorianCalendar(2014, 11, 3, 23, 59, 59),
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BETWEEN,
new GregorianCalendar(2014, 11, 3, 12, 0, 0),
new GregorianCalendar(2014, 11, 3, 23, 59, 59),
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BETWEEN,
new GregorianCalendar(2014, 11, 3, 0, 0, 0),
new GregorianCalendar(2014, 11, 3, 12, 0, 0),
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BEFORE,
new GregorianCalendar(2014, 11, 3, 23, 59, 59),
null,
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BEFORE,
new GregorianCalendar(2014, 11, 3, 12, 0, 0),
null,
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.BEFORE,
new GregorianCalendar(2014, 11, 4),
null,
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.BEFORE,
new GregorianCalendar(2014, 11, 3),
null,
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.AFTER,
new GregorianCalendar(2014, 11, 3),
null,
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(IFilter.Operator.AFTER,
new GregorianCalendar(2014, 11, 3, 12, 0, 0),
null,
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
filter = new DateFilter(IFilter.Operator.AFTER,
new GregorianCalendar(2014, 11, 5),
null,
DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
}
@Test
public void testIsSet() throws Exception {
DateFilter filter;
filter = new DateFilter(IFilter.Operator.IS_SET, new GregorianCalendar(2014, 1, 1), null, attributeDefinition);
doMatch(filter, true);
AttributeDefinitionDate attributeDefinition2 = ReqIF10Factory.eINSTANCE.createAttributeDefinitionDate();
attributeDefinition2.setIdentifier("AD_ID1");
filter = new DateFilter(IFilter.Operator.IS_SET, new GregorianCalendar(2014, 1, 1), null, attributeDefinition2);
doMatch(filter, false);
}
@Test
public void testIsNotSet() throws Exception {
DateFilter filter;
filter = new DateFilter(IFilter.Operator.IS_NOT_SET, new GregorianCalendar(2014, 1, 1), null, attributeDefinition);
doMatch(filter, false);
AttributeDefinitionDate attributeDefinition2 = ReqIF10Factory.eINSTANCE.createAttributeDefinitionDate();
attributeDefinition2.setIdentifier("AD_ID1");
filter = new DateFilter(IFilter.Operator.IS_NOT_SET, new GregorianCalendar(2014, 1, 1), null, attributeDefinition2);
doMatch(filter, false);
}
@Test
public void testIsSetInternal() throws Exception {
DateFilter filter;
filter = new DateFilter(Operator.IS_SET, new GregorianCalendar(2014, 1, 1), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
filter = new DateFilter(Operator.IS_SET, null, null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
getFixture().setLastChange(null);
filter = new DateFilter(Operator.IS_SET, null, null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
}
@Test
public void testIsNotSetInternal() throws Exception {
DateFilter filter;
filter = new DateFilter(Operator.IS_NOT_SET, new GregorianCalendar(2014, 1, 1), null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
filter = new DateFilter(Operator.IS_NOT_SET, null, null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, false);
getFixture().setLastChange(null);
filter = new DateFilter(Operator.IS_NOT_SET, null, null, DateFilter.InternalAttribute.LAST_CHANGE);
doMatch(filter, true);
}
@Test
public void testExceptionsAttributeDefinition() throws Exception {
thrown.expect(IllegalArgumentException.class);
new DateFilter(IFilter.Operator.BEFORE, new GregorianCalendar(2014, 1, 1), null, (AttributeDefinitionDate) null);
}
@Test
public void testExceptionsInternalAttribute() throws Exception {
thrown.expect(IllegalArgumentException.class);
new DateFilter(IFilter.Operator.BEFORE, new GregorianCalendar(2014, 1, 1), null, (InternalAttribute) null);
}
@Override
public DateFilter createFilterInstance(Operator operator) {
return new DateFilter(operator, new GregorianCalendar(2014, 1, 1), null, attributeDefinition);
}
@Override
public Set<Operator> getSupportedOperators() {
return DateFilter.SUPPORTED_OPERATORS;
}
}