blob: d5d3dba9f69121d8fad483cb5e50653a2fe74d47 [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 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);
}
}