blob: 21f86aa04bfe9a956e1c7e13b9a852f03f3536f2 [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
******************************************************************************/
package org.eclipse.rmf.reqif10.search.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.eclipse.rmf.reqif10.AttributeDefinition;
import org.eclipse.rmf.reqif10.ReqIF10Factory;
import org.eclipse.rmf.reqif10.SpecElementWithAttributes;
import org.eclipse.rmf.reqif10.SpecObject;
import org.eclipse.rmf.reqif10.SpecObjectType;
import org.eclipse.rmf.reqif10.pror.testframework.AbstractItemProviderTest;
import org.eclipse.rmf.reqif10.search.filter.ReqIFFullFilter;
import org.eclipse.rmf.reqif10.search.filter.ReqIFFullFilter.Operator;
import org.junit.Test;
public abstract class AbstractFilterTest extends AbstractItemProviderTest {
static Map<Operator, Integer> operatorCounts = new HashMap<Operator, Integer>();
/**
* The fixture for this Identifiable test case.
*/
protected SpecElementWithAttributes fixture = null;
/**
* Sets the fixture for this Identifiable test case.
*/
protected void setFixture(SpecElementWithAttributes fixture) {
this.fixture = fixture;
}
/**
* Returns the fixture for this Identifiable test case.
*/
protected SpecElementWithAttributes getFixture() {
return fixture;
}
/**
* runs the filters matcher against the fixture
* @param filter
* @param expected
*/
public void doMatch(ReqIFFullFilter filter, boolean expected){
Integer c = operatorCounts.get(filter.getOperator());
c = (c == null ? 1 : ++c);
operatorCounts.put(filter.getOperator(), c);
System.out.println(filter.toString());
assertEquals(expected, filter.match(getFixture()));
}
@Test
public void testExceptionsUnsupportedOperation() throws Exception {
if (getSupportedOperators() == null)
fail("getSupportedOperators returned null");
for (Operator operator : Operator.values()) {
if (getSupportedOperators().contains(operator)){
continue;
}
Exception exception = null;
try{
createFilterInstance(operator);
}catch (Exception e){
exception = e;
}
assertTrue(operator.toString() + " should not be supported", exception != null);
assertTrue(exception instanceof IllegalArgumentException);
assertTrue(exception.getMessage().contains(operator.toString()));
}
}
public abstract Set<Operator> getSupportedOperators();
public abstract ReqIFFullFilter createFilterInstance(Operator operator);
@Test
public void testOnEmptyAttribute() throws Exception {
getFixture().getValues().clear();
doEmptyTest();
}
@Test
public void testOnNullValue() throws Exception {
createFixture(null);
doEmptyTest();
}
/**
* this test defines a filters behavior if a match is run against an empty value
*
* it will be called two times:
* on a specObject in which the attribute is not set at all
* on a specObject in which the attribute is set, but theValue is null
*
* @throws Exception
*/
public abstract void doEmptyTest() throws Exception;
public abstract void createFixture(Object object);
/**
* create a specObjectType, adds the give attributeDefinition and sets it as the type of the specObject
*
* @param specObject
*/
protected void createSpecObjectType(SpecObject specObject, AttributeDefinition attributeDefinition){
SpecObjectType specObjectType = ReqIF10Factory.eINSTANCE.createSpecObjectType();
specObjectType.getSpecAttributes().add(attributeDefinition);
specObject.setType(specObjectType);
}
}