mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
tests for requirements.txt generation (PY-18847)
GitOrigin-RevId: c810bc697aed8d73a62eb6759d870831b840e90e
This commit is contained in:
committed by
intellij-monorepo-bot
parent
08a97b7b59
commit
432e9ff2b2
@@ -0,0 +1,3 @@
|
||||
import django as dj
|
||||
import requests
|
||||
import numpy
|
||||
@@ -0,0 +1,3 @@
|
||||
requests==2.22.0
|
||||
Django==3.0.0
|
||||
numpy==1.18.1
|
||||
@@ -0,0 +1 @@
|
||||
requests==2.21.0
|
||||
@@ -0,0 +1,5 @@
|
||||
import django
|
||||
import requests
|
||||
import Jinja2
|
||||
import pandas
|
||||
import cookiecutter
|
||||
@@ -0,0 +1,5 @@
|
||||
Django==3.0.0
|
||||
requests==2.22.0
|
||||
Jinja2==2.11.1
|
||||
pandas==1.0.1
|
||||
cookiecutter==1.7.0
|
||||
@@ -0,0 +1,5 @@
|
||||
Django
|
||||
requests
|
||||
Jinja2
|
||||
pandas
|
||||
cookiecutter
|
||||
@@ -0,0 +1,5 @@
|
||||
import django
|
||||
import requests
|
||||
import Jinja2
|
||||
import pandas
|
||||
import numpy
|
||||
@@ -0,0 +1,5 @@
|
||||
Django~=3.0.0
|
||||
requests~=2.22.0
|
||||
Jinja2~=2.11.1
|
||||
pandas~=1.0.1
|
||||
numpy~=1.18.1
|
||||
@@ -0,0 +1,5 @@
|
||||
Django
|
||||
requests
|
||||
Jinja2
|
||||
pandas
|
||||
numpy
|
||||
@@ -0,0 +1,3 @@
|
||||
# all the packages here match by version
|
||||
requests==2.22.0
|
||||
Django>=3.0.0
|
||||
@@ -0,0 +1,3 @@
|
||||
import django as dj
|
||||
import requests
|
||||
import numpy
|
||||
@@ -0,0 +1,2 @@
|
||||
-r base_requirements.txt
|
||||
numpy==1.18.1
|
||||
@@ -0,0 +1 @@
|
||||
-r base_requirements.txt
|
||||
@@ -0,0 +1,7 @@
|
||||
# this does match the project imports
|
||||
requests==2.22.0
|
||||
Django>=3.0.0
|
||||
# but this doesn't
|
||||
pyplot
|
||||
toml==0.10.0
|
||||
pandas==1.0.1
|
||||
@@ -0,0 +1,3 @@
|
||||
import django as dj
|
||||
import requests
|
||||
import numpy
|
||||
@@ -0,0 +1,3 @@
|
||||
requests==2.22.0
|
||||
Django>=3.0.0
|
||||
numpy==1.18.1
|
||||
@@ -0,0 +1 @@
|
||||
-r base_requirements.txt
|
||||
@@ -0,0 +1,2 @@
|
||||
import django
|
||||
import numpy
|
||||
@@ -0,0 +1,5 @@
|
||||
# This is a comment in requirements file
|
||||
# One more
|
||||
Django==3.0.0
|
||||
# And another
|
||||
numpy==1.18.1
|
||||
@@ -0,0 +1,5 @@
|
||||
# This is a comment in requirements file
|
||||
requests==2.22.0
|
||||
# One more
|
||||
Django==3.0.0
|
||||
# And another
|
||||
@@ -0,0 +1,2 @@
|
||||
import django
|
||||
import numpy
|
||||
@@ -0,0 +1,3 @@
|
||||
-e .
|
||||
Django==3.0.0
|
||||
numpy==1.18.1
|
||||
@@ -0,0 +1,2 @@
|
||||
-e .
|
||||
Django
|
||||
@@ -0,0 +1,3 @@
|
||||
import django
|
||||
import numpy
|
||||
import tox
|
||||
@@ -0,0 +1,3 @@
|
||||
Django==3.0.0
|
||||
-e git+https://github.com/tox-dev/tox.git@fcba59158f853c4da38f164dbf8523b1aeb0fedf#egg=tox
|
||||
numpy==1.18.1
|
||||
@@ -0,0 +1,2 @@
|
||||
Django
|
||||
-e git+https://github.com/tox-dev/tox.git@fcba59158f853c4da38f164dbf8523b1aeb0fedf#egg=tox
|
||||
@@ -0,0 +1,2 @@
|
||||
import requests
|
||||
import cookiecutter
|
||||
@@ -0,0 +1,5 @@
|
||||
--no-index
|
||||
--find-links http://some.archives.com/archives
|
||||
requests==2.22.0
|
||||
--no-binary
|
||||
cookiecutter==1.7.0
|
||||
@@ -0,0 +1,4 @@
|
||||
--no-index
|
||||
--find-links http://some.archives.com/archives
|
||||
requests
|
||||
--no-binary
|
||||
@@ -0,0 +1,3 @@
|
||||
import django
|
||||
import numpy
|
||||
import requests
|
||||
@@ -0,0 +1,3 @@
|
||||
requests>=2.1.0
|
||||
Django==3.0.0
|
||||
numpy==1.18.1
|
||||
@@ -0,0 +1 @@
|
||||
requests>=2.1.0
|
||||
@@ -0,0 +1,2 @@
|
||||
import requests
|
||||
import cookiecutter
|
||||
@@ -0,0 +1,4 @@
|
||||
requests==2.22.0 --global-option="--no-user-cfg" \
|
||||
--install-option="--prefix='/usr/local'" \
|
||||
--install-option="--no-compile"
|
||||
cookiecutter==1.7.0
|
||||
@@ -0,0 +1,3 @@
|
||||
requests==2.22.0 --global-option="--no-user-cfg" \
|
||||
--install-option="--prefix='/usr/local'" \
|
||||
--install-option="--no-compile"
|
||||
@@ -0,0 +1,2 @@
|
||||
from django import apps
|
||||
import requests
|
||||
@@ -0,0 +1,2 @@
|
||||
requests==2.22.0
|
||||
Django==3.0.0
|
||||
@@ -0,0 +1,5 @@
|
||||
import django
|
||||
import requests
|
||||
import Jinja2
|
||||
import pandas
|
||||
import cookiecutter
|
||||
@@ -0,0 +1,5 @@
|
||||
Django
|
||||
requests
|
||||
Jinja2
|
||||
pandas
|
||||
cookiecutter
|
||||
@@ -0,0 +1,4 @@
|
||||
# these packages are not used in the project
|
||||
requests==2.22.0
|
||||
Django>=3.0.0
|
||||
numpy
|
||||
@@ -0,0 +1 @@
|
||||
import cookiecutter
|
||||
@@ -0,0 +1 @@
|
||||
cookiecutter==1.7.0
|
||||
@@ -0,0 +1 @@
|
||||
-r base_requirements.txt
|
||||
@@ -0,0 +1 @@
|
||||
import requests
|
||||
@@ -0,0 +1 @@
|
||||
requests==2.22.0
|
||||
@@ -0,0 +1,4 @@
|
||||
python-dateutil==2.8.1
|
||||
requests==2.22.0
|
||||
six==1.14.0
|
||||
toml==0.10.0
|
||||
@@ -0,0 +1,5 @@
|
||||
import django
|
||||
import requests
|
||||
import Jinja2
|
||||
import pandas
|
||||
import cookiecutter
|
||||
@@ -0,0 +1,5 @@
|
||||
Django
|
||||
requests
|
||||
Jinja2
|
||||
pandas
|
||||
cookiecutter
|
||||
@@ -0,0 +1,5 @@
|
||||
Django==3.0.0
|
||||
requests==2.22.0
|
||||
Jinja2==2.11.1
|
||||
pandas==1.0.1
|
||||
cookiecutter==1.7.0
|
||||
@@ -0,0 +1,2 @@
|
||||
import django
|
||||
import requests
|
||||
@@ -0,0 +1,2 @@
|
||||
Django
|
||||
-e /some/locations/we/dont/know
|
||||
@@ -0,0 +1,2 @@
|
||||
import django
|
||||
import requests
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
Django==3.0.0
|
||||
requests==2.22.0 --global-option="--no-user-cfg"\
|
||||
--install-option="--prefix='/usr/local'"\
|
||||
--install-option="--no-compile"
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
Django==2.0.0
|
||||
requests==1.11.0 --global-option="--no-user-cfg" \
|
||||
--install-option="--prefix='/usr/local'" \
|
||||
--install-option="--no-compile"
|
||||
@@ -0,0 +1,114 @@
|
||||
// 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.packaging
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.testFramework.registerServiceInstance
|
||||
import com.jetbrains.python.fixtures.PyTestCase
|
||||
import org.easymock.EasyMock
|
||||
|
||||
class PyRequirementsGenerationTest : PyTestCase() {
|
||||
|
||||
var oldPackageManagers: PyPackageManagers? = null
|
||||
|
||||
fun testNewFileGeneration() = doTest()
|
||||
fun testNewFileWithoutVersion() = doTest(PyRequirementsVersionSpecifierType.NO_VERSION)
|
||||
fun testAddMissingPackages() = doTest()
|
||||
fun testAddMissingVersion() = doTest()
|
||||
fun testStripVersion() = doTest(PyRequirementsVersionSpecifierType.NO_VERSION)
|
||||
fun testAddVersionWithSpecifier() = doTest(PyRequirementsVersionSpecifierType.COMPATIBLE)
|
||||
fun testKeepComments() = doTest()
|
||||
fun testKeepMatchingVersion() = doTest()
|
||||
fun testKeepFileInstallOptions() = doTest()
|
||||
fun testKeepPackageInstallOptions() = doTest()
|
||||
fun testKeepEditableFromVCS() = doTest()
|
||||
fun testKeepEditableForSelf() = doTest()
|
||||
fun testRemoveUnused() = doTest()
|
||||
fun testUpdateVersionKeepInstallOptions() = doTest()
|
||||
fun testCompatibleFileReference() = doTest()
|
||||
fun testRedundantFileReference() = doTest()
|
||||
fun testIncompatibleFileReference() = doTest()
|
||||
fun testUnhandledLine() = doTest { (lines, unhandled, _) ->
|
||||
assertSize(2, lines)
|
||||
assertContainsElements(lines, "Django==3.0.0", "requests==2.22.0")
|
||||
assertSize(1, unhandled)
|
||||
assertContainsElements(unhandled, "-e /some/locations/we/dont/know")
|
||||
}
|
||||
|
||||
|
||||
private fun doTest(versionSpecifier: PyRequirementsVersionSpecifierType = PyRequirementsVersionSpecifierType.STRONG_EQ,
|
||||
block: ((PyRequirementsAnalysisResult) -> Unit)? = null) {
|
||||
val settings = PyPackageRequirementsSettings.getInstance(myFixture.module)
|
||||
val oldRequirementsPath = settings.requirementsPath
|
||||
val oldVersionSpecifier = settings.versionSpecifier
|
||||
|
||||
try {
|
||||
overrideInstalledPackages(
|
||||
"Django" to "3.0.0",
|
||||
"requests" to "2.22.0",
|
||||
"Jinja2" to "2.11.1",
|
||||
"pandas" to "1.0.1" ,
|
||||
"cookiecutter" to "1.7.0",
|
||||
"numpy" to "1.18.1",
|
||||
"tox" to "3.14.4"
|
||||
)
|
||||
|
||||
settings.requirementsPath = "requirements.txt"
|
||||
settings.versionSpecifier = versionSpecifier
|
||||
|
||||
val testName = getTestName(true)
|
||||
myFixture.copyDirectoryToProject(testName, "")
|
||||
myFixture.configureFromTempProjectFile(settings.requirementsPath)
|
||||
if (block != null) {
|
||||
block(prepareRequirementsText(myFixture.module, settings)!!)
|
||||
}
|
||||
else {
|
||||
syncWithImports(myFixture.module)
|
||||
myFixture.checkResultByFile("$testName/new_${settings.requirementsPath}")
|
||||
}
|
||||
}
|
||||
finally {
|
||||
settings.requirementsPath = oldRequirementsPath
|
||||
settings.versionSpecifier = oldVersionSpecifier
|
||||
}
|
||||
}
|
||||
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
oldPackageManagers = PyPackageManagers.getInstance()
|
||||
}
|
||||
|
||||
override fun tearDown() {
|
||||
try {
|
||||
ApplicationManager.getApplication().registerServiceInstance(PyPackageManagers::class.java, oldPackageManagers!!)
|
||||
}
|
||||
catch (e: Throwable) {
|
||||
addSuppressedException(e)
|
||||
}
|
||||
finally {
|
||||
super.tearDown()
|
||||
}
|
||||
}
|
||||
|
||||
override fun getTestDataPath(): String = super.getTestDataPath() + "/requirement/generation"
|
||||
|
||||
private fun overrideInstalledPackages(vararg packages: Pair<String, String>) {
|
||||
ApplicationManager.getApplication().registerServiceInstance(PyPackageManagers::class.java, MockPyPackageManagers(packages.toMap()))
|
||||
}
|
||||
|
||||
private class MockPyPackageManagers(val packages: Map<String, String>) : PyPackageManagers() {
|
||||
override fun forSdk(sdk: Sdk): PyPackageManager {
|
||||
val packageManager = EasyMock.createMock<PyPackageManager>(PyPackageManager::class.java)
|
||||
EasyMock
|
||||
.expect(packageManager.packages)
|
||||
.andReturn(packages.map { PyPackage(it.key, it.value, null, emptyList()) })
|
||||
|
||||
EasyMock.replay(packageManager)
|
||||
return packageManager
|
||||
}
|
||||
|
||||
override fun getManagementService(project: Project?, sdk: Sdk?) = throw UnsupportedOperationException()
|
||||
override fun clearCache(sdk: Sdk): Unit = throw UnsupportedOperationException()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user