CgCppBasicTestKel.xtend 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * generated by Xtext 2.10.0
  3. */
  4. package be.uantwerpen.ansymo.semanticadaptation.cg.cpp.tests
  5. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.SemanticAdaptation
  6. import be.uantwerpen.ansymo.semanticadaptation.tests.AbstractSemanticAdaptationTest
  7. import be.uantwerpen.ansymo.semanticadaptation.tests.SemanticAdaptationInjectorProvider
  8. import com.google.inject.Inject
  9. import java.util.regex.Pattern
  10. import org.eclipse.emf.ecore.EObject
  11. import org.eclipse.xtext.testing.InjectWith
  12. import org.eclipse.xtext.testing.XtextRunner
  13. import org.eclipse.xtext.testing.util.ParseHelper
  14. import org.eclipse.xtext.testing.validation.ValidationTestHelper
  15. import org.junit.Test
  16. import org.junit.runner.RunWith
  17. import org.eclipse.xtext.generator.InMemoryFileSystemAccess
  18. import org.eclipse.xtext.generator.IGeneratorContext
  19. import org.eclipse.emf.ecore.resource.ResourceSet
  20. import org.junit.Ignore
  21. import be.uantwerpen.ansymo.semanticadaptation.cg.cpp.generation.CppGenerator
  22. @RunWith(XtextRunner)
  23. @InjectWith(SemanticAdaptationInjectorProvider)
  24. class CgCppBasicTestKel extends AbstractSemanticAdaptationTest {
  25. // @Inject CppGenerator underTest
  26. @Inject extension ParseHelper<SemanticAdaptation>
  27. @Inject extension ValidationTestHelper
  28. @Ignore
  29. @Test def powerwindow_model_only() { __parseNoErrors('test_input/single_folder_spec/windowKEL/window_sa_canonical.BASE.sa') }
  30. def __parseNoErrors(String filename) {
  31. val model = __parse(filename)
  32. __assertNoParseErrors(model, filename)
  33. val fsa = new InMemoryFileSystemAccess()
  34. val IGeneratorContext ctxt = null;
  35. new CppGenerator().doGenerate(model.eResource, fsa, ctxt);
  36. System.out.println(fsa.allFiles)
  37. }
  38. def __parseNoErrorsPrint(String filename) {
  39. val root = __parse(filename)
  40. print_ast(root)
  41. __assertNoParseErrors(root, filename)
  42. }
  43. def __parse(String filename) {
  44. return readFile(filename).parse
  45. }
  46. def __parse(String filename, ResourceSet resourceSetToUse) {
  47. return readFile(filename).parse(resourceSetToUse)
  48. }
  49. def __assertNoParseErrors(EObject root, String filename) {
  50. try {
  51. root.assertNoErrors
  52. } catch (AssertionError e) {
  53. val p = Pattern.compile(".*, offset (?<offset>[0-9]+), length (?<length>[0-9]+)")
  54. val code = readFile(filename)
  55. for (String line : e.message.split("\n")) {
  56. val m = p.matcher(line)
  57. m.matches()
  58. val count = __occurrencesInString(code.subSequence(0, Integer.valueOf(m.group("offset"))).toString(),
  59. "\n")
  60. print(filename + " at line " + (count + 1) + ": ")
  61. println(line)
  62. }
  63. throw e
  64. }
  65. }
  66. def __occurrencesInString(String str, String findstr) {
  67. var lastIndex = 0
  68. var count = 0
  69. while (lastIndex != -1) {
  70. lastIndex = str.indexOf(findstr, lastIndex)
  71. if (lastIndex != -1) {
  72. count++
  73. lastIndex += findstr.length()
  74. }
  75. }
  76. return count
  77. }
  78. }