From a1b9bb9a59e6af3a12182a5ebe71b7f3def6deb1 Mon Sep 17 00:00:00 2001 From: overflowerror Date: Sat, 15 Jan 2022 15:31:27 +0100 Subject: [PATCH] added test cases for cardinalities in context see a5df42591bdada9bbb1ec78a8854bd438c484548 --- .../hoisting/HoistingProcessorTest.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/generator/hoisting/HoistingProcessorTest.java b/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/generator/hoisting/HoistingProcessorTest.java index 1aa724a60..1b598e461 100644 --- a/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/generator/hoisting/HoistingProcessorTest.java +++ b/org.eclipse.xtext.tests/src/org/eclipse/xtext/xtext/generator/hoisting/HoistingProcessorTest.java @@ -1019,4 +1019,64 @@ public class HoistingProcessorTest extends AbstractXtextTests { assertTrue(guard.hasTerminal()); assertEquals("((p0) || (p1))", guard.render()); } + + @Test + public void testCardinalitiesDirectContext_expectCorrectResult() throws Exception { + // @formatter:off + String model = + MODEL_PREAMBLE + + "S: {S} a+=A+ ;\n" + + "A: $$ p0 $$?=> 'a' \n" + + " | $$ p1 $$?=> 'a' 'b' ;\n"; + // @formatter:off + XtextResource resource = getResourceFromString(model); + Grammar grammar = ((Grammar) resource.getContents().get(0)); + hoistingProcessor.init(grammar); + AbstractRule rule = getRule(grammar, "A"); + + HoistingGuard guard = hoistingProcessor.findHoistingGuard(rule.getAlternatives()); + assertFalse(guard.isTrivial()); + assertTrue(guard.hasTerminal()); + assertEquals("(((" + getSyntaxForKeywordToken("a", 2) + " && " + getSyntaxForEofToken(2) + ") || (p0)) && (" + getSyntaxForKeywordToken("b", 2) + " || (p1)))", guard.render()); + } + + @Test + public void testCardinalitiesInGroupContext_expectCorrectResult() throws Exception { + // @formatter:off + String model = + MODEL_PREAMBLE + + "S: {S} ('a' a+=A)+ ;\n" + + "A: $$ p0 $$?=> 'b' \n" + + " | $$ p1 $$?=> 'b' 'b' ;\n"; + // @formatter:off + XtextResource resource = getResourceFromString(model); + Grammar grammar = ((Grammar) resource.getContents().get(0)); + hoistingProcessor.init(grammar); + AbstractRule rule = getRule(grammar, "A"); + + HoistingGuard guard = hoistingProcessor.findHoistingGuard(rule.getAlternatives()); + assertFalse(guard.isTrivial()); + assertTrue(guard.hasTerminal()); + assertEquals("(((" + getSyntaxForKeywordToken("a", 2) + " && " + getSyntaxForEofToken(2) + ") || (p0)) && (" + getSyntaxForKeywordToken("b", 2) + " || (p1)))", guard.render()); + } + + @Test + public void testCardinalitiesIndirectContext_expectCorrectResult() throws Exception { + // @formatter:off + String model = + MODEL_PREAMBLE + + "S: {S} (a+=A)+ ;\n" + + "A: $$ p0 $$?=> 'a' \n" + + " | $$ p1 $$?=> 'a' 'b' ;\n"; + // @formatter:off + XtextResource resource = getResourceFromString(model); + Grammar grammar = ((Grammar) resource.getContents().get(0)); + hoistingProcessor.init(grammar); + AbstractRule rule = getRule(grammar, "A"); + + HoistingGuard guard = hoistingProcessor.findHoistingGuard(rule.getAlternatives()); + assertFalse(guard.isTrivial()); + assertTrue(guard.hasTerminal()); + assertEquals("(((" + getSyntaxForKeywordToken("a", 2) + " && " + getSyntaxForEofToken(2) + ") || (p0)) && (" + getSyntaxForKeywordToken("b", 2) + " || (p1)))", guard.render()); + } }