From e5bd01ff28df7bf093dd2b42dab5e479aabccfe6 Mon Sep 17 00:00:00 2001 From: Lada Gagina Date: Mon, 18 Jan 2021 16:57:31 +0500 Subject: [PATCH] PY-44026 Add unit tests to completion with auto-import GitOrigin-RevId: 7965daa063753606ea1d3de9f9bc0829c51fbabf --- .../DotAfterPackageName/foobar/__init__.py | 0 .../DotAfterPackageName/main.after.py | 1 + .../DotAfterPackageName/main.py | 1 + .../foo/__init__.py | 0 .../ImportForModuleClassIsAdded/foo/bar.py | 3 +++ .../ImportForModuleClassIsAdded/main.after.py | 3 +++ .../ImportForModuleClassIsAdded/main.py | 1 + .../foo/__init__.py | 0 .../ImportForModuleFunctionIsAdded/foo/bar.py | 2 ++ .../main.after.py | 3 +++ .../ImportForModuleFunctionIsAdded/main.py | 1 + .../bar.py | 6 +++++ .../foo/__init__.py | 0 .../foo/bar.py | 2 ++ .../main.py | 1 + ...yNotImportedPackageNameCompletionTest.java | 22 +++++++++++++++++ ...otImportedQualifiedNameCompletionTest.java | 24 +++++++++++++++++++ 17 files changed, 70 insertions(+) create mode 100644 python/testData/completion/notImportedPackageName/DotAfterPackageName/foobar/__init__.py create mode 100644 python/testData/completion/notImportedPackageName/DotAfterPackageName/main.after.py create mode 100644 python/testData/completion/notImportedPackageName/DotAfterPackageName/main.py create mode 100644 python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/foo/__init__.py create mode 100644 python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/foo/bar.py create mode 100644 python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/main.after.py create mode 100644 python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/main.py create mode 100644 python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/foo/__init__.py create mode 100644 python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/foo/bar.py create mode 100644 python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/main.after.py create mode 100644 python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/main.py create mode 100644 python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/bar.py create mode 100644 python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/foo/__init__.py create mode 100644 python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/foo/bar.py create mode 100644 python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/main.py create mode 100644 python/testSrc/com/jetbrains/python/PyNotImportedPackageNameCompletionTest.java diff --git a/python/testData/completion/notImportedPackageName/DotAfterPackageName/foobar/__init__.py b/python/testData/completion/notImportedPackageName/DotAfterPackageName/foobar/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/completion/notImportedPackageName/DotAfterPackageName/main.after.py b/python/testData/completion/notImportedPackageName/DotAfterPackageName/main.after.py new file mode 100644 index 000000000000..0ba925a223c5 --- /dev/null +++ b/python/testData/completion/notImportedPackageName/DotAfterPackageName/main.after.py @@ -0,0 +1 @@ +foobar. \ No newline at end of file diff --git a/python/testData/completion/notImportedPackageName/DotAfterPackageName/main.py b/python/testData/completion/notImportedPackageName/DotAfterPackageName/main.py new file mode 100644 index 000000000000..ec89ef7ca1c1 --- /dev/null +++ b/python/testData/completion/notImportedPackageName/DotAfterPackageName/main.py @@ -0,0 +1 @@ +fooba \ No newline at end of file diff --git a/python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/foo/__init__.py b/python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/foo/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/foo/bar.py b/python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/foo/bar.py new file mode 100644 index 000000000000..6f0446b2f53a --- /dev/null +++ b/python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/foo/bar.py @@ -0,0 +1,3 @@ +class MyClass: + def __init__(self): + pass diff --git a/python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/main.after.py b/python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/main.after.py new file mode 100644 index 000000000000..0a835a82275d --- /dev/null +++ b/python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/main.after.py @@ -0,0 +1,3 @@ +import foo.bar + +foo.bar.MyClass \ No newline at end of file diff --git a/python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/main.py b/python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/main.py new file mode 100644 index 000000000000..4785afe86256 --- /dev/null +++ b/python/testData/completion/notImportedQualifiedName/ImportForModuleClassIsAdded/main.py @@ -0,0 +1 @@ +foo.bar. \ No newline at end of file diff --git a/python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/foo/__init__.py b/python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/foo/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/foo/bar.py b/python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/foo/bar.py new file mode 100644 index 000000000000..b9bfa6f12339 --- /dev/null +++ b/python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/foo/bar.py @@ -0,0 +1,2 @@ +def func(): + pass diff --git a/python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/main.after.py b/python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/main.after.py new file mode 100644 index 000000000000..a26556457d94 --- /dev/null +++ b/python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/main.after.py @@ -0,0 +1,3 @@ +import foo.bar + +foo.bar.func() \ No newline at end of file diff --git a/python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/main.py b/python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/main.py new file mode 100644 index 000000000000..4785afe86256 --- /dev/null +++ b/python/testData/completion/notImportedQualifiedName/ImportForModuleFunctionIsAdded/main.py @@ -0,0 +1 @@ +foo.bar. \ No newline at end of file diff --git a/python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/bar.py b/python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/bar.py new file mode 100644 index 000000000000..fc9b07c82439 --- /dev/null +++ b/python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/bar.py @@ -0,0 +1,6 @@ +def func(): + pass + + +def func1(): + pass diff --git a/python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/foo/__init__.py b/python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/foo/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/foo/bar.py b/python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/foo/bar.py new file mode 100644 index 000000000000..b9bfa6f12339 --- /dev/null +++ b/python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/foo/bar.py @@ -0,0 +1,2 @@ +def func(): + pass diff --git a/python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/main.py b/python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/main.py new file mode 100644 index 000000000000..ce387ca9cc69 --- /dev/null +++ b/python/testData/completion/notImportedQualifiedName/QualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName/main.py @@ -0,0 +1 @@ +bar. \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyNotImportedPackageNameCompletionTest.java b/python/testSrc/com/jetbrains/python/PyNotImportedPackageNameCompletionTest.java new file mode 100644 index 000000000000..5ba956a0b501 --- /dev/null +++ b/python/testSrc/com/jetbrains/python/PyNotImportedPackageNameCompletionTest.java @@ -0,0 +1,22 @@ +// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.jetbrains.python; + +import com.intellij.psi.util.QualifiedName; +import com.jetbrains.python.fixtures.PyTestCase; +import com.jetbrains.python.psi.stubs.PyQualifiedNameCompletionMatcher.QualifiedNameMatcher; + +import java.util.List; + +public class PyNotImportedPackageNameCompletionTest extends PyTestCase { + public void testDotAfterPackageName() { + myFixture.copyDirectoryToProject(getTestName(false), ""); + myFixture.configureByFile("main.py"); + myFixture.completeBasic(); + myFixture.checkResultByFile(getTestName(true) + "/main.after.py"); + } + + @Override + protected String getTestDataPath() { + return super.getTestDataPath() + "/completion/notImportedPackageName/"; + } +} diff --git a/python/testSrc/com/jetbrains/python/PyNotImportedQualifiedNameCompletionTest.java b/python/testSrc/com/jetbrains/python/PyNotImportedQualifiedNameCompletionTest.java index 4603ba4cf0d8..370cae3bfa94 100644 --- a/python/testSrc/com/jetbrains/python/PyNotImportedQualifiedNameCompletionTest.java +++ b/python/testSrc/com/jetbrains/python/PyNotImportedQualifiedNameCompletionTest.java @@ -18,6 +18,16 @@ public class PyNotImportedQualifiedNameCompletionTest extends PyTestCase { assertContainsElements(variants, "bar.func", "baz.quux.func"); } + public void testQualifiedNamesAlwaysMatchedByFirstComponentOfQualifierWithEmptyAttributeName() { + myFixture.copyDirectoryToProject(getTestName(false), ""); + myFixture.configureByFile("main.py"); + myFixture.completeBasic(); + List variants = myFixture.getLookupElementStrings(); + assertNotNull(variants); + assertDoesntContain(variants, "foo.bar.func"); + assertContainsElements(variants, "bar.func", "bar.func1"); + } + public void testQualifiedNameMatcherTest() { QualifiedNameMatcher matcher = new QualifiedNameMatcher(QualifiedName.fromDottedString("foo.bar.baz")); assertTrue(matcher.prefixMatches("foo.bar.baz")); @@ -35,6 +45,20 @@ public class PyNotImportedQualifiedNameCompletionTest extends PyTestCase { assertFalse(matcher.prefixMatches("xxx.foo.bar.baz")); } + public void testImportForModuleFunctionIsAdded() { + myFixture.copyDirectoryToProject(getTestName(false), ""); + myFixture.configureByFile("main.py"); + myFixture.completeBasic(); + myFixture.checkResultByFile(getTestName(true) + "/main.after.py"); + } + + public void testImportForModuleClassIsAdded() { + myFixture.copyDirectoryToProject(getTestName(false), ""); + myFixture.configureByFile("main.py"); + myFixture.completeBasic(); + myFixture.checkResultByFile(getTestName(true) + "/main.after.py"); + } + @Override protected String getTestDataPath() { return super.getTestDataPath() + "/completion/notImportedQualifiedName/";