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.");
}
}
}