/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.visage.tools.api; import org.visage.api.VisagecTask; import org.visage.api.tree.ClassDeclarationTree; import org.visage.api.tree.VisageTreePathScanner; import org.visage.api.tree.SequenceIndexedTree; import org.visage.api.tree.UnitTree; import org.visage.api.tree.SourcePositions; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.lang.model.element.Element; import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; import javax.tools.FileObject; import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; import static javax.tools.StandardLocation.*; import org.junit.Test; import static org.junit.Assert.*; /** * Verifies correct start and end position for indexed sequence expression. * * @author tball */ public class VSGC1330Test { @Test public void sequenceExpressionPosTest() throws Exception { ClassLoader orig = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(VisagecTool.class.getClassLoader()); VisagecTool tool = VisagecTool.create(); MockDiagnosticListener<? super FileObject> dl = new MockDiagnosticListener<FileObject>(); StandardJavaFileManager fileManager = tool.getStandardFileManager(dl, null, null); List<File> dirs = new ArrayList<File>(); dirs.add(getTmpDir()); fileManager.setLocation(CLASS_OUTPUT, dirs); File file = new File("test/src/org/visage/tools/api/Boids.visage"); Iterable<? extends JavaFileObject> fileObjects = fileManager.getJavaFileObjects(file); VisagecTask visageTask = tool.getTask(null, fileManager, dl, null, fileObjects); Iterable<? extends UnitTree> treeList = visageTask.parse(); assertTrue("no parse tree(s) returned", treeList.iterator().hasNext()); final VisagecTrees trees = VisagecTrees.instance(visageTask); final SourcePositions sp = trees.getSourcePositions(); for (final UnitTree unit : treeList) { VisageTreePathScanner scanner = new VisageTreePathScanner<Object,Void>() { @Override public Object visitSequenceIndexed(SequenceIndexedTree node, Void p) { assertEquals(37, sp.getStartPosition(unit, node)); assertEquals(45, sp.getEndPosition(unit, node)); return super.visitSequenceIndexed(node, p); } }; scanner.scan(unit, null); } } finally { Thread.currentThread().setContextClassLoader(orig); } } private static File getTmpDir() { try { File f = File.createTempFile("dummy", "file"); f.deleteOnExit(); File tmpdir = f.getParentFile(); if (tmpdir != null) return tmpdir; } catch (IOException ex) { } File f = new File("test-output"); f.mkdir(); return f; } }