@data elems
operation data() {
  return Sequence {
    Sequence { 'http://www.eclipse.org/emf/2002/Ecore', 'ecore', 'ECore' },
    Sequence { 'http://www.eclipse.org/emf/2002/GenModel', 'genmodel', 'GenModel' },
    Sequence { 'http://www.eclipse.org/gmf/2006/GraphicalDefinition', 'gmfgraph', 'GmfGraph' },
    Sequence { 'http://www.eclipse.org/gmf/2005/ToolDefinition', 'gmftool', 'GmfTool'},
    Sequence { 'http://www.eclipse.org/gmf/2008/mappings', 'gmfmap', 'GmfMap' }
  };
}

@model
operation loadModels() {
  var modelSuffix := elems.get(2);
  loadModel('Expected' + modelSuffix, direxpected);
  loadModel('Obtained' + modelSuffix, dirtemp);
}

@test
operation testForRegressions() {
  var modelSuffix := elems.get(2);
  assertEqualModels('Expected' + modelSuffix,
                    'Obtained' + modelSuffix,
                    Map {
                      'whitespace' = 'ignore',
                      'ignoreAttributeValueChanges' = Sequence { 'genmodel.GenModel.pluginKey' }
                    });
}

operation loadModel(modelName, directory) {
  var metamodelUri   := elems.get(0);
  var modelExtension := elems.get(1);

  var task := antProject.createTask('epsilon.emf.loadModel');
  task.setName(modelName);
  task.setModelFile(new Native('java.io.File')(
    directory + '/' + casename + '.' + modelExtension));
  task.setMetamodelUri(metamodelUri);
  task.setRead(true);
  task.setStore(false);
  task.execute();
}
