package jetbrains.mps.traceInfo.testWeaving.test; /*Generated by MPS */ import jetbrains.mps.project.Project; import org.jetbrains.mps.openapi.model.SNode; import java.util.List; import jetbrains.mps.baseLanguage.closures.runtime.Wrappers; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.internal.collections.runtime.IVisitor; import java.util.ArrayList; import junit.framework.Assert; import jetbrains.mps.lang.test.matcher.NodesMatcher; import jetbrains.mps.textgen.trace.DebugInfo; import jetbrains.mps.textgen.trace.DefaultTraceInfoProvider; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import org.jetbrains.mps.openapi.model.SNodeReference; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; /*package*/ class TestUtil { private final Project myProject; public TestUtil(Project mpsProject) { myProject = mpsProject; } public void testWeave(final SNode root, List<SNode> nodes, int startLine) { final Wrappers._int line = new Wrappers._int(startLine); final int delta = 3; ListSequence.fromList(nodes).visitAll(new IVisitor<SNode>() { public void visit(SNode it) { { List<SNode> nodesBefore = ListSequence.fromListAndArray(new ArrayList<SNode>(), it); List<SNode> nodesAfter = ListSequence.fromListAndArray(new ArrayList<SNode>(), getTracedNode(root, line.value)); Assert.assertNull("The nodes '" + nodesBefore + "' and '" + nodesAfter + "' do not match!", new NodesMatcher().match(nodesBefore, nodesAfter)); } line.value += delta; } }); } public void testWeaveMany(final SNode root, List<SNode> nodes, int startLine) { final Wrappers._int line = new Wrappers._int(startLine); final int delta = 3; final int howMany = 3; ListSequence.fromList(nodes).visitAll(new IVisitor<SNode>() { public void visit(SNode it) { for (int i = 0; i < howMany; i++) { { List<SNode> nodesBefore = ListSequence.fromListAndArray(new ArrayList<SNode>(), it); List<SNode> nodesAfter = ListSequence.fromListAndArray(new ArrayList<SNode>(), getTracedNode(root, line.value)); Assert.assertNull("The nodes '" + nodesBefore + "' and '" + nodesAfter + "' do not match!", new NodesMatcher().match(nodesBefore, nodesAfter)); } line.value += delta; } } }); } private SNode getTracedNode(SNode root, int line) { DebugInfo di = new DefaultTraceInfoProvider(myProject.getRepository()).debugInfo(SModelOperations.getModelName(SNodeOperations.getModel(root))).findFirst().get(); if (di == null) { return null; } List<SNodeReference> tracedNodes = di.getTracedNodesForPosition(SPropertyOperations.getString(root, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")) + ".java", line); return (tracedNodes.isEmpty() ? null : tracedNodes.get(0).resolve(myProject.getRepository())); } }