CgCppAutoTest.xtend 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /*
  2. * generated by Xtext 2.10.0
  3. */
  4. package be.uantwerpen.ansymo.semanticadaptation.cg.cpp.tests
  5. import be.uantwerpen.ansymo.semanticadaptation.cg.cpp.CppGenerator
  6. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.SemanticAdaptation
  7. import be.uantwerpen.ansymo.semanticadaptation.testframework.XtextParametersRunnerFactory
  8. import be.uantwerpen.ansymo.semanticadaptation.tests.AbstractSemanticAdaptationTest
  9. import be.uantwerpen.ansymo.semanticadaptation.tests.SemanticAdaptationInjectorProvider
  10. import com.google.inject.Inject
  11. import java.io.File
  12. import java.util.ArrayList
  13. import java.util.Arrays
  14. import java.util.Collection
  15. import java.util.List
  16. import java.util.regex.Pattern
  17. import org.eclipse.emf.ecore.EObject
  18. import org.eclipse.emf.ecore.resource.ResourceSet
  19. import org.eclipse.xtext.generator.IGeneratorContext
  20. import org.eclipse.xtext.generator.InMemoryFileSystemAccess
  21. import org.eclipse.xtext.testing.InjectWith
  22. import org.eclipse.xtext.testing.util.ParseHelper
  23. import org.eclipse.xtext.testing.validation.ValidationTestHelper
  24. import org.junit.Test
  25. import org.junit.runner.RunWith
  26. import org.junit.runners.Parameterized
  27. import org.junit.runners.Parameterized.Parameters
  28. import org.junit.Ignore
  29. @RunWith(typeof(Parameterized))
  30. @InjectWith(SemanticAdaptationInjectorProvider)
  31. @Parameterized.UseParametersRunnerFactory(XtextParametersRunnerFactory)
  32. class CgCppAutoTest extends AbstractSemanticAdaptationTest {
  33. new (List<File> files)
  34. {
  35. f = files;
  36. }
  37. @Inject extension ParseHelper<SemanticAdaptation>
  38. @Inject extension ValidationTestHelper
  39. @Parameters(name = "{index}")
  40. def static Collection<Object[]> data() {
  41. val files = new ArrayList<List<File>>();
  42. listf("input/single_folder_spec", files);
  43. val test = new ArrayList();
  44. test.add(files.get(0));
  45. //val test2 = new ArrayList();
  46. //test2.add(files.get(1));
  47. return Arrays.asList(test.toArray());
  48. }
  49. def static void listf(String directoryName, List<List<File>> files) {
  50. val File directory = new File(directoryName);
  51. val filesInDir = new ArrayList<File>();
  52. // get all the files from a directory
  53. val File[] fList = directory.listFiles();
  54. var boolean added = false;
  55. for (File file : fList) {
  56. if (file.isFile()) {
  57. filesInDir.add(file);
  58. } else if (file.isDirectory()) {
  59. if (filesInDir.length > 0) {
  60. added = true;
  61. files.add(filesInDir);
  62. }
  63. listf(file.getAbsolutePath(), files);
  64. }
  65. }
  66. if (!added) {
  67. if (filesInDir.length > 0) {
  68. files.add(filesInDir);
  69. }
  70. }
  71. }
  72. var List<File> f;
  73. @Ignore
  74. @Test def allSemanticAdaptations() {
  75. //assertTrue(false);
  76. __parseNoErrors(f);
  77. }
  78. def __parseNoErrors(List<File> files) {
  79. val hdFile = files.get(0);
  80. files.remove(0);
  81. val tailFiles = files;
  82. val model = __parse(hdFile, tailFiles)
  83. __assertNoParseErrors(model, hdFile)
  84. val fsa = new InMemoryFileSystemAccess()
  85. val IGeneratorContext ctxt = null;
  86. new CppGenerator().doGenerate(model.eResource, fsa, ctxt)
  87. System.out.println(fsa.allFiles)
  88. }
  89. def __parse(File hdFile, Iterable<File> tailFiles) {
  90. var prevModel = readFile(hdFile).parse;
  91. for (File file : tailFiles) {
  92. val model = __parse(file, prevModel.eResource.resourceSet);
  93. prevModel = model;
  94. }
  95. return prevModel;
  96. }
  97. def __parse(String filename, ResourceSet resourceSetToUse) {
  98. return readFile(filename).parse(resourceSetToUse)
  99. }
  100. def __parse(File file, ResourceSet resourceSetToUse) {
  101. return readFile(file).parse(resourceSetToUse)
  102. }
  103. def __assertNoParseErrors(EObject root, File file) {
  104. try {
  105. root.assertNoErrors
  106. } catch (AssertionError e) {
  107. val p = Pattern.compile(".*, offset (?<offset>[0-9]+), length (?<length>[0-9]+)")
  108. val code = readFile(file)
  109. for (String line : e.message.split("\n")) {
  110. val m = p.matcher(line)
  111. m.matches()
  112. val count = __occurrencesInString(code.subSequence(0, Integer.valueOf(m.group("offset"))).toString(),
  113. "\n")
  114. print(file.getName() + " at line " + (count + 1) + ": ")
  115. println(line)
  116. }
  117. throw e
  118. }
  119. }
  120. def __occurrencesInString(String str, String findstr) {
  121. var lastIndex = 0
  122. var count = 0
  123. while (lastIndex != -1) {
  124. lastIndex = str.indexOf(findstr, lastIndex)
  125. if (lastIndex != -1) {
  126. count++
  127. lastIndex += findstr.length()
  128. }
  129. }
  130. return count
  131. }
  132. }