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.semanticAdaptation.SemanticAdaptation
  6. import be.uantwerpen.ansymo.semanticadaptation.testframework.XtextParametersRunnerFactory
  7. import be.uantwerpen.ansymo.semanticadaptation.tests.AbstractSemanticAdaptationTest
  8. import be.uantwerpen.ansymo.semanticadaptation.tests.SemanticAdaptationInjectorProvider
  9. import com.google.inject.Inject
  10. import java.io.File
  11. import java.util.ArrayList
  12. import java.util.Arrays
  13. import java.util.Collection
  14. import java.util.List
  15. import java.util.regex.Pattern
  16. import org.eclipse.emf.ecore.EObject
  17. import org.eclipse.emf.ecore.resource.ResourceSet
  18. import org.eclipse.xtext.generator.IGeneratorContext
  19. import org.eclipse.xtext.generator.InMemoryFileSystemAccess
  20. import org.eclipse.xtext.testing.InjectWith
  21. import org.eclipse.xtext.testing.util.ParseHelper
  22. import org.eclipse.xtext.testing.validation.ValidationTestHelper
  23. import org.junit.Test
  24. import org.junit.runner.RunWith
  25. import org.junit.runners.Parameterized
  26. import org.junit.runners.Parameterized.Parameters
  27. import org.junit.Ignore
  28. import be.uantwerpen.ansymo.semanticadaptation.cg.cpp.generation.CppGenerator
  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("test_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. }