/******************************************************************************* * 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; } }