package com.intellij.structuralsearch.impl.matcher.compiler; import com.intellij.structuralsearch.MalformedPatternException; import com.intellij.structuralsearch.MatchOptions; import com.intellij.structuralsearch.MatchVariableConstraint; import com.intellij.structuralsearch.UnsupportedPatternException; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; /** * @author Bas Leijdekkers */ public class StringToConstraintsTransformerTest { private MatchOptions myOptions; @Before public void setUp() throws Exception { myOptions = new MatchOptions(); } @Test(expected = MalformedPatternException.class) public void testCharacterExpectedAfterQuote() { test("' asdf"); } @Test(expected = MalformedPatternException.class) public void testUnexpectedEndOfPattern() { test("'_a{"); } @Test(expected = MalformedPatternException.class) public void testDigitExpected() { test("'a{a"); } @Test(expected = MalformedPatternException.class) public void testDigitExpected2() { test("'a{1,a}"); } @Test public void testZeroOccurs() { test("'a{,}"); final MatchVariableConstraint constraint = myOptions.getVariableConstraint("a"); assertEquals(0, constraint.getMinCount()); assertEquals(0, constraint.getMaxCount()); } @Test(expected = MalformedPatternException.class) public void testOverflow() { test("'a{2147483648}"); } @Test(expected = MalformedPatternException.class) public void testMissingBrace() { test("'a{1,3"); } @Test(expected = MalformedPatternException.class) public void testNoOptions() { test("'a:"); } @Test public void testColon() { test("for('_t 'a : '_b) {}"); assertEquals("for($t$ $a$ : $b$) {}", myOptions.getSearchPattern()); } @Test(expected = MalformedPatternException.class) public void testNoOptions2() { test("'a:+"); } @Test(expected = MalformedPatternException.class) public void testUnclosedCondition() { test("'a:["); } @Test(expected = MalformedPatternException.class) public void testClosedCondition() { test("'a:[]"); } @Test(expected = MalformedPatternException.class) public void testEmptyNegated() { test("'a:[!]"); } @Test(expected = UnsupportedPatternException.class) public void testCondition() { test("'a:[aap()]"); } @Test(expected = UnsupportedPatternException.class) public void testIncompleteCondition() { test("'a:[regex(]"); } @Test(expected = MalformedPatternException.class) public void testIncompleteCondition2() { test("'a:[regex()]"); } @Test(expected = MalformedPatternException.class) public void testIncompleteMultipleCondition() { test("'a:[regex( a ) &&]"); } @Test(expected = MalformedPatternException.class) public void testInvalidRegularExpression() { test("'a:x!("); } @Test public void testMethodReference() { test("'_a::'_b"); assertEquals("$a$::$b$", myOptions.getSearchPattern()); } private void test(String pattern) { myOptions.setSearchPattern(pattern); StringToConstraintsTransformer.transformOldPattern(myOptions); } }