package jetbrains.mps.lang.test.runtime; /*Generated by MPS */ import java.util.Collection; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.lang.migration.runtime.base.MigrationScript; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.smodel.tempmodel.TemporaryModels; import jetbrains.mps.smodel.tempmodel.TempModuleOptions; import jetbrains.mps.internal.collections.runtime.CollectionSequence; import jetbrains.mps.internal.collections.runtime.IVisitor; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import java.util.List; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.internal.collections.runtime.ISelector; import junit.framework.Assert; import java.util.Iterator; import java.util.ArrayList; import jetbrains.mps.lang.test.matcher.NodesMatcher; import jetbrains.mps.lang.migration.runtime.base.Problem; import jetbrains.mps.internal.collections.runtime.Sequence; public abstract class BaseMigrationTestBody extends BaseTestBody { public static Collection<SNode> runMigration(Collection<SNode> inputNodes, MigrationScript migrationScript) { final SModel model = TemporaryModels.getInstance().create(false, false, TempModuleOptions.forDefaultModule()); CollectionSequence.fromCollection(inputNodes).visitAll(new IVisitor<SNode>() { public void visit(SNode it) { SModelOperations.addRootNode(model, SNodeOperations.copyNode(it)); } }); migrationScript.execute(model.getModule()); List<SNode> result = ListSequence.fromList(SModelOperations.roots(model, null)).select(new ISelector<SNode, SNode>() { public SNode select(SNode it) { return SNodeOperations.copyNode(it); } }).toListSequence(); TemporaryModels.getInstance().dispose(model); return result; } public void testMethod() { final SModel model = TemporaryModels.getInstance().create(false, false, TempModuleOptions.forDefaultModule()); CollectionSequence.fromCollection(getInputNodes()).visitAll(new IVisitor<SNode>() { public void visit(SNode it) { SModelOperations.addRootNode(model, it); } }); MigrationScript script = getMigrationScript(); script.execute(model.getModule()); Collection<SNode> outputNodes = getOutputNodes(); Assert.assertEquals(ListSequence.fromList(SModelOperations.roots(model, null)).count(), CollectionSequence.fromCollection(outputNodes).count()); { Iterator<SNode> found_it = ListSequence.fromList(SModelOperations.roots(model, null)).iterator(); Iterator<SNode> expected_it = CollectionSequence.fromCollection(outputNodes).iterator(); SNode found_var; SNode expected_var; while (found_it.hasNext() && expected_it.hasNext()) { found_var = found_it.next(); expected_var = expected_it.next(); { List<SNode> nodesBefore = ListSequence.fromListAndArray(new ArrayList<SNode>(), found_var); List<SNode> nodesAfter = ListSequence.fromListAndArray(new ArrayList<SNode>(), expected_var); Assert.assertNull("The nodes '" + nodesBefore + "' and '" + nodesAfter + "' do not match!", new NodesMatcher().match(nodesBefore, nodesAfter)); } } } for (Problem problem : Sequence.fromIterable(script.check(model.getModule()))) { org.junit.Assert.fail(problem.toString()); } } public abstract Collection<SNode> getInputNodes(); public abstract Collection<SNode> getOutputNodes(); public abstract MigrationScript getMigrationScript(); }