CgCppBasicTest.xtend 2.8 KB

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