| /******************************************************************************* |
| * 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 static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.util.GregorianCalendar; |
| import java.util.Set; |
| |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.rmf.reqif10.AttributeDefinition; |
| import org.eclipse.rmf.reqif10.AttributeDefinitionString; |
| import org.eclipse.rmf.reqif10.AttributeValue; |
| import org.eclipse.rmf.reqif10.AttributeValueString; |
| import org.eclipse.rmf.reqif10.DatatypeDefinitionString; |
| import org.eclipse.rmf.reqif10.ReqIF; |
| import org.eclipse.rmf.reqif10.ReqIF10Factory; |
| import org.eclipse.rmf.reqif10.SpecElementWithAttributes; |
| import org.eclipse.rmf.reqif10.SpecObject; |
| import org.eclipse.rmf.reqif10.common.util.ReqIF10Util; |
| import org.eclipse.rmf.reqif10.search.filter.AbstractTextFilter; |
| import org.eclipse.rmf.reqif10.search.filter.AbstractTextFilter.InternalAttribute; |
| import org.eclipse.rmf.reqif10.search.filter.IFilter; |
| import org.eclipse.rmf.reqif10.search.filter.IFilter.Operator; |
| import org.eclipse.rmf.reqif10.search.filter.StringFilter; |
| import org.eclipse.rmf.reqif10.search.testdata.TestData; |
| import org.junit.Before; |
| import org.junit.Rule; |
| import org.junit.Test; |
| import org.junit.rules.ExpectedException; |
| |
| public class StringFilterTest extends AbstractFilterTest{ |
| |
| AttributeDefinitionString attributeDefinition; |
| |
| @Rule public ExpectedException thrown= ExpectedException.none(); |
| |
| @Before |
| public void setUp(){ |
| createFixture("abcDEF"); |
| } |
| |
| |
| @Test |
| public void testEquals() throws Exception { |
| StringFilter filter; |
| |
| filter = new StringFilter(IFilter.Operator.EQUALS, "abcDEF", attributeDefinition, true); |
| doMatch(filter, true); |
| |
| filter = new StringFilter(IFilter.Operator.EQUALS, "abcDEF", attributeDefinition, false); |
| doMatch(filter, true); |
| |
| filter = new StringFilter(IFilter.Operator.EQUALS, "abcdef", attributeDefinition, true); |
| doMatch(filter, false); |
| |
| filter = new StringFilter(IFilter.Operator.EQUALS, "abcdef", attributeDefinition, false); |
| doMatch(filter, true); |
| |
| filter = new StringFilter(IFilter.Operator.EQUALS, "abc", attributeDefinition, false); |
| doMatch(filter, false); |
| |
| filter = new StringFilter(IFilter.Operator.EQUALS, "abc", attributeDefinition, true); |
| doMatch(filter, false); |
| } |
| |
| |
| @Test |
| public void testNotEquals() throws Exception { |
| StringFilter filter; |
| |
| filter = new StringFilter(IFilter.Operator.NOT_EQUALS, "X", attributeDefinition, true); |
| doMatch(filter, true); |
| |
| filter = new StringFilter(IFilter.Operator.NOT_EQUALS, "abcdef", attributeDefinition, true); |
| doMatch(filter, true); |
| |
| filter = new StringFilter(IFilter.Operator.NOT_EQUALS, "abcdef", attributeDefinition, false); |
| doMatch(filter, false); |
| |
| filter = new StringFilter(IFilter.Operator.NOT_EQUALS, "abcDEF", attributeDefinition, true); |
| doMatch(filter, false); |
| } |
| |
| |
| @Test |
| public void testContains() throws Exception { |
| StringFilter filter; |
| |
| filter = new StringFilter(IFilter.Operator.CONTAINS, "A", attributeDefinition, false); |
| doMatch(filter, true); |
| filter = new StringFilter(IFilter.Operator.CONTAINS, "A", attributeDefinition, true); |
| doMatch(filter, false); |
| filter = new StringFilter(IFilter.Operator.CONTAINS, "nonexisting substring", attributeDefinition, true); |
| doMatch(filter, false); |
| filter = new StringFilter(IFilter.Operator.CONTAINS, "nonexisting substring", attributeDefinition, false); |
| doMatch(filter, false); |
| filter = new StringFilter(IFilter.Operator.CONTAINS, "abcDEF", attributeDefinition, true); |
| doMatch(filter, true); |
| filter = new StringFilter(IFilter.Operator.CONTAINS, "abcDEF", attributeDefinition, false); |
| doMatch(filter, true); |
| } |
| |
| |
| @Test |
| public void testNotContains() throws Exception { |
| StringFilter filter; |
| |
| filter = new StringFilter(IFilter.Operator.NOT_CONTAINS, "A", attributeDefinition, false); |
| doMatch(filter, false); |
| filter = new StringFilter(IFilter.Operator.NOT_CONTAINS, "A", attributeDefinition, true); |
| doMatch(filter, true); |
| filter = new StringFilter(IFilter.Operator.NOT_CONTAINS, "nonexisting substring", attributeDefinition, true); |
| doMatch(filter, true); |
| filter = new StringFilter(IFilter.Operator.NOT_CONTAINS, "nonexisting substring", attributeDefinition, false); |
| doMatch(filter, true); |
| filter = new StringFilter(IFilter.Operator.NOT_CONTAINS, "abcDEF", attributeDefinition, true); |
| doMatch(filter, false); |
| filter = new StringFilter(IFilter.Operator.NOT_CONTAINS, "abcDEF", attributeDefinition, false); |
| doMatch(filter, false); |
| } |
| |
| @Test |
| public void testRegExp() throws Exception { |
| StringFilter filter; |
| |
| filter= new StringFilter(IFilter.Operator.REGEXP, ".*b.*", attributeDefinition, true); |
| doMatch(filter, true); |
| |
| filter= new StringFilter(IFilter.Operator.REGEXP, ".*b.*", attributeDefinition, false); |
| doMatch(filter, true); |
| |
| filter= new StringFilter(IFilter.Operator.REGEXP, ".*ABC.*", attributeDefinition, true); |
| doMatch(filter, false); |
| |
| filter= new StringFilter(IFilter.Operator.REGEXP, ".*ABC.*", attributeDefinition, false); |
| doMatch(filter, true); |
| |
| } |
| |
| |
| @Override |
| public void doEmptyTest(){ |
| StringFilter filter; |
| |
| filter = new StringFilter(IFilter.Operator.EQUALS, "abcdef", attributeDefinition, false); |
| doMatch(filter, false); |
| |
| // A missing AD should always yield false for equals |
| filter = new StringFilter(IFilter.Operator.EQUALS, "", attributeDefinition, false); |
| doMatch(filter, false); |
| |
| // A missing AD should always yield true for not_equals |
| filter = new StringFilter(IFilter.Operator.NOT_EQUALS, "", attributeDefinition, false); |
| doMatch(filter, true); |
| |
| // A missing AD should always yield false for contains |
| filter = new StringFilter(IFilter.Operator.CONTAINS, "", attributeDefinition, false); |
| doMatch(filter, false); |
| |
| // A missing AD should always yield true for not_contains |
| filter = new StringFilter(IFilter.Operator.NOT_CONTAINS, "", attributeDefinition, false); |
| doMatch(filter, true); |
| |
| // apply Regexp to empty string |
| filter = new StringFilter(IFilter.Operator.REGEXP, "", attributeDefinition, false); |
| doMatch(filter, true); |
| |
| filter = new StringFilter(IFilter.Operator.REGEXP, ".*", attributeDefinition, false); |
| doMatch(filter, true); |
| |
| filter = new StringFilter(IFilter.Operator.REGEXP, ".+", attributeDefinition, false); |
| doMatch(filter, false); |
| } |
| |
| |
| @Test |
| public void testExceptionsAttributeDefinition() throws Exception { |
| thrown.expect(IllegalArgumentException.class); |
| new StringFilter(IFilter.Operator.EQUALS, "abcdef", (AttributeDefinitionString) null, false); |
| } |
| |
| @Test |
| public void testExceptionsInternalAttribute() throws Exception { |
| thrown.expect(IllegalArgumentException.class); |
| new StringFilter(IFilter.Operator.EQUALS, "abcdef", (InternalAttribute) null, false); |
| } |
| |
| |
| @Test |
| public void testDefaultString() throws Exception { |
| |
| URI uri = TestData.getURI("defaultValues.reqif"); |
| final Resource resource = editingDomain.getResourceSet().getResource(uri, true); |
| final ReqIF reqif = (ReqIF) resource.getContents().get(0); |
| SpecObject so0 = reqif.getCoreContent().getSpecObjects().get(0); |
| SpecObject so1 = reqif.getCoreContent().getSpecObjects().get(1); |
| |
| AttributeDefinitionString adString = null; |
| for (AttributeValue attributeValue : so0.getValues()) { |
| AttributeDefinition attributeDefinition = ReqIF10Util.getAttributeDefinition(attributeValue); |
| //System.out.println(attributeDefinition.getClass()); |
| if (attributeDefinition instanceof AttributeDefinitionString) { |
| adString = (AttributeDefinitionString) attributeDefinition; |
| } |
| } |
| |
| StringFilter stringFilter = new StringFilter(Operator.EQUALS, "the default description value", adString, true); |
| assertFalse(stringFilter.match(so0)); |
| assertTrue(stringFilter.match(so1)); |
| |
| } |
| |
| |
| @Test |
| public void testIsSet() throws Exception { |
| StringFilter filter; |
| |
| filter = new StringFilter(IFilter.Operator.IS_SET, null, attributeDefinition, false); |
| doMatch(filter, true); |
| |
| AttributeDefinitionString attributeDefinition2 = ReqIF10Factory.eINSTANCE.createAttributeDefinitionString(); |
| attributeDefinition2.setIdentifier("AD_ID1"); |
| |
| filter = new StringFilter(IFilter.Operator.IS_SET, null, attributeDefinition2, false); |
| doMatch(filter, false); |
| } |
| |
| |
| @Test |
| public void testIsNotSet() throws Exception { |
| StringFilter filter; |
| |
| filter = new StringFilter(IFilter.Operator.IS_NOT_SET, null, attributeDefinition, false); |
| doMatch(filter, false); |
| |
| AttributeDefinitionString attributeDefinition2 = ReqIF10Factory.eINSTANCE.createAttributeDefinitionString(); |
| attributeDefinition2.setIdentifier("AD_ID1"); |
| |
| filter = new StringFilter(IFilter.Operator.IS_NOT_SET, null, attributeDefinition2, false); |
| doMatch(filter, false); |
| } |
| |
| |
| @Test |
| public void isSetInternal() throws Exception { |
| StringFilter filter; |
| |
| filter = new StringFilter(IFilter.Operator.IS_SET, "", AbstractTextFilter.InternalAttribute.DESC, false); |
| doMatch(filter, true); |
| filter = new StringFilter(IFilter.Operator.IS_SET, "", AbstractTextFilter.InternalAttribute.IDENTIFIER, false); |
| doMatch(filter, true); |
| filter = new StringFilter(IFilter.Operator.IS_SET, "", AbstractTextFilter.InternalAttribute.LONG_NAME, false); |
| doMatch(filter, true); |
| |
| filter = new StringFilter(IFilter.Operator.IS_NOT_SET, "", AbstractTextFilter.InternalAttribute.DESC, false); |
| doMatch(filter, false); |
| filter = new StringFilter(IFilter.Operator.IS_NOT_SET, "", AbstractTextFilter.InternalAttribute.IDENTIFIER, false); |
| doMatch(filter, false); |
| filter = new StringFilter(IFilter.Operator.IS_NOT_SET, "", AbstractTextFilter.InternalAttribute.LONG_NAME, false); |
| doMatch(filter, false); |
| |
| SpecElementWithAttributes specObject = getFixture(); |
| specObject.setDesc(null); |
| specObject.setLongName(null); |
| specObject.setIdentifier(null); |
| |
| filter = new StringFilter(IFilter.Operator.IS_SET, "", AbstractTextFilter.InternalAttribute.DESC, false); |
| doMatch(filter, false); |
| filter = new StringFilter(IFilter.Operator.IS_SET, "", AbstractTextFilter.InternalAttribute.IDENTIFIER, false); |
| doMatch(filter, false); |
| filter = new StringFilter(IFilter.Operator.IS_SET, "", AbstractTextFilter.InternalAttribute.LONG_NAME, false); |
| doMatch(filter, false); |
| |
| filter = new StringFilter(IFilter.Operator.IS_NOT_SET, "", AbstractTextFilter.InternalAttribute.DESC, false); |
| doMatch(filter, true); |
| filter = new StringFilter(IFilter.Operator.IS_NOT_SET, "", AbstractTextFilter.InternalAttribute.IDENTIFIER, false); |
| doMatch(filter, true); |
| filter = new StringFilter(IFilter.Operator.IS_NOT_SET, "", AbstractTextFilter.InternalAttribute.LONG_NAME, false); |
| doMatch(filter, true); |
| } |
| |
| |
| @Override |
| public Set<Operator> getSupportedOperators() { |
| return StringFilter.SUPPORTED_OPERATORS; |
| } |
| |
| |
| @Override |
| public IFilter createFilterInstance(Operator operator) { |
| return new StringFilter(operator, "", attributeDefinition, true); |
| } |
| |
| |
| |
| |
| @Override |
| public void createFixture(Object value) { |
| String theValue = (String) value; |
| |
| attributeDefinition = ReqIF10Factory.eINSTANCE.createAttributeDefinitionString(); |
| attributeDefinition.setIdentifier("AD_ID0"); |
| DatatypeDefinitionString definition = ReqIF10Factory.eINSTANCE.createDatatypeDefinitionString(); |
| definition.setIdentifier("DD_ID0"); |
| attributeDefinition.setType(definition); |
| AttributeValueString attributeValue = ReqIF10Factory.eINSTANCE.createAttributeValueString(); |
| attributeValue.setDefinition(attributeDefinition); |
| attributeValue.setTheValue(theValue); |
| SpecObject specObject = ReqIF10Factory.eINSTANCE.createSpecObject(); |
| specObject.getValues().add(attributeValue); |
| specObject.setLastChange(new GregorianCalendar(2014, 12, 03)); |
| specObject.setIdentifier("THE_SPECOBJECT_ID"); |
| specObject.setDesc("THE_SPECOBJECT_DESC"); |
| specObject.setLongName("THE_SPECOBJECT_LONG_NAME"); |
| |
| createSpecObjectType(specObject, attributeDefinition); |
| |
| setFixture(specObject); |
| } |
| |
| } |