/** * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.refactoring.ast.visitors; import java.util.Comparator; import java.util.List; import java.util.Set; import java.util.TreeSet; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.TextSelection; import org.python.pydev.parser.PyParserTestBase; import org.python.pydev.parser.jython.SimpleNode; import org.python.pydev.parser.jython.ast.Expr; import org.python.pydev.parser.jython.ast.Module; import org.python.pydev.parser.jython.ast.stmtType; import com.aptana.shared_core.structure.Tuple; /** * @author fabioz * */ public class FindDuplicatesVisitorTest extends PyParserTestBase { public void testFindDuplicates() throws Exception { String s = "" + "a.get()\n" + // 0 - 8 "a.get().bar\n" + //8 - 20 "a.get().a.get()\n" + //20 - 36 "a.get( ).foo\n" + //36 - 50 "a.get( #comma.get()ent\n ).foo\n" + //50 - 80 "a.\\\nget().foo\n" + //80 ""; Module mod = (Module) parseLegalDocStr(s); stmtType b0 = mod.body[0]; Document doc = new Document(s); FindDuplicatesVisitor visitor = new FindDuplicatesVisitor(new TextSelection(doc, 0, 7), ((Expr) b0).value, doc); mod.accept(visitor); List<Tuple<ITextSelection, SimpleNode>> duplicates = visitor.getDuplicates(); Comparator<? super Tuple<Integer, Integer>> comparator = new Comparator<Tuple<Integer, Integer>>() { public int compare(Tuple<Integer, Integer> o1, Tuple<Integer, Integer> o2) { int comp = o1.o1.compareTo(o2.o1); if (comp != 0) { return comp; } return o1.o2.compareTo(o2.o2); } }; Set<Tuple<Integer, Integer>> expected = new TreeSet<Tuple<Integer, Integer>>(comparator); expected.add(new Tuple<Integer, Integer>(8, 7)); expected.add(new Tuple<Integer, Integer>(20, 7)); expected.add(new Tuple<Integer, Integer>(36, 9)); expected.add(new Tuple<Integer, Integer>(50, 25)); expected.add(new Tuple<Integer, Integer>(80, 9)); assertEquals(expected.size(), duplicates.size()); Set<Tuple<Integer, Integer>> found = new TreeSet<Tuple<Integer, Integer>>(comparator); for (Tuple<ITextSelection, SimpleNode> tuple : duplicates) { found.add(new Tuple<Integer, Integer>(tuple.o1.getOffset(), tuple.o1.getLength())); } assertEquals(expected, found); } }