/**
* 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.
*/
/*
* Created on Mar 11, 2005
*
* @author Fabio Zadrozny
*/
package org.python.pydev.editor.codecompletion;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.text.Document;
import org.python.pydev.core.ICompletionState;
import org.python.pydev.core.IToken;
import org.python.pydev.core.TestDependent;
import org.python.pydev.core.docutils.PySelection;
import org.python.pydev.core.log.Log;
import org.python.pydev.core.structure.CompletionRecursionException;
import org.python.pydev.editor.codecompletion.revisited.CodeCompletionTestsBase;
import org.python.pydev.editor.codecompletion.revisited.CompletionState;
import org.python.pydev.editor.codecompletion.revisited.modules.CompiledModule;
import org.python.pydev.plugin.nature.SystemPythonNature;
import com.aptana.shared_core.callbacks.ICallback;
/**
* @author Fabio Zadrozny
*/
public class PyCodeCompletion2Test extends CodeCompletionTestsBase {
public static void main(String[] args) {
junit.textui.TestRunner.run(PyCodeCompletion2Test.class);
}
/*
* @see TestCase#setUp()
*/
public void setUp() throws Exception {
super.setUp();
CompiledModule.COMPILED_MODULES_ENABLED = false;
this.restorePythonPath(TestDependent.GetCompletePythonLib(true) +
"|" + TestDependent.PYTHON_PIL_PACKAGES,
false);
this.restorePythonPath(false);
codeCompletion = new PyCodeCompletion();
PyCodeCompletion.onCompletionRecursionException = new ICallback<Object, CompletionRecursionException>() {
public Object call(CompletionRecursionException e) {
throw new RuntimeException("Recursion error:" + Log.getExceptionStr(e));
}
};
}
public void testSelfOrClsCompletion() throws Exception {
String s = "" +
"class B:\n" +
" def m2(self):\n" +
" pass\n" +
"\n" +
"class A:\n"
+
" m1 = B()\n" +
" def foo(self):\n" +
" self.m1." +
"";
SystemPythonNature nature = new SystemPythonNature(PyCodeCompletion2Test.nature.getRelatedInterpreterManager());
PySelection ps = new PySelection(new Document(s), s.length() - 1);
ICompletionState state = new CompletionState(ps.getStartLineIndex(), ps.getAbsoluteCursorOffset()
- ps.getStartLine().getOffset(), null, nature, "");
CompletionRequest request = new CompletionRequest(null, nature, ps.getDoc(), "self.m1",
ps.getAbsoluteCursorOffset(), 0, new PyCodeCompletion(), "");
List<IToken> selfCompletions = new ArrayList<IToken>();
PyCodeCompletion.getSelfOrClsCompletions(request, selfCompletions, state, false, false, "self.m1");
assertEquals(1, selfCompletions.size());
assertEquals("m2", selfCompletions.get(0).getRepresentation());
}
}