AbstractSemanticAdaptationTest.xtend 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /*
  2. * generated by Xtext 2.10.0
  3. */
  4. package be.uantwerpen.ansymo.semanticadaptation.tests
  5. import org.eclipse.xtext.junit4.InjectWith
  6. import org.eclipse.xtext.junit4.XtextRunner
  7. import org.junit.runner.RunWith
  8. import java.io.FileReader
  9. import static extension com.google.common.io.CharStreams.*
  10. import java.util.ArrayList
  11. import org.eclipse.emf.ecore.EObject
  12. import org.eclipse.emf.common.util.BasicEList
  13. import org.eclipse.emf.ecore.util.EDataTypeEList
  14. import org.eclipse.emf.ecore.util.EObjectEList
  15. import org.eclipse.emf.common.util.EList
  16. import org.eclipse.xtext.generator.InMemoryFileSystemAccess
  17. import javax.inject.Inject
  18. import java.io.File
  19. import org.eclipse.emf.ecore.resource.ResourceSet
  20. @RunWith(XtextRunner)
  21. @org.eclipse.xtext.testing.InjectWith(SemanticAdaptationInjectorProvider)
  22. abstract class AbstractSemanticAdaptationTest {
  23. ArrayList<Integer> visited = new ArrayList<Integer>
  24. /*@Inject
  25. private InMemoryFileSystemAccess fsa
  26. def __setUp(File dir) {
  27. for (File f : dir.listFiles()) {
  28. if (f.name.endsWith(".sa") && !fsa.isFile(f.name)) {
  29. //println("adding " + f.name)
  30. fsa.generateFile(f.name, new FileReader(f).readLines.join("\n"))
  31. }
  32. }
  33. //println(fsa.allFiles.keySet)
  34. }*/
  35. /**
  36. * reads a file from the permanent file system
  37. */
  38. def String readFile(String basefilename) {
  39. val f = new File(basefilename)
  40. //println("testing " + f.name)
  41. //__setUp(f.parentFile)
  42. //return fsa.readTextFile(f.name).toString()
  43. return new FileReader(f).readLines.join("\n")
  44. }
  45. def print_ast(EObject root) {
  46. visited.clear
  47. println(root.eClass.name)
  48. print_ast_element(root, 0)
  49. }
  50. private def void print_ast_element(EObject element, int indent) {
  51. if (visited.contains(element.hashCode)) {
  52. return
  53. }
  54. visited.add(element.hashCode)
  55. element.eClass.EAllStructuralFeatures.forEach[f |
  56. val feature = element.eGet(f)
  57. if (feature != null) {
  58. if (feature instanceof EList<?>) {
  59. (feature as EObjectEList<?>).forEach[e |
  60. print(ind(indent+1) + f.name + "(" + feature.indexOf(e) + "): ")
  61. //println("List<" + f.EType.name + ">")
  62. if (feature instanceof EObjectEList<?>) {
  63. print((e as EObject).class.simpleName.substring(0, (e as EObject).class.simpleName.length-4))
  64. printObject((e as EObject), indent+1)
  65. } else if (feature instanceof EDataTypeEList<?>) { // in case of enums
  66. println(e.class.simpleName + " = " + e)
  67. } else if (feature instanceof BasicEList<?>) {
  68. throw new Exception(f.name + " other type of list: " + feature.class.name)
  69. }
  70. ]
  71. } else {
  72. print(ind(indent+1) + f.name + ": ")
  73. if (feature instanceof EObject) {
  74. print(feature.class.simpleName.substring(0, feature.class.simpleName.length-4))
  75. printObject((feature as EObject), indent+1)
  76. } else if (feature instanceof String) {
  77. println(feature.class.simpleName + " = '" + feature + "'")
  78. } else {
  79. println(feature.class.simpleName + " = " + feature)
  80. }
  81. }
  82. } else { // filter out null values
  83. print(ind(indent+1) + f.name + ": ")
  84. println("null")
  85. }
  86. ]
  87. return
  88. }
  89. private def void printObject(EObject element, int indent) {
  90. if (visited.contains(element.hashCode)) {
  91. val namelist = element.eClass.EAllStructuralFeatures.filter(e | e.name.equals("name"))
  92. if (namelist.length == 0) {
  93. throw new Exception("Reference " + element + " does not have a 'name' attribute")
  94. }
  95. println(" -> " + element.eGet(element.eClass.EAllStructuralFeatures.filter(e | e.name.equals("name")).get(0)))
  96. } else {
  97. println()
  98. print_ast_element(element, indent)
  99. }
  100. return
  101. }
  102. private def ind(int indent) {
  103. var s = ""
  104. for (var i = 0 ; i < indent ; i++) {
  105. s += "| "
  106. }
  107. return s
  108. }
  109. }