blob: 0711161e85d07ab84a50bf153733ea1686dc5853 [file] [log] [blame]
/**
*
*/
package org.eclipse.rmf.reqif10.search.serialization;
import static org.junit.Assert.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashSet;
import org.eclipse.rmf.reqif10.AttributeDefinitionBoolean;
import org.eclipse.rmf.reqif10.AttributeDefinitionDate;
import org.eclipse.rmf.reqif10.AttributeDefinitionEnumeration;
import org.eclipse.rmf.reqif10.AttributeDefinitionInteger;
import org.eclipse.rmf.reqif10.AttributeDefinitionReal;
import org.eclipse.rmf.reqif10.AttributeDefinitionString;
import org.eclipse.rmf.reqif10.AttributeDefinitionXHTML;
import org.eclipse.rmf.reqif10.DatatypeDefinitionEnumeration;
import org.eclipse.rmf.reqif10.EnumValue;
import org.eclipse.rmf.reqif10.ReqIF;
import org.eclipse.rmf.reqif10.ReqIF10Factory;
import org.eclipse.rmf.reqif10.ReqIFContent;
import org.eclipse.rmf.reqif10.SpecType;
import org.eclipse.rmf.reqif10.search.filter.AbstractTextFilter;
import org.eclipse.rmf.reqif10.search.filter.BoolFilter;
import org.eclipse.rmf.reqif10.search.filter.DateFilter;
import org.eclipse.rmf.reqif10.search.filter.EnumFilter;
import org.eclipse.rmf.reqif10.search.filter.FilterContext;
import org.eclipse.rmf.reqif10.search.filter.NumberFilter;
import org.eclipse.rmf.reqif10.search.filter.ReqIFFullFilter;
import org.eclipse.rmf.reqif10.search.filter.SimpleCompoundFilter;
import org.eclipse.rmf.reqif10.search.filter.StringFilter;
import org.eclipse.rmf.reqif10.search.filter.XhtmlFilter;
import org.junit.Before;
import org.junit.Test;
/**
* Tests the serialization, which is required for the named filters.
*
* @author jastram
*/
public class SerializationTest {
private AttributeDefinitionString adString;
private AttributeDefinitionBoolean adBool;
private AttributeDefinitionEnumeration adEnum;
private EnumValue enumValue;
private AttributeDefinitionInteger adInt;
private AttributeDefinitionXHTML adXhtml;
private AttributeDefinitionDate adDate;
private AttributeDefinitionReal adReal;
private byte[] serializeObject(Object obj) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
baos.close();
return baos.toByteArray();
}
private Object deserialize(byte[] bytes) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
Object obj = ois.readObject();
ois.close();
bais.close();
return obj;
}
@Before
public void setupMockReqIF() {
ReqIF reqif = ReqIF10Factory.eINSTANCE.createReqIF();
ReqIFContent content = ReqIF10Factory.eINSTANCE.createReqIFContent();
reqif.setCoreContent(content);
SpecType specType = ReqIF10Factory.eINSTANCE.createSpecObjectType();
content.getSpecTypes().add(specType);
adString = ReqIF10Factory.eINSTANCE.createAttributeDefinitionString();
adString.setIdentifier("ads");
specType.getSpecAttributes().add(adString);
adXhtml = ReqIF10Factory.eINSTANCE.createAttributeDefinitionXHTML();
adXhtml.setIdentifier("adx");
specType.getSpecAttributes().add(adXhtml);
adBool = ReqIF10Factory.eINSTANCE.createAttributeDefinitionBoolean();
adBool.setIdentifier("adb");
specType.getSpecAttributes().add(adBool);
adInt = ReqIF10Factory.eINSTANCE.createAttributeDefinitionInteger();
adInt.setIdentifier("adi");
specType.getSpecAttributes().add(adInt);
adReal = ReqIF10Factory.eINSTANCE.createAttributeDefinitionReal();
adReal.setIdentifier("adr");
specType.getSpecAttributes().add(adReal);
adDate = ReqIF10Factory.eINSTANCE.createAttributeDefinitionDate();
adDate.setIdentifier("add");
specType.getSpecAttributes().add(adDate);
adEnum = ReqIF10Factory.eINSTANCE.createAttributeDefinitionEnumeration();
adEnum.setIdentifier("ade");
DatatypeDefinitionEnumeration ddEnum = ReqIF10Factory.eINSTANCE.createDatatypeDefinitionEnumeration();
adEnum.setType(ddEnum);
enumValue = ReqIF10Factory.eINSTANCE.createEnumValue();
enumValue.setIdentifier("enumValue");
ddEnum.getSpecifiedValues().add(enumValue);
specType.getSpecAttributes().add(adEnum);
FilterContext.REQIF = reqif;
}
/**
* Tests the String Filter persistence with an Internal Attribute
*/
@Test
public void testStringFilterInternal() throws Exception {
StringFilter sf1 = new StringFilter(ReqIFFullFilter.Operator.CONTAINS, "test", AbstractTextFilter.InternalAttribute.DESC,
true);
Object obj = deserialize(serializeObject(sf1));
assertTrue(obj instanceof StringFilter);
StringFilter sf2 = (StringFilter)obj;
assertEquals(sf1.getFilterValue1(), sf2.getFilterValue1());
assertEquals(sf1.isCaseSensitive(), sf2.isCaseSensitive());
assertEquals(sf1.getOperator(), sf2.getOperator());
assertEquals(sf1.getAttribute(), sf2.getAttribute());
}
@Test
public void testStringFilter() throws Exception {
StringFilter sf1 = new StringFilter(ReqIFFullFilter.Operator.CONTAINS, "test", adString,
true);
Object obj = deserialize(serializeObject(sf1));
assertTrue(obj instanceof StringFilter);
StringFilter sf2 = (StringFilter)obj;
assertEquals(sf1.getFilterValue1(), sf2.getFilterValue1());
assertEquals(sf1.isCaseSensitive(), sf2.isCaseSensitive());
assertEquals(sf1.getOperator(), sf2.getOperator());
assertEquals(sf1.getAttribute(), sf2.getAttribute());
}
@Test
public void testXhtmlFilter() throws Exception {
XhtmlFilter xf1 = new XhtmlFilter(ReqIFFullFilter.Operator.CONTAINS, "test", adXhtml,
true);
Object obj = deserialize(serializeObject(xf1));
assertTrue(obj instanceof XhtmlFilter);
XhtmlFilter xf2 = (XhtmlFilter)obj;
assertEquals(xf1.getFilterValue1(), xf2.getFilterValue1());
assertEquals(xf1.isCaseSensitive(), xf2.isCaseSensitive());
assertEquals(xf1.getOperator(), xf2.getOperator());
assertEquals(xf1.getAttribute(), xf2.getAttribute());
}
@Test
public void testSimpleCompoundFilter() throws Exception {
SimpleCompoundFilter cf1 = new SimpleCompoundFilter(new ArrayList<ReqIFFullFilter>(), true);
Object obj = deserialize(serializeObject(cf1));
assertTrue(obj instanceof SimpleCompoundFilter);
SimpleCompoundFilter cf2 = (SimpleCompoundFilter) obj;
assertEquals(cf1.isOrFilter(), cf2.isOrFilter());
}
@Test
public void testBooleanFilter() throws Exception {
BoolFilter sf1 = new BoolFilter(ReqIFFullFilter.Operator.IS, Boolean.TRUE, adBool);
Object obj = deserialize(serializeObject(sf1));
assertTrue(obj instanceof BoolFilter);
BoolFilter sf2 = (BoolFilter)obj;
assertEquals(sf1.getFilterValue1(), sf2.getFilterValue1());
assertEquals(sf1.getOperator(), sf2.getOperator());
assertEquals(sf1.getAttribute(), sf2.getAttribute());
}
@Test
public void testEnumFilter() throws Exception {
Collection<EnumValue> values = new HashSet<EnumValue>();
values.add(enumValue);
EnumFilter ef1 = new EnumFilter(ReqIFFullFilter.Operator.CONTAINS_ANY, values, adEnum);
Object obj = deserialize(serializeObject(ef1));
assertTrue(obj instanceof EnumFilter);
EnumFilter ef2 = (EnumFilter) obj;
assertEquals(ef1.getAttribute(), ef2.getAttribute());
assertEquals(ef1.getOperator(), ef2.getOperator());
assertEquals(ef1.getFilterValue1(), ef2.getFilterValue1());
}
@Test
public void testIntegerFilter() throws Exception {
NumberFilter nf1 = new NumberFilter(ReqIFFullFilter.Operator.BETWEEN, new BigInteger("1"),
new BigInteger("2"), adInt);
Object obj = deserialize(serializeObject(nf1));
assertTrue(obj instanceof NumberFilter);
NumberFilter nf2 = (NumberFilter)obj;
assertEquals(nf1.getFilterValue1(), nf2.getFilterValue1());
assertEquals(nf1.getFilterValue2(), nf2.getFilterValue2());
assertEquals(nf1.getOperator(), nf2.getOperator());
assertEquals(nf1.getAttribute(), nf2.getAttribute());
}
@Test
public void testDoubleFilter() throws Exception {
NumberFilter nf1 = new NumberFilter(ReqIFFullFilter.Operator.BETWEEN, new Double(10.5),
new Double("20.5"), adReal);
Object obj = deserialize(serializeObject(nf1));
assertTrue(obj instanceof NumberFilter);
NumberFilter nf2 = (NumberFilter)obj;
assertEquals(nf1.getFilterValue1(), nf2.getFilterValue1());
assertEquals(nf1.getFilterValue2(), nf2.getFilterValue2());
assertEquals(nf1.getOperator(), nf2.getOperator());
assertEquals(nf1.getAttribute(), nf2.getAttribute());
}
@Test
public void testDateFilter() throws Exception {
GregorianCalendar date1 = (GregorianCalendar) GregorianCalendar.getInstance();
date1.setTime(new Date(123456789));
GregorianCalendar date2 = (GregorianCalendar) GregorianCalendar.getInstance();
date2.setTime(new Date(234567890));
assertNotEquals(date1, date2);
DateFilter nf1 = new DateFilter(ReqIFFullFilter.Operator.BETWEEN, date1,
date2, adDate);
Object obj = deserialize(serializeObject(nf1));
assertTrue(obj instanceof DateFilter);
DateFilter nf2 = (DateFilter)obj;
assertEquals(nf1.getFilterValue1(), nf2.getFilterValue1());
assertEquals(nf1.getFilterValue2(), nf2.getFilterValue2());
assertEquals(nf1.getOperator(), nf2.getOperator());
assertEquals(nf1.getAttribute(), nf2.getAttribute());
}
@Test
public void testDateInternalFilter() throws Exception {
GregorianCalendar date1 = (GregorianCalendar) GregorianCalendar.getInstance();
date1.setTime(new Date(123456789));
GregorianCalendar date2 = (GregorianCalendar) GregorianCalendar.getInstance();
date2.setTime(new Date(234567890));
assertNotEquals(date1, date2);
DateFilter nf1 = new DateFilter(ReqIFFullFilter.Operator.BETWEEN, date1,
date2, DateFilter.InternalAttribute.LAST_CHANGE);
Object obj = deserialize(serializeObject(nf1));
assertTrue(obj instanceof DateFilter);
DateFilter nf2 = (DateFilter)obj;
assertEquals(nf1.getFilterValue1(), nf2.getFilterValue1());
assertEquals(nf1.getFilterValue2(), nf2.getFilterValue2());
assertEquals(nf1.getOperator(), nf2.getOperator());
assertEquals(nf1.getAttribute(), nf2.getAttribute());
}
}