package de.westnordost.streetcomplete.data.osm.tql;
import junit.framework.TestCase;
import java.util.Arrays;
import java.util.Collections;
import de.westnordost.osmapi.map.data.Element;
import static org.mockito.Mockito.*;
public class TagFilterExpressionTest extends TestCase
{
// Tests for toOverpassQLString are in FiltersParserTest
private Element node = createElement(Element.Type.NODE);
private Element way = createElement(Element.Type.WAY);
private Element relation = createElement(Element.Type.RELATION);
public void testMatchesNodes()
{
TagFilterExpression expr = createMatchExpression(ElementsTypeFilter.NODES);
assertTrue(expr.matches(node));
assertFalse(expr.matches(way));
assertFalse(expr.matches(relation));
}
public void testMatchesWays()
{
TagFilterExpression expr = createMatchExpression(ElementsTypeFilter.WAYS);
assertFalse(expr.matches(node));
assertTrue(expr.matches(way));
assertFalse(expr.matches(relation));
}
public void testMatchesRelations()
{
TagFilterExpression expr = createMatchExpression(ElementsTypeFilter.RELATIONS);
assertFalse(expr.matches(node));
assertFalse(expr.matches(way));
assertTrue(expr.matches(relation));
}
public void testMatchesElements()
{
BooleanExpression booleanExpression = mock(BooleanExpression.class);
when(booleanExpression.matches(anyObject())).thenReturn(true);
TagFilterExpression expr = new TagFilterExpression(
Arrays.asList(ElementsTypeFilter.values()),
booleanExpression);
assertTrue(expr.matches(node));
assertTrue(expr.matches(way));
assertTrue(expr.matches(relation));
}
private Element createElement(Element.Type type)
{
Element element = mock(Element.class);
when(element.getType()).thenReturn(type);
return element;
}
private TagFilterExpression createMatchExpression(ElementsTypeFilter elementsTypeFilter)
{
BooleanExpression expr = mock(BooleanExpression.class);
when(expr.matches(anyObject())).thenReturn(true);
return new TagFilterExpression(Collections.singletonList(elementsTypeFilter), expr);
}
}