/**
* Copyright (c) 2005-2013 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;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.swt.graphics.Point;
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.modules.CompiledModule;
import org.python.pydev.shared_core.callbacks.ICallback;
import org.python.pydev.shared_core.string.StringUtils;
public class PythonApplyCompletionsTest extends CodeCompletionTestsBase {
public static void main(String[] args) {
try {
// DEBUG_TESTS_BASE = true;
PythonApplyCompletionsTest test = new PythonApplyCompletionsTest();
test.setUp();
test.testApply3();
test.tearDown();
System.out.println("Finished");
junit.textui.TestRunner.run(PythonApplyCompletionsTest.class);
} catch (Exception e) {
e.printStackTrace();
} catch (Error e) {
e.printStackTrace();
}
}
/*
* @see TestCase#setUp()
*/
@Override
public void setUp() throws Exception {
super.setUp();
CompiledModule.COMPILED_MODULES_ENABLED = false;
this.restorePythonPath(false);
codeCompletion = new PyCodeCompletion();
PyCodeCompletion.onCompletionRecursionException = new ICallback<Object, CompletionRecursionException>() {
@Override
public Object call(CompletionRecursionException e) {
throw new RuntimeException("Recursion error:" + Log.getExceptionStr(e));
}
};
}
/*
* @see TestCase#tearDown()
*/
@Override
public void tearDown() throws Exception {
CompiledModule.COMPILED_MODULES_ENABLED = true;
super.tearDown();
PyCodeCompletion.onCompletionRecursionException = null;
}
public void testApply1() throws Exception {
String s0 = "from extendable.nested2 import mod2, mod3\n" +
"mod%s";
String s = StringUtils.format(s0, "2");
int offset = s.length() - 1;
ICompletionProposal[] proposals = requestCompl(s, offset, -1, new String[] {});
assertEquals(1, proposals.length);
PyLinkedModeCompletionProposal p = (PyLinkedModeCompletionProposal) proposals[0];
Document d = new Document(s);
p.fLen = 1;
p.applyOnDoc(offset, true, d, 3, '\n');
assertEquals(StringUtils.format(s0, "3"), d.get());
}
public void testApply2() throws Exception {
String s = "class XX:\n" +
" def method1(self, a, b):\n" +
" return 1\n" +
" def foo(self):\n"
+
" self.metho";
int offset = s.length();
ICompletionProposal[] proposals = requestCompl(s, offset, -1, new String[] {});
assertEquals(1, proposals.length);
PyLinkedModeCompletionProposal p = (PyLinkedModeCompletionProposal) proposals[0];
Document d = new Document(s);
p.applyOnDoc(offset, false, d, "metho".length(), '.');
//System.out.println(d.get());
assertEquals(s +
"d1.", d.get());
assertEquals(new Point(d.getLength(), 0), p.getSelection(d));
}
public void testApply3() throws Exception {
String s = "class XX:\n" +
" def method1(self, a, b):\n" +
" return 1\n" +
" def foo(self):\n"
+
" self.metho";
int offset = s.length() - 1;
ICompletionProposal[] proposals = requestCompl(s, offset, -1, new String[] {});
assertEquals(1, proposals.length);
PyLinkedModeCompletionProposal p = (PyLinkedModeCompletionProposal) proposals[0];
p.fLen = 1;
Document d = new Document(s);
p.applyOnDoc(offset, true, d, "meth".length(), '\n');
//System.out.println(d.get());
assertEquals(s +
"d1", d.get());
assertEquals(new Point(d.getLength(), 0), p.getSelection(d));
}
public void testApply4() throws Exception {
String s = "class XX:\n" +
" def method1(self, a, b):\n" +
" return 1\n" +
" def foo(self):\n"
+
" self.metho";
int offset = s.length() - 1;
ICompletionProposal[] proposals = requestCompl(s, offset, -1, new String[] {});
assertEquals(1, proposals.length);
PyLinkedModeCompletionProposal p = (PyLinkedModeCompletionProposal) proposals[0];
p.fLen = 1;
Document d = new Document(s);
p.applyOnDoc(offset, true, d, "meth".length(), '(');
//System.out.println(d.get());
assertEquals(s +
"d1", d.get());
assertEquals(new Point(d.getLength(), 0), p.getSelection(d));
}
public void testApply5() throws Exception {
String s = "class XX:\n" +
" def method1(self, a, b):\n" +
" return 1\n" +
" def foo(self):\n"
+
" self.meth";
int offset = s.length();
ICompletionProposal[] proposals = requestCompl(s, offset, -1, new String[] {});
assertEquals(1, proposals.length);
PyLinkedModeCompletionProposal p = (PyLinkedModeCompletionProposal) proposals[0];
Document d = new Document(s);
p.applyOnDoc(offset, false, d, 4, '(');
//System.out.println(d.get());
assertEquals(s +
"od1()", d.get());
assertEquals(new Point(d.getLength() - 1, 0), p.getSelection(d));
}
public void testApply6() throws Exception {
String s = "class XX:\n" +
" def method1(self, a, b):\n" +
" return 1\n" +
" def foo(self):\n"
+
" self.meth";
int offset = s.length();
ICompletionProposal[] proposals = requestCompl(s, offset, -1, new String[] {});
assertEquals(1, proposals.length);
PyLinkedModeCompletionProposal p = (PyLinkedModeCompletionProposal) proposals[0];
Document d = new Document(s);
p.applyOnDoc(offset, false, d, 4, ')');
//System.out.println(d.get());
assertEquals(s +
"od1(a, b)", d.get());
assertEquals(new Point(d.getLength() - "a, b)".length(), 0), p.getSelection(d));
}
}