package nl.ipo.cds.etl.filtering;
import static nl.ipo.cds.etl.filtering.FilterExpressionFactory.attribute;
import static nl.ipo.cds.etl.filtering.FilterExpressionFactory.equal;
import static nl.ipo.cds.etl.filtering.FilterExpressionFactory.stringValue;
import static nl.ipo.cds.etl.filtering.FilterExpressionFactory.notNull;
import static org.junit.Assert.assertEquals;
import java.util.HashMap;
import nl.ipo.cds.domain.AttributeType;
import nl.ipo.cds.etl.CountingFeatureOutputStream;
import nl.ipo.cds.etl.Feature;
import nl.ipo.cds.etl.GenericFeature;
import org.deegree.filter.Filter;
import org.junit.Test;
public class FilteringFeatureFilterTest {
@Test
public void testPass () {
final CountingFeatureOutputStream<GenericFeature> output = new CountingFeatureOutputStream<GenericFeature> ();
final CountingFeatureOutputStream<Feature> errorOutput = new CountingFeatureOutputStream<Feature> ();
final GenericFeature feature = createFeature ("Hello, world!");
final DatasetFilterer filter = new DatasetFilterer (createFilter ());
filter.processFeature (feature, output, errorOutput);
assertEquals (1, output.getFeatureCount ());
assertEquals (0, errorOutput.getFeatureCount ());
}
@Test
public void testNotPass () {
final CountingFeatureOutputStream<GenericFeature> output = new CountingFeatureOutputStream<GenericFeature> ();
final CountingFeatureOutputStream<Feature> errorOutput = new CountingFeatureOutputStream<Feature> ();
final GenericFeature feature = createFeature ("not Hello, world!");
final DatasetFilterer filter = new DatasetFilterer (createFilter ());
filter.processFeature (feature, output, errorOutput);
assertEquals (0, output.getFeatureCount ());
assertEquals (0, errorOutput.getFeatureCount ());
}
@Test
public void testPassNotNull () {
final CountingFeatureOutputStream<GenericFeature> output = new CountingFeatureOutputStream<GenericFeature> ();
final CountingFeatureOutputStream<Feature> errorOutput = new CountingFeatureOutputStream<Feature> ();
final GenericFeature feature = createFeature ("Hello, world!");
final DatasetFilterer filter = new DatasetFilterer (createFilterNotNull ());
filter.processFeature (feature, output, errorOutput);
assertEquals (1, output.getFeatureCount ());
assertEquals (0, errorOutput.getFeatureCount ());
}
@Test
public void testNotPassNull () {
final CountingFeatureOutputStream<GenericFeature> output = new CountingFeatureOutputStream<GenericFeature> ();
final CountingFeatureOutputStream<Feature> errorOutput = new CountingFeatureOutputStream<Feature> ();
final GenericFeature feature = createFeature ("Hello, world!");
final DatasetFilterer filter = new DatasetFilterer (createFilterNull ());
filter.processFeature (feature, output, errorOutput);
assertEquals (0, output.getFeatureCount ());
assertEquals (0, errorOutput.getFeatureCount ());
}
private static GenericFeature createFeature (final String value) {
return new GenericFeature ("test-feature-id", new HashMap<String, Object> () {
private static final long serialVersionUID = -2323010554811941246L;
{
put ("a", value);
put ("b", null);
}
});
}
private static Filter createFilter () {
final FilterFactory factory = new FilterFactory (FilterFactoryTest.createFeatureType ());
return factory.createFilter (equal (attribute ("a", AttributeType.STRING), stringValue ("Hello, world!")));
}
private static Filter createFilterNotNull () {
final FilterFactory factory = new FilterFactory (FilterFactoryTest.createFeatureType ());
return factory.createFilter (notNull (attribute ("a", AttributeType.STRING)));
}
private static Filter createFilterNull () {
final FilterFactory factory = new FilterFactory (FilterFactoryTest.createFeatureType ());
return factory.createFilter (notNull (attribute ("b", AttributeType.STRING)));
}
}