/** * Copyright (c) 2015 itemis AG (http://www.itemis.eu) and others. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. * * SPDX-License-Identifier: EPL-2.0 */ package org.eclipse.xtext.xtext.generator; import com.google.inject.Guice; import com.google.inject.Injector; import org.eclipse.emf.ecore.EObject; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.Grammar; import org.eclipse.xtext.XtextStandaloneSetup; import org.eclipse.xtext.generator.InMemoryFileSystemAccess; import org.eclipse.xtext.tests.AbstractXtextTests; import org.eclipse.xtext.xbase.lib.Exceptions; import org.eclipse.xtext.xbase.lib.IterableExtensions; import org.eclipse.xtext.xtext.generator.DefaultGeneratorModule; import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess; import org.eclipse.xtext.xtext.generator.parser.antlr.AntlrDebugGrammarGenerator; import org.eclipse.xtext.xtext.generator.parser.antlr.AntlrOptions; import org.junit.Assert; import org.junit.Test; @SuppressWarnings("all") public class AntlrGeneratorFragmentTest extends AbstractXtextTests { public static class InMemFSA extends InMemoryFileSystemAccess implements IXtextGeneratorFileSystemAccess { @Override public String getPath() { return "./"; } @Override public boolean isOverwrite() { return true; } @Override public void initialize(final Injector injector) { injector.injectMembers(this); } } @Override public void setUp() throws Exception { super.setUp(); this.with(XtextStandaloneSetup.class); } @Test public void testDebugGrammar_01() { StringConcatenation _builder = new StringConcatenation(); _builder.append("grammar com.foo.bar "); _builder.newLine(); _builder.append("import \"http://www.eclipse.org/emf/2002/Ecore\" as ecore"); _builder.newLine(); _builder.append("generate myPack \'http://mypack\'"); _builder.newLine(); _builder.newLine(); _builder.append("MyRule :"); _builder.newLine(); _builder.append("\t"); _builder.append("->((\'a\'|\'b\'|\'c\') \'d\') "); _builder.newLine(); _builder.append(";"); _builder.newLine(); StringConcatenation _builder_1 = new StringConcatenation(); _builder_1.append("grammar DebugInternalbar;"); _builder_1.newLine(); _builder_1.newLine(); _builder_1.append("// Rule MyRule"); _builder_1.newLine(); _builder_1.append("ruleMyRule:"); _builder_1.newLine(); _builder_1.append("\t"); _builder_1.append("("); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append("(\'a\' | \'b\' | \'c\')=>"); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append("("); _builder_1.newLine(); _builder_1.append("\t\t\t"); _builder_1.append("\'a\'"); _builder_1.newLine(); _builder_1.append("\t\t\t "); _builder_1.append("|"); _builder_1.newLine(); _builder_1.append("\t\t\t"); _builder_1.append("\'b\'"); _builder_1.newLine(); _builder_1.append("\t\t\t "); _builder_1.append("|"); _builder_1.newLine(); _builder_1.append("\t\t\t"); _builder_1.append("\'c\'"); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append(")"); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append("\'d\'"); _builder_1.newLine(); _builder_1.append("\t"); _builder_1.append(")"); _builder_1.newLine(); _builder_1.append(";"); _builder_1.newLine(); this.asserTranslatesToDebugGrammar(_builder, _builder_1.toString()); } @Test public void testDebugGrammar_Bug482677() { StringConcatenation _builder = new StringConcatenation(); _builder.append("grammar com.foo.bar "); _builder.newLine(); _builder.append("import \"http://www.eclipse.org/emf/2002/Ecore\" as ecore"); _builder.newLine(); _builder.append("generate myPack \'http://mypack\'"); _builder.newLine(); _builder.newLine(); _builder.append("MyRule :"); _builder.newLine(); _builder.append("\t"); _builder.append("->(x=(\'a\'|\'b\'|\'c\') y=\'d\') "); _builder.newLine(); _builder.append(";"); _builder.newLine(); StringConcatenation _builder_1 = new StringConcatenation(); _builder_1.append("grammar DebugInternalbar;"); _builder_1.newLine(); _builder_1.newLine(); _builder_1.append("// Rule MyRule"); _builder_1.newLine(); _builder_1.append("ruleMyRule:"); _builder_1.newLine(); _builder_1.append("\t"); _builder_1.append("("); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append("(\'a\' | \'b\' | \'c\')=>"); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append("("); _builder_1.newLine(); _builder_1.append("\t\t\t"); _builder_1.append("\'a\'"); _builder_1.newLine(); _builder_1.append("\t\t\t "); _builder_1.append("|"); _builder_1.newLine(); _builder_1.append("\t\t\t"); _builder_1.append("\'b\'"); _builder_1.newLine(); _builder_1.append("\t\t\t "); _builder_1.append("|"); _builder_1.newLine(); _builder_1.append("\t\t\t"); _builder_1.append("\'c\'"); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append(")"); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append("\'d\'"); _builder_1.newLine(); _builder_1.append("\t"); _builder_1.append(")"); _builder_1.newLine(); _builder_1.append(";"); _builder_1.newLine(); this.asserTranslatesToDebugGrammar(_builder, _builder_1.toString()); } @Test public void testDebugGrammar_Bug482677_02() { StringConcatenation _builder = new StringConcatenation(); _builder.append("grammar com.foo.bar "); _builder.newLine(); _builder.append("import \"http://www.eclipse.org/emf/2002/Ecore\" as ecore"); _builder.newLine(); _builder.append("generate myPack \'http://mypack\'"); _builder.newLine(); _builder.newLine(); _builder.append("MyRule :"); _builder.newLine(); _builder.append("\t"); _builder.append("\'foo\' ->(\'bar\' prop=(\'a\'|\'b\'|\'c\') more=\'more\')?"); _builder.newLine(); _builder.append(";"); _builder.newLine(); StringConcatenation _builder_1 = new StringConcatenation(); _builder_1.append("grammar DebugInternalbar;"); _builder_1.newLine(); _builder_1.newLine(); _builder_1.append("// Rule MyRule"); _builder_1.newLine(); _builder_1.append("ruleMyRule:"); _builder_1.newLine(); _builder_1.append("\t"); _builder_1.append("\'foo\'"); _builder_1.newLine(); _builder_1.append("\t"); _builder_1.append("("); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append("(\'bar\')=>"); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append("\'bar\'"); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append("("); _builder_1.newLine(); _builder_1.append("\t\t\t"); _builder_1.append("\'a\'"); _builder_1.newLine(); _builder_1.append("\t\t\t "); _builder_1.append("|"); _builder_1.newLine(); _builder_1.append("\t\t\t"); _builder_1.append("\'b\'"); _builder_1.newLine(); _builder_1.append("\t\t\t "); _builder_1.append("|"); _builder_1.newLine(); _builder_1.append("\t\t\t"); _builder_1.append("\'c\'"); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append(")"); _builder_1.newLine(); _builder_1.append("\t\t"); _builder_1.append("\'more\'"); _builder_1.newLine(); _builder_1.append("\t"); _builder_1.append(")?"); _builder_1.newLine(); _builder_1.append(";"); _builder_1.newLine(); this.asserTranslatesToDebugGrammar(_builder, _builder_1.toString()); } protected void asserTranslatesToDebugGrammar(final CharSequence xtextGrammar, final String expectedDebugGrammar) { try { EObject _model = super.getModel(xtextGrammar.toString()); final Grammar grammar = ((Grammar) _model); DefaultGeneratorModule _defaultGeneratorModule = new DefaultGeneratorModule(); final Injector injector = Guice.createInjector(_defaultGeneratorModule); final AntlrGeneratorFragmentTest.InMemFSA inMem = new AntlrGeneratorFragmentTest.InMemFSA(); final AntlrOptions options = new AntlrOptions(); injector.<AntlrDebugGrammarGenerator>getInstance(AntlrDebugGrammarGenerator.class).generate(grammar, options, inMem); Assert.assertEquals(expectedDebugGrammar, IterableExtensions.<Object>head(inMem.getAllFiles().values()).toString()); } catch (Throwable _e) { throw Exceptions.sneakyThrow(_e); } } }