package compiler; import static compiler.util.Quoter.dynamicQuote; import static compiler.util.Quoter.primitiveQuote; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static trees.MatchSpec.hasExprAtPos; import static trees.MatchSpec.rule; import compiler.util.Quoter; import driver.Context; import grammar.Grammar; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import org.junit.runners.MethodSorters; import parser.Match; @RunWith(JUnit4.class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class QuoterTests { /****************************************************************************/ Grammar grammar = Context.get().grammar(); /****************************************************************************/ @Test public void aa_quotePrimitive() { String str = "1 + myMethod() + array[0]"; int l1 = "1 + ".length(); int l2 = "1 + myMethod() + ".length(); int l3 = "1 + myMethod() + array".length(); Match result = Quoter.primitiveQuote("expression", str, hasExprAtPos(grammar.rule("integerLiteral") , 0), hasExprAtPos(grammar.rule("primaryMethodInvocation") , l1), hasExprAtPos(grammar.rule("suffixedPrimaryExpression") , l2), hasExprAtPos(grammar.rule("squareExpr") , l3)); assertEquals(str, result.string()); assertEquals(0, result.begin); assertEquals(str.length(), result.end); } /****************************************************************************/ @Test public void ab_dynamicQuote() { Match result = dynamicQuote("expression", "#1 + #2 + #3", Quoter.primitiveQuote("integerLiteral", "1"), Quoter.primitiveQuote("primaryMethodInvocation", "myMethod()"), Quoter.primitiveQuote("suffixedPrimaryExpression", "array[0]")); String expected = "1 + myMethod() + array[0]"; assertEquals(expected, result.string()); assertEquals(0, result.begin); assertEquals(expected.length(), result.end); assertTrue (result.is(rule("expression"))); assertTrue(result.has(rule("integerLiteral"))); assertTrue(result.has(rule("primaryMethodInvocation"))); assertTrue(result.has(rule("suffixedPrimaryExpression"))); result = dynamicQuote("expression", "#1#2", 4, 2); assertEquals("42", result.string()); assertTrue(result.has(rule("integerLiteral"))); result = dynamicQuote("expression", "myMethod(#@ ||,|| 1)", (Object) new Integer[]{42, 43}); assertEquals("myMethod(42,43)", result.string()); assertTrue (result.is(rule("expression"))); assertEquals(2, result.all(rule("integerLiteral")).length); result = dynamicQuote("expression", "myMethod #@ |(|,|)| 1", (Object) new Match[] { primitiveQuote("expression", "42"), primitiveQuote("expression", "43") }); assertEquals("myMethod (42,43)", result.string()); assertTrue (result.is(rule("expression"))); assertEquals(2, result.all(rule("integerLiteral")).length); } }