SemanticAdaptationParsingTest.xtend 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. * generated by Xtext 2.10.0
  3. */
  4. package be.uantwerpen.ansymo.semanticadaptation.tests
  5. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.SemanticAdaptation
  6. import com.google.inject.Inject
  7. import java.util.regex.Pattern
  8. import org.eclipse.emf.ecore.EObject
  9. import org.eclipse.xtext.testing.InjectWith
  10. import org.eclipse.xtext.testing.XtextRunner
  11. import org.eclipse.xtext.testing.util.ParseHelper
  12. import org.eclipse.xtext.testing.validation.ValidationTestHelper
  13. import org.junit.Test
  14. import org.junit.runner.RunWith
  15. import org.junit.Ignore
  16. @RunWith(XtextRunner)
  17. @InjectWith(SemanticAdaptationInjectorProvider)
  18. class SemanticAdaptationParsingTest extends AbstractSemanticAdaptationTest{
  19. @Inject extension ParseHelper<SemanticAdaptation>
  20. @Inject extension ValidationTestHelper
  21. // @Test
  22. // def void loadModule() {
  23. // //val root = this.parseInputFile('test1.sa')
  24. // val root = readFile('input/test1.sa').parse
  25. // root.assertNoErrors
  26. // Assert.assertNotNull(root.adaptations.get(0))
  27. // Assert.assertNotNull(root.adaptations.get(0).extractsensitivity)
  28. // Assert.assertTrue(root.adaptations.get(0).extractsensitivity.length > 0)
  29. // Assert.assertTrue(root.adaptations.get(0).inports.length > 0)
  30. // Assert.assertEquals(root.adaptations.get(0).inports.get(0).name, 'x')
  31. // print_ast(root)
  32. // }
  33. @Test def power_window__window_obstacle_sa_flat() { __parseNoErrors('input/power_window_case_study/window_obstacle_sa_flat.BASE.sa') }
  34. @Test def power_window__window_sa() { __parseNoErrors('input/power_window_case_study/window_sa.BASE.sa') }
  35. @Test def power_window__window_sa_canonical() { __parseNoErrors('input/power_window_case_study/window_sa_canonical.BASE.sa') }
  36. @Ignore @Test def powerwindow_model_only() { __parseNoErrors('input/powerwindow_model_only.sa') }
  37. @Ignore @Test def powerwindow_algebraic_loop_delay_BASE() { __parseNoErrors('input/powerwindow_algebraic_loop_delay_BASE.sa') }
  38. @Ignore @Test def powerwindow_algebraic_loop_delay() { __parseNoErrors('input/powerwindow_algebraic_loop_delay.sa') }
  39. @Ignore @Test def powerwindow_algebraic_loop_iteration_BASE() { __parseNoErrors('input/powerwindow_algebraic_loop_iteration_BASE.sa') }
  40. @Ignore @Test def powerwindow_algebraic_loop_iteration() { __parseNoErrors('input/powerwindow_algebraic_loop_iteration.sa') }
  41. @Ignore @Test def powerwindow_controller_delay() { __parseNoErrors('input/powerwindow_controller_delay.sa') }
  42. @Ignore @Test def powerwindow_multi_rate() { __parseNoErrors('input/powerwindow_multi_rate.sa') }
  43. @Ignore @Test def powerwindow() { __parseNoErrors('input/powerwindow.sa') }
  44. @Ignore @Test def powerwindow_inline() { __parseNoErrors('input/powerwindow_inline.sa') }
  45. def __parseNoErrors(String filename) {
  46. val root = __parse(filename)
  47. __assertNoParseErrors(root, filename)
  48. }
  49. def __parseNoErrorsPrint(String filename) {
  50. val root = __parse(filename)
  51. print_ast(root)
  52. __assertNoParseErrors(root, filename)
  53. }
  54. def __parse(String filename) {
  55. val model = readFile('input/powerwindow_controller_delay.sa').parse
  56. val controller = readFile('input/powerwindow_model_only.sa').parse(model.eResource.resourceSet)
  57. val algebraicloop = readFile('input/powerwindow_algebraic_loop_delay.sa').parse(controller.eResource.resourceSet)
  58. return readFile(filename).parse(algebraicloop.eResource.resourceSet)
  59. }
  60. def __assertNoParseErrors(EObject root, String filename) {
  61. try {
  62. root.assertNoErrors
  63. } catch (AssertionError e) {
  64. val p = Pattern.compile(".*, offset (?<offset>[0-9]+), length (?<length>[0-9]+)")
  65. val code = readFile(filename)
  66. for (String line : e.message.split("\n")) {
  67. val m = p.matcher(line)
  68. m.matches()
  69. val count = __occurrencesInString(code.subSequence(0, Integer.valueOf(m.group("offset"))).toString(), "\n")
  70. print(filename + " at line " + (count+1) + ": ")
  71. println(line)
  72. }
  73. throw e
  74. }
  75. }
  76. def __occurrencesInString(String str, String findstr) {
  77. var lastIndex = 0
  78. var count = 0
  79. while (lastIndex != -1) {
  80. lastIndex = str.indexOf(findstr,lastIndex)
  81. if (lastIndex != -1) {
  82. count ++
  83. lastIndex += findstr.length()
  84. }
  85. }
  86. return count
  87. }
  88. }