/** * 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.editor.codecompletion.revisited.visitors; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.jface.text.Document; import org.python.pydev.core.IToken; import org.python.pydev.editor.codecompletion.revisited.CodeCompletionTestsBase; import org.python.pydev.editor.codecompletion.revisited.modules.AbstractModule; import org.python.pydev.editor.codecompletion.revisited.modules.SourceModule; import org.python.pydev.editor.codecompletion.revisited.modules.SourceToken; import org.python.pydev.parser.jython.SimpleNode; import org.python.pydev.parser.jython.ast.Import; import org.python.pydev.parser.jython.ast.ImportFrom; import org.python.pydev.parser.visitors.scope.ASTEntry; import org.python.pydev.parser.visitors.scope.EasyASTIteratorVisitor; import org.python.pydev.plugin.PydevPlugin; import org.python.pydev.ui.BundleInfoStub; import junit.framework.TestCase; public class AbstractVisitorTest extends TestCase { private String MODULE_NAME; public static void main(String[] args) { junit.textui.TestRunner.run(AbstractVisitorTest.class); } protected void setUp() throws Exception { super.setUp(); PydevPlugin.setBundleInfo(new BundleInfoStub()); MODULE_NAME = "testModule"; } protected void tearDown() throws Exception { super.tearDown(); PydevPlugin.setBundleInfo(null); } public void testImportCreation1() throws Exception { Iterator<ASTEntry> iterator = createModuleAndGetImports("import os.path", Import.class); SimpleNode simpleNode = iterator.next().node; List<IToken> toks = AbstractVisitor.makeImportToken(simpleNode, new ArrayList<IToken>(), MODULE_NAME, true); assertEquals(2, toks.size()); SourceToken token = (SourceToken) toks.get(0); checkIt(simpleNode, token, "os", "os", "os"); token = (SourceToken) toks.get(1); checkIt(simpleNode, token, "os.path", "os.path", "os.path"); } public void testImportCreation2() throws Exception { Iterator<ASTEntry> iterator = createModuleAndGetImports("from os import path, notDefined", ImportFrom.class); SimpleNode simpleNode = iterator.next().node; List<IToken> toks = AbstractVisitor.makeImportToken(simpleNode, new ArrayList<IToken>(), MODULE_NAME, true); assertEquals(2, toks.size()); SourceToken token = (SourceToken) toks.get(0); checkIt(simpleNode, token, "path", "os.path", "os.path"); token = (SourceToken) toks.get(1); checkIt(simpleNode, token, "notDefined", "os.notDefined", "os.notDefined"); } public void testImportCreation3() throws Exception { Iterator<ASTEntry> iterator = createModuleAndGetImports("from os import path as tt, notDefined as aa", ImportFrom.class); SimpleNode simpleNode = iterator.next().node; List<IToken> toks = AbstractVisitor.makeImportToken(simpleNode, new ArrayList<IToken>(), MODULE_NAME, true); assertEquals(2, toks.size()); SourceToken token = (SourceToken) toks.get(0); checkIt(simpleNode, token, "tt", "os.path", "os.path"); token = (SourceToken) toks.get(1); checkIt(simpleNode, token, "aa", "os.notDefined", "os.notDefined"); } public void testImportCreation4() throws Exception { Iterator<ASTEntry> iterator = createModuleAndGetImports("from os.path import *", ImportFrom.class); SimpleNode simpleNode = iterator.next().node; List<IToken> toks = AbstractVisitor.makeImportToken(simpleNode, new ArrayList<IToken>(), MODULE_NAME, true); assertEquals(1, toks.size()); SourceToken token = (SourceToken) toks.get(0); checkIt(simpleNode, token, "os.path", "os.path", "os.path"); } public void testImportCreation5() throws Exception { Iterator<ASTEntry> iterator = createModuleAndGetImports("from os.path import *", ImportFrom.class); MODULE_NAME = "some.dotted.name"; SimpleNode simpleNode = iterator.next().node; List<IToken> toks = AbstractVisitor.makeImportToken(simpleNode, new ArrayList<IToken>(), "some.dotted.name", true); assertEquals(1, toks.size()); SourceToken token = (SourceToken) toks.get(0); checkIt(simpleNode, token, "os.path", "some.dotted.os.path", "os.path"); } private void checkIt(SimpleNode simpleNode, SourceToken token, String rep, String relativeImport, String originalRep) { assertEquals(rep, token.getRepresentation()); assertSame(simpleNode, token.getAst()); assertEquals(relativeImport, token.getAsRelativeImport(MODULE_NAME)); assertEquals(originalRep, token.getOriginalRep()); } private Iterator<ASTEntry> createModuleAndGetImports(String strDoc, Class classToGet) throws Exception { Document document = new Document(strDoc); SourceModule module = (SourceModule) AbstractModule.createModuleFromDoc(MODULE_NAME, null, document, CodeCompletionTestsBase.createStaticNature(), true); EasyASTIteratorVisitor visitor = new EasyASTIteratorVisitor(); module.getAst().accept(visitor); Iterator<ASTEntry> iterator = visitor.getIterator(classToGet); return iterator; } }