CgCppModuleTest.xtend 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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.io.File
  10. import java.util.regex.Pattern
  11. import org.eclipse.emf.ecore.EObject
  12. import org.eclipse.emf.ecore.resource.ResourceSet
  13. import org.eclipse.xtext.generator.IGeneratorContext
  14. import org.eclipse.xtext.generator.InMemoryFileSystemAccess
  15. import org.eclipse.xtext.testing.InjectWith
  16. import org.eclipse.xtext.testing.XtextRunner
  17. import org.eclipse.xtext.testing.util.ParseHelper
  18. import org.eclipse.xtext.testing.validation.ValidationTestHelper
  19. import org.junit.Test
  20. import org.junit.runner.RunWith
  21. import static org.junit.Assert.assertTrue
  22. import org.junit.Ignore
  23. import be.uantwerpen.ansymo.semanticadaptation.cg.cpp.generation.CppGenerator
  24. @RunWith(XtextRunner)
  25. @InjectWith(SemanticAdaptationInjectorProvider)
  26. class CgCppModuleTest extends AbstractSemanticAdaptationTest {
  27. // @Inject CppGenerator underTest
  28. @Inject extension ParseHelper<SemanticAdaptation>
  29. @Inject extension ValidationTestHelper
  30. @Ignore
  31. @Test def powerwindow_model_only() { __parseNoErrors('input/single_folder_spec/window/window_sa_canonical.BASE.sa') }
  32. def __parseNoErrors(String filename) {
  33. val file = new File(filename)
  34. assertTrue("File not found: " + filename, file.exists);
  35. var SemanticAdaptation model = null;
  36. if (file.isDirectory) {
  37. for (f : file.listFiles) {
  38. if (model === null) {
  39. model = __parse(f.absolutePath)
  40. } else {
  41. model = __parse(f.absolutePath, model.eResource.resourceSet)
  42. }
  43. __assertNoParseErrors(model, f.absolutePath)
  44. }
  45. } else {
  46. model = __parse(filename)
  47. __assertNoParseErrors(model, filename)
  48. }
  49. val fsa = new InMemoryFileSystemAccess()
  50. val IGeneratorContext ctxt = null;
  51. new CppGenerator().doGenerate(model.eResource, fsa, ctxt)
  52. System.out.println(fsa.allFiles)
  53. }
  54. def __parseNoErrorsPrint(String filename) {
  55. val root = __parse(filename)
  56. print_ast(root)
  57. __assertNoParseErrors(root, filename)
  58. }
  59. def __parse(String filename) {
  60. return readFile(filename).parse
  61. }
  62. def __parse(String filename, ResourceSet resourceSetToUse) {
  63. return readFile(filename).parse(resourceSetToUse)
  64. }
  65. def __assertNoParseErrors(EObject root, String filename) {
  66. try {
  67. root.assertNoErrors
  68. } catch (AssertionError e) {
  69. val p = Pattern.compile(".*, offset (?<offset>[0-9]+), length (?<length>[0-9]+)")
  70. val code = readFile(filename)
  71. for (String line : e.message.split("\n")) {
  72. val m = p.matcher(line)
  73. m.matches()
  74. val count = __occurrencesInString(code.subSequence(0, Integer.valueOf(m.group("offset"))).toString(),
  75. "\n")
  76. print(filename + " at line " + (count + 1) + ": ")
  77. println(line)
  78. }
  79. throw e
  80. }
  81. }
  82. def __occurrencesInString(String str, String findstr) {
  83. var lastIndex = 0
  84. var count = 0
  85. while (lastIndex != -1) {
  86. lastIndex = str.indexOf(findstr, lastIndex)
  87. if (lastIndex != -1) {
  88. count++
  89. lastIndex += findstr.length()
  90. }
  91. }
  92. return count
  93. }
  94. }