package com.sap.furcas.ide.projectwizard.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import org.eclipse.emf.ecore.EObject; import org.junit.BeforeClass; import org.junit.Test; import com.sap.furcas.ide.projectwizard.util.CodeGenerationException; import com.sap.furcas.ide.projectwizard.util.ProjectInfo; import com.sap.furcas.ide.projectwizard.util.SourceCodeFactory; import com.sap.furcas.parsergenerator.TCSSyntaxContainerBean; import com.sap.furcas.runtime.parser.ModelParsingResult; import com.sap.furcas.runtime.parser.ParserFacade; import com.sap.furcas.runtime.parser.exceptions.UnknownProductionRuleException; import com.sap.furcas.runtime.parser.testbase.EMFParsingHelper; import com.sap.furcas.runtime.parser.testbase.GeneratedParserBasedTest; import com.sap.furcas.runtime.parser.testbase.GeneratedParserTestConfiguration; /** * Simple Test for the .tcs file generated by the projectwizard. * Will make sure we notice when our auto-generated syntax definition gets outdated. */ public class ProjectWizardTCSTest extends GeneratedParserBasedTest { private static final String LANGUAGE = "Mydsl"; private static final File[] METAMODELS = { new File("../com.sap.furcas.ide.projectwizard.test/model/Mydsl.ecore") }; private static final String PACKAGE_URI = "http://www.furcas.org/projectwizard/example/mydsl"; private static EMFParsingHelper parsingHelper; // @BeforeClass public static void setupParser() throws Exception { GeneratedParserTestConfiguration testConfig = new GeneratedParserTestConfiguration(LANGUAGE, generateTCS(), METAMODELS); TCSSyntaxContainerBean syntaxBean = parseSyntax(testConfig); ParserFacade facade = generateParserForLanguage(syntaxBean, testConfig, new ClassLookupImpl()); parsingHelper = new EMFParsingHelper(facade, testConfig, PACKAGE_URI); } @Test public void testGeneratedParser() throws IOException, UnknownProductionRuleException { String sample = "class ExampleClass"; ModelParsingResult result = parsingHelper.parseString(sample, 0); EObject resultObject = (EObject) result.getParsedModelElement(); assertNotNull(resultObject); assertEquals("ExampleClass", resultObject.eClass().getName()); } public static File generateTCS() throws CodeGenerationException, IOException { File TCS = new File("../com.sap.furcas.ide.projectwizard.test/generationTemp/generated/Mydsl.tcs"); SourceCodeFactory scf = new SourceCodeFactory(); ProjectInfo pi = new ProjectInfo(); pi.setLanguageName("Mydsl"); pi.setClassName("ExampleClass"); String newContent = scf.createSampleTCS(pi); InputStream newStream = new ByteArrayInputStream(newContent.getBytes("UTF-8")); writeToFile(newStream, TCS); newStream.close(); return TCS; } private static void writeToFile(InputStream inputStream, File targetFile) { try { DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(targetFile))); int c; while ((c = inputStream.read()) != -1) { out.writeByte(c); } inputStream.close(); out.close(); } catch (IOException e) { System.err.println("Error Writing/Reading Streams."); } } }