package de.westnordost.streetcomplete.data.osm.tql; import junit.framework.TestCase; public class BooleanExpressionBuilderTest extends TestCase { public void testLeaf() { check("a"); } public void testAnd() { check("a*b"); } public void testOr() { check("a+b"); } public void testAnd3() { check("a*b*c"); } public void testOr3() { check("a+b+c"); } public void testAndOr() { check("a*b+c"); } public void testOrAnd() { check("a+b*c"); } public void testAndInOr() { check("a+b*c+d"); } public void testAndInOr2() { check("a*b+c*d"); } public void testBrackets0() { check("(a)", "a"); } public void testBrackets1() { check("(a*b)", "a*b"); } public void testBrackets2() { check("(a+b)", "a+b"); } public void testBrackets3() { check("((a*b))", "a*b"); } public void testBrackets4() { check("((a+b))", "a+b"); } public void testBrackets5() { check("(a+b)*c"); } public void testBrackets6() { check("a*(b+c)"); } public void testBrackets7() { check("a*(b+c)*d"); } public void testBrackets8() { check("(a*b)+c", "a*b+c"); } public void testBrackets9() { check("(a*b)*c", "a*b*c"); } public void testBrackets10() { check("(a+b)+c", "a+b+c"); } public void testBrackets11() { check("a+(b*c)", "a+b*c"); } public void testBrackets12() { check("a*(b*c)", "a*b*c"); } public void testBrackets13() { check("a+(b+c)", "a+b+c"); } public void testMerge1() { check("a+(b+(c+(d)))", "a+b+c+d"); } public void testMerge2() { check("a*(b*(c*(d)))", "a*b*c*d"); } public void testMerge3() { check("a*(b+(c*(d)))", "a*(b+c*d)"); } public void testMerge4() { check("a+(b*(c+(d)))", "a+b*(c+d)"); } public void testMerge5() { check("(((a)+b)+c)+d", "a+b+c+d"); } public void testMerge6() { check("(((a)*b)*c)*d", "a*b*c*d"); } public void testMerge7() { check("(((a)+b)*c)+d", "(a+b)*c+d"); } public void testMerge8() { check("(((a)*b)+c)*d", "(a*b+c)*d"); } public void testClosedTooManyBrackets() { try { TestBooleanExpressionParser.parse("a+b)"); fail(); } catch(IllegalStateException e) {} try { TestBooleanExpressionParser.parse("(a+b))"); fail(); } catch(IllegalStateException e) {} try { TestBooleanExpressionParser.parse("((b+c)*a)+d)"); fail(); } catch(IllegalStateException e) {} } public void testCloseTooLittleBrackets() { try { TestBooleanExpressionParser.parse("(a+b"); fail(); } catch(IllegalStateException e) {} try { TestBooleanExpressionParser.parse("((a+b)"); fail(); } catch(IllegalStateException e) {} try { TestBooleanExpressionParser.parse("((a*(b+c))"); fail(); } catch(IllegalStateException e) {} } private void check(String input) { check(input, input); } private void check(String input, String expected) { BooleanExpression tree = TestBooleanExpressionParser.parse(input); assertEquals(expected, translateOutput(tree.toString())); } private String translateOutput(String output) { return output.replaceAll(" and ", "*").replaceAll(" or ", "+"); } }