mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
231 lines
7.2 KiB
Java
231 lines
7.2 KiB
Java
/*
|
|
* Copyright 2000-2013 JetBrains s.r.o.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package com.jetbrains.python;
|
|
|
|
import com.intellij.codeInsight.completion.impl.CamelHumpMatcher;
|
|
import com.jetbrains.python.fixtures.PyTestCase;
|
|
import com.jetbrains.python.psi.LanguageLevel;
|
|
import com.jetbrains.python.psi.impl.PythonLanguageLevelPusher;
|
|
|
|
import java.util.List;
|
|
|
|
public class PythonKeywordCompletionTest extends PyTestCase {
|
|
|
|
private void doTest3K() {
|
|
PythonLanguageLevelPusher.setForcedLanguageLevel(myFixture.getProject(), LanguageLevel.PYTHON30);
|
|
try {
|
|
doTest();
|
|
}
|
|
finally {
|
|
PythonLanguageLevelPusher.setForcedLanguageLevel(myFixture.getProject(), null);
|
|
}
|
|
}
|
|
|
|
private void doTest() {
|
|
CamelHumpMatcher.forceStartMatching(getTestRootDisposable());
|
|
final String testName = "keywordCompletion/" + getTestName(true);
|
|
myFixture.configureByFile(testName + ".py");
|
|
myFixture.completeBasic();
|
|
myFixture.checkResultByFile(testName + ".after.py");
|
|
}
|
|
|
|
private List<String> doTestByText(String text) {
|
|
myFixture.configureByText(PythonFileType.INSTANCE, text);
|
|
myFixture.completeBasic();
|
|
return myFixture.getLookupElementStrings();
|
|
}
|
|
|
|
public void testKeywordAfterComment() { // PY-697
|
|
doTest();
|
|
}
|
|
|
|
public void testEmptyFile() { // PY-1845
|
|
myFixture.configureByText(PythonFileType.INSTANCE, "");
|
|
myFixture.completeBasic();
|
|
final List<String> elements = myFixture.getLookupElementStrings();
|
|
assertNotNull(elements);
|
|
assertTrue(elements.contains("import"));
|
|
}
|
|
|
|
public void testNonlocal() { // PY-2289
|
|
doTest3K();
|
|
}
|
|
|
|
public void testYield() {
|
|
doTest();
|
|
}
|
|
|
|
public void testElse() {
|
|
doTest();
|
|
}
|
|
|
|
public void testElseNotIndented() {
|
|
doTest();
|
|
}
|
|
|
|
public void testElseInTryNotIndented() {
|
|
doTest();
|
|
}
|
|
|
|
public void testElif() {
|
|
doTest();
|
|
}
|
|
|
|
public void testElifNotIndented() {
|
|
doTest();
|
|
}
|
|
|
|
public void testExcept() {
|
|
doTest();
|
|
}
|
|
|
|
public void testExceptNotIndented() {
|
|
doTest();
|
|
}
|
|
|
|
public void testFinallyInExcept() {
|
|
doTest();
|
|
}
|
|
|
|
public void testContinue() {
|
|
doTest();
|
|
}
|
|
|
|
public void testNoContinueInFinally() {
|
|
final String testName = "keywordCompletion/" + getTestName(true);
|
|
myFixture.configureByFile(testName + ".py");
|
|
myFixture.completeBasic();
|
|
final List<String> lookupElementStrings = myFixture.getLookupElementStrings();
|
|
assertNotNull(lookupElementStrings);
|
|
assertDoesntContain(lookupElementStrings, "continue");
|
|
}
|
|
|
|
public void testNoElifBeforeElse() {
|
|
final String testName = "keywordCompletion/" + getTestName(true);
|
|
myFixture.configureByFile(testName + ".py");
|
|
myFixture.completeBasic();
|
|
final List<String> lookupElementStrings = myFixture.getLookupElementStrings();
|
|
assertNotNull(lookupElementStrings);
|
|
assertDoesntContain(lookupElementStrings, "elif");
|
|
}
|
|
|
|
public void testNoElseBeforeExcept() {
|
|
final List<String> lookupElementStrings = doTestByText("try:\n" +
|
|
" a = 1\n" +
|
|
"<caret>");
|
|
assertNotNull(lookupElementStrings);
|
|
assertDoesntContain(lookupElementStrings, "else");
|
|
}
|
|
|
|
public void testElseInCondExpr() { // PY-2397
|
|
doTest();
|
|
}
|
|
|
|
public void testFromDotImport() { // PY-2772
|
|
doTest3K();
|
|
}
|
|
|
|
public void testLambdaInExpression() { // PY-3150
|
|
doTest();
|
|
}
|
|
|
|
public void testNoneInArgList() { // PY-3464
|
|
doTest3K();
|
|
}
|
|
|
|
// PY-5144
|
|
public void testImportKeyword() {
|
|
doTest();
|
|
}
|
|
|
|
public void testAsInWith() { // PY-3701
|
|
setLanguageLevel(LanguageLevel.PYTHON27);
|
|
assertTrue(doTestByText("with open(foo) <caret>").contains("as"));
|
|
}
|
|
|
|
public void testAsInExcept() { // PY-1846
|
|
setLanguageLevel(LanguageLevel.PYTHON27);
|
|
assertTrue(doTestByText("try:\n" +
|
|
" pass\n" +
|
|
"except IOError <caret>").contains("as"));
|
|
}
|
|
|
|
public void testElseInFor() { // PY-6755
|
|
assertTrue(doTestByText("for item in range(10):\n" +
|
|
" pass\n" +
|
|
"el<caret>").contains("else"));
|
|
}
|
|
|
|
public void testFinallyInElse() { // PY-6755
|
|
doTest();
|
|
}
|
|
|
|
public void testForInComprehension() { // PY-3687
|
|
assertContainsElements(doTestByText("L = [x fo<caret>]"), "for");
|
|
assertContainsElements(doTestByText("L = [x <caret>]"), "for");
|
|
assertContainsElements(doTestByText("L = [x <caret> x in y]"), "for");
|
|
|
|
assertDoesntContain(doTestByText("L = [<caret>]"), "for");
|
|
assertDoesntContain(doTestByText("L = [x for x <caret>]"), "for");
|
|
assertDoesntContain(doTestByText("L = [x for x <caret> in y]"), "for");
|
|
}
|
|
|
|
public void testInInComprehension() { // PY-3687
|
|
assertContainsElements(doTestByText("L = [x for x <caret>]"), "in");
|
|
assertContainsElements(doTestByText("L = [x for x i<caret>]"), "in");
|
|
assertContainsElements(doTestByText("L = [x for x i<caret>n y]"), "in");
|
|
|
|
assertDoesntContain(doTestByText("L = [<caret>]"), "in");
|
|
assertDoesntContain(doTestByText("L = [x <caret> for]"), "in");
|
|
assertDoesntContain(doTestByText("L = [x <caret>]"), "in");
|
|
}
|
|
|
|
public void testInInFor() { // PY-10248
|
|
assertContainsElements(doTestByText("for x <caret>"), "in");
|
|
assertContainsElements(doTestByText("for x i<caret>"), "in");
|
|
assertContainsElements(doTestByText("for x i<caret>n y:\n pass]"), "in");
|
|
}
|
|
|
|
// PY-11375
|
|
public void testYieldExpression() {
|
|
assertContainsElements(doTestByText("def gen(): x = <caret>"), "yield");
|
|
assertDoesntContain(doTestByText("def gen(): x = 1 + <caret>"), "yield");
|
|
assertContainsElements(doTestByText("def gen(): x = 1 + (<caret>"), "yield");
|
|
assertContainsElements(doTestByText("def gen(): x **= <caret>"), "yield");
|
|
assertDoesntContain(doTestByText("def gen(): func(<caret>)"), "yield");
|
|
assertContainsElements(doTestByText("def gen(): func((<caret>"), "yield");
|
|
assertDoesntContain(doTestByText("def gen(): x = y<caret> = 42"), "yield");
|
|
}
|
|
|
|
public void testExceptAfterElse() {
|
|
assertDoesntContain(doTestByText("try:\n" +
|
|
" pass\n" +
|
|
"except ArithmeticError:\n" +
|
|
" pass\n" +
|
|
"else:\n" +
|
|
" pass\n<caret>"), "except");
|
|
}
|
|
|
|
public void testExceptAfterFinally() {
|
|
assertDoesntContain(doTestByText("try:\n" +
|
|
" pass\n" +
|
|
"except ArithmeticError:\n" +
|
|
" pass\n" +
|
|
"finally:\n" +
|
|
" pass\n<caret>"), "except");
|
|
}
|
|
}
|