ParserFolderTest.xtend 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package be.uantwerpen.ansymo.semanticadaptation.tests
  2. import be.uantwerpen.ansymo.semanticadaptation.testframework.XtextParametersRunnerFactory
  3. import java.io.File
  4. import org.apache.commons.io.FileUtils
  5. import org.eclipse.xtext.testing.InjectWith
  6. import org.junit.Assert
  7. import org.junit.Test
  8. import org.junit.runner.RunWith
  9. import org.junit.runners.Parameterized
  10. import java.util.List
  11. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.SemanticAdaptation
  12. import java.util.HashMap
  13. @RunWith(typeof(Parameterized))
  14. @InjectWith(SemanticAdaptationInjectorProvider)
  15. @Parameterized.UseParametersRunnerFactory(XtextParametersRunnerFactory)
  16. abstract class ParserFolderTest extends BasicParserTest {
  17. val File directory;
  18. new(File directory) {
  19. this.directory = directory;
  20. }
  21. @Test
  22. def test() {
  23. val File[] files = FileUtils.listFiles(this.directory, #["sa"], true);
  24. Assert.assertFalse("The folder " + this.directory + " does not contain any .sa files", files.isEmpty);
  25. var dependencies = new HashMap<File, String[]>();
  26. var List<String> loadedModules = newArrayList;
  27. // Get all dependencies
  28. for (File file : files) {
  29. dependencies.put(file, getDependencies(file));
  30. }
  31. var SemanticAdaptation model = null;
  32. // Load the modules in the correct order
  33. while (!dependencies.isEmpty) {
  34. var List<File> entriesToRemove = newArrayList;
  35. for (entry : dependencies.entrySet) {
  36. if (loadedModules.containsAll(entry.value)) {
  37. if (model === null) {
  38. model = __parse(entry.key);
  39. } else {
  40. model = __parse(entry.key, model.eResource.resourceSet);
  41. }
  42. __assertNoParseIssues(model, entry.key)
  43. loadedModules.add(model.name);
  44. entriesToRemove.add(entry.key);
  45. }
  46. }
  47. for (entry : entriesToRemove) {
  48. dependencies.remove(entry);
  49. }
  50. }
  51. __assertNoParseErrors(model, null)
  52. }
  53. }