/******************************************************************************* * 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 ******************************************************************************/ package org.eclipse.rmf.reqif10.search.test; import java.math.BigInteger; import java.util.Collection; import java.util.LinkedList; import java.util.Set; import org.eclipse.rmf.reqif10.AttributeDefinitionEnumeration; import org.eclipse.rmf.reqif10.AttributeValueEnumeration; import org.eclipse.rmf.reqif10.DatatypeDefinitionEnumeration; import org.eclipse.rmf.reqif10.EmbeddedValue; import org.eclipse.rmf.reqif10.EnumValue; import org.eclipse.rmf.reqif10.ReqIF10Factory; import org.eclipse.rmf.reqif10.SpecObject; import org.eclipse.rmf.reqif10.search.filter.EnumFilter; import org.eclipse.rmf.reqif10.search.filter.IFilter; import org.eclipse.rmf.reqif10.search.filter.IFilter.Operator; import org.junit.Before; import org.junit.Test; public class EnumFilterTest extends AbstractFilterTest{ AttributeDefinitionEnumeration attributeDefinition; LinkedList<EnumValue> specifiedValues; @Before public void setUp(){ specifiedValues = new LinkedList<EnumValue>(); specifiedValues.add(createEnumValue(1)); specifiedValues.add(createEnumValue(2)); specifiedValues.add(createEnumValue(3)); createFixture(specifiedValues); } @Test public void testEquals() throws Exception { EnumFilter filter; LinkedList<EnumValue> testValues = new LinkedList<EnumValue>(); testValues.addAll(specifiedValues); createFixture(testValues); filter = new EnumFilter(Operator.EQUALS, specifiedValues, attributeDefinition); doMatch(filter, true); testValues.clear(); testValues.add(specifiedValues.get(2)); testValues.add(specifiedValues.get(0)); testValues.add(specifiedValues.get(1)); createFixture(testValues); filter = new EnumFilter(Operator.EQUALS, specifiedValues, attributeDefinition); doMatch(filter, true); testValues.removeFirst(); createFixture(testValues); filter = new EnumFilter(Operator.EQUALS, specifiedValues, attributeDefinition); doMatch(filter, false); createFixture(specifiedValues); filter = new EnumFilter(Operator.EQUALS, testValues, attributeDefinition); doMatch(filter, false); testValues.clear(); testValues.addAll(specifiedValues); testValues.addAll(specifiedValues); createFixture(specifiedValues); filter = new EnumFilter(Operator.EQUALS, testValues, attributeDefinition); doMatch(filter, true); } @Test public void testNotEquals() throws Exception { EnumFilter filter; LinkedList<EnumValue> testValues = new LinkedList<EnumValue>(); testValues.addAll(specifiedValues); createFixture(testValues); filter = new EnumFilter(Operator.NOT_EQUALS, specifiedValues, attributeDefinition); doMatch(filter, false); testValues.removeFirst(); createFixture(testValues); filter = new EnumFilter(Operator.NOT_EQUALS, specifiedValues, attributeDefinition); doMatch(filter, true); createFixture(specifiedValues); filter = new EnumFilter(Operator.NOT_EQUALS, testValues, attributeDefinition); doMatch(filter, true); } @Test public void testContainsAll() throws Exception { EnumFilter filter; createFixture(specifiedValues); filter = new EnumFilter(Operator.CONTAINS_ALL, specifiedValues, attributeDefinition); doMatch(filter, true); createFixture(specifiedValues); LinkedList<EnumValue> testValues = new LinkedList<EnumValue>(); testValues.add(specifiedValues.get(0)); filter = new EnumFilter(Operator.CONTAINS_ALL, specifiedValues, attributeDefinition); doMatch(filter, true); testValues.add(specifiedValues.get(2)); filter = new EnumFilter(Operator.CONTAINS_ALL, specifiedValues, attributeDefinition); doMatch(filter, true); testValues.add(specifiedValues.get(1)); filter = new EnumFilter(Operator.CONTAINS_ALL, specifiedValues, attributeDefinition); doMatch(filter, true); testValues.clear(); testValues.add(specifiedValues.getFirst()); createFixture(testValues); filter = new EnumFilter(Operator.CONTAINS_ALL, specifiedValues, attributeDefinition); doMatch(filter, false); } @Test public void testContainsAny() throws Exception { EnumFilter filter; createFixture(specifiedValues); filter = new EnumFilter(Operator.CONTAINS_ANY, specifiedValues, attributeDefinition); doMatch(filter, true); LinkedList<EnumValue> testValues = new LinkedList<EnumValue>(); testValues.add(specifiedValues.get(1)); createFixture(testValues); filter = new EnumFilter(Operator.CONTAINS_ANY, specifiedValues, attributeDefinition); doMatch(filter, true); LinkedList<EnumValue> testValues2 = new LinkedList<EnumValue>(); testValues2.add(specifiedValues.get(0)); createFixture(testValues); filter = new EnumFilter(Operator.CONTAINS_ANY, testValues2, attributeDefinition); doMatch(filter, false); } @Test public void testIsSet() throws Exception { EnumFilter filter; filter = new EnumFilter(IFilter.Operator.IS_SET, specifiedValues, attributeDefinition); doMatch(filter, true); AttributeDefinitionEnumeration attributeDefinition2 = ReqIF10Factory.eINSTANCE.createAttributeDefinitionEnumeration(); attributeDefinition2.setIdentifier("AD_ID1"); filter = new EnumFilter(IFilter.Operator.IS_SET, specifiedValues, attributeDefinition2); doMatch(filter, false); } @Test public void testIsNotSet() throws Exception { EnumFilter filter; filter = new EnumFilter(IFilter.Operator.IS_NOT_SET, specifiedValues, attributeDefinition); doMatch(filter, false); AttributeDefinitionEnumeration attributeDefinition2 = ReqIF10Factory.eINSTANCE.createAttributeDefinitionEnumeration(); attributeDefinition2.setIdentifier("AD_ID1"); filter = new EnumFilter(IFilter.Operator.IS_NOT_SET, specifiedValues, attributeDefinition2); doMatch(filter, false); } @Override public void doEmptyTest() throws Exception { EnumFilter filter; LinkedList<EnumValue> emptyList = new LinkedList<EnumValue>(); filter = new EnumFilter(Operator.EQUALS, specifiedValues, attributeDefinition); doMatch(filter, false); filter = new EnumFilter(Operator.EQUALS, emptyList, attributeDefinition); doMatch(filter, true); filter = new EnumFilter(Operator.NOT_EQUALS, specifiedValues, attributeDefinition); doMatch(filter, true); filter = new EnumFilter(Operator.NOT_EQUALS, emptyList, attributeDefinition); doMatch(filter, false); filter = new EnumFilter(Operator.CONTAINS_ALL, specifiedValues, attributeDefinition); doMatch(filter, false); filter = new EnumFilter(Operator.CONTAINS_ALL, emptyList, attributeDefinition); doMatch(filter, true); filter = new EnumFilter(Operator.CONTAINS_ANY, specifiedValues, attributeDefinition); doMatch(filter, false); filter = new EnumFilter(Operator.CONTAINS_ANY, emptyList, attributeDefinition); doMatch(filter, true); } @Override public Set<Operator> getSupportedOperators() { return EnumFilter.SUPPORTED_OPERATORS; } @Override public IFilter createFilterInstance(Operator operator) { return new EnumFilter(operator, specifiedValues, attributeDefinition); } @SuppressWarnings("unchecked") @Override public void createFixture(Object values) { if (specifiedValues == null){ throw new NullPointerException(); } Collection<EnumValue> enumValues = null; if (values instanceof Collection<?>) { enumValues = (Collection<EnumValue>) values; }else if (values != null){ throw new IllegalArgumentException(); } attributeDefinition = ReqIF10Factory.eINSTANCE.createAttributeDefinitionEnumeration(); attributeDefinition.setIdentifier("AD_ID0"); DatatypeDefinitionEnumeration definition = ReqIF10Factory.eINSTANCE.createDatatypeDefinitionEnumeration(); definition.setIdentifier("DD_ID0"); definition.getSpecifiedValues().addAll(specifiedValues); attributeDefinition.setType(definition); AttributeValueEnumeration attributeValue = ReqIF10Factory.eINSTANCE.createAttributeValueEnumeration(); attributeValue.setDefinition(attributeDefinition); if (enumValues != null){ attributeValue.getValues().addAll(enumValues); } SpecObject specObject = ReqIF10Factory.eINSTANCE.createSpecObject(); specObject.getValues().add(attributeValue); createSpecObjectType(specObject, attributeDefinition); setFixture(specObject); } /* * Constructs an enumValue * * The id and embeddedValue is derived from the number parameter, hence only numbers should be given */ private EnumValue createEnumValue(Integer number){ EnumValue enumValue = ReqIF10Factory.eINSTANCE.createEnumValue(); enumValue.setIdentifier("ENUMVALUE_" + number); EmbeddedValue embeddedValue = ReqIF10Factory.eINSTANCE.createEmbeddedValue(); embeddedValue.setKey(new BigInteger(number.toString())); embeddedValue.setOtherContent(number.toString()); enumValue.setProperties(embeddedValue); return enumValue; } }