From 046bcb798a5c9769b4b54778c8e3eb70a0e16189 Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 14 Sep 2017 19:32:30 +0300 Subject: [PATCH] convert to repository library: add test for multiple maven coords Also test is rewritten to create a mock JAR instead of using real library, so it won't fail when library version changes. --- .../ConvertToRepositoryLibraryActionTest.kt | 68 +++++++++++++++++-- .../intellij/util/io/DirectoryContentSpec.kt | 9 +++ 2 files changed, 70 insertions(+), 7 deletions(-) diff --git a/java/idea-ui/testSrc/com/intellij/openapi/roots/ui/configuration/projectRoot/ConvertToRepositoryLibraryActionTest.kt b/java/idea-ui/testSrc/com/intellij/openapi/roots/ui/configuration/projectRoot/ConvertToRepositoryLibraryActionTest.kt index ce0c11d024f8..0b5fafbabed6 100644 --- a/java/idea-ui/testSrc/com/intellij/openapi/roots/ui/configuration/projectRoot/ConvertToRepositoryLibraryActionTest.kt +++ b/java/idea-ui/testSrc/com/intellij/openapi/roots/ui/configuration/projectRoot/ConvertToRepositoryLibraryActionTest.kt @@ -15,18 +15,72 @@ */ package com.intellij.openapi.roots.ui.configuration.projectRoot -import com.intellij.project.IntelliJProjectConfiguration +import com.intellij.openapi.vfs.JarFileSystem import com.intellij.testFramework.LightPlatformTestCase +import com.intellij.util.io.directoryContent +import com.intellij.util.io.generateInVirtualTempDir /** * @author nik */ class ConvertToRepositoryLibraryActionTest : LightPlatformTestCase() { - fun `test read Maven coordinates`() { - val file = IntelliJProjectConfiguration.getJarFromSingleJarProjectLibrary("commons-codec") - val coordinates = assertOneElement(ConvertToRepositoryLibraryActionBase.detectMavenCoordinates(arrayOf(file!!))) - assertEquals("commons-codec", coordinates.groupId) - assertEquals("commons-codec", coordinates.artifactId) - assertEquals("1.9", coordinates.version) + fun `test detect single coordinates`() { + val file = directoryContent { + zip("library.jar") { + dir("META-INF") { + dir("maven") { + dir("myGroupId") { + dir("myArtifactId") { + file("pom.properties", """ + |version=1.0 + |groupId=myGroupId + |artifactId=myArtifactId + """.trimMargin()) + } + } + } + } + } + }.generateInVirtualTempDir().findChild("library.jar")!! + val jarRoot = JarFileSystem.getInstance().getJarRootForLocalFile(file)!! + val coordinates = assertOneElement(ConvertToRepositoryLibraryActionBase.detectMavenCoordinates(arrayOf(jarRoot))) + assertEquals("myGroupId", coordinates.groupId) + assertEquals("myArtifactId", coordinates.artifactId) + assertEquals("1.0", coordinates.version) + } + + fun `test detect multiple coordinates`() { + val file = directoryContent { + zip("library2.jar") { + dir("META-INF") { + dir("maven") { + dir("myGroupId") { + dir("myArtifactId1") { + file("pom.properties", """ + |version=1.0 + |groupId=myGroupId + |artifactId=myArtifactId1 + """.trimMargin()) + } + dir("myArtifactId2") { + file("pom.properties", """ + |version=1.0 + |groupId=myGroupId + |artifactId=myArtifactId2 + """.trimMargin()) + } + } + } + } + } + }.generateInVirtualTempDir().findChild("library2.jar")!! + val jarRoot = JarFileSystem.getInstance().getJarRootForLocalFile(file)!! + val (coordinates1, coordinates2) = ConvertToRepositoryLibraryActionBase.detectMavenCoordinates(arrayOf(jarRoot)).sortedBy { it.artifactId } + assertEquals("myGroupId", coordinates1.groupId) + assertEquals("myArtifactId1", coordinates1.artifactId) + assertEquals("1.0", coordinates1.version) + assertEquals("myGroupId", coordinates2.groupId) + assertEquals("myArtifactId2", coordinates2.artifactId) + assertEquals("1.0", coordinates2.version) } } \ No newline at end of file diff --git a/platform/testFramework/src/com/intellij/util/io/DirectoryContentSpec.kt b/platform/testFramework/src/com/intellij/util/io/DirectoryContentSpec.kt index dfae41545dc8..0e6852373b08 100644 --- a/platform/testFramework/src/com/intellij/util/io/DirectoryContentSpec.kt +++ b/platform/testFramework/src/com/intellij/util/io/DirectoryContentSpec.kt @@ -17,6 +17,8 @@ package com.intellij.util.io +import com.intellij.openapi.vfs.LocalFileSystem +import com.intellij.openapi.vfs.VirtualFile import com.intellij.util.io.impl.* import java.io.File @@ -75,4 +77,11 @@ interface DirectoryContentSpec { */ fun File.assertMatches(spec: DirectoryContentSpec) { assertDirectoryContentMatches(this, spec as DirectoryContentSpecImpl, "") +} + +fun DirectoryContentSpec.generateInVirtualTempDir(): VirtualFile { + val ioFile = generateInTempDir() + val virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(ioFile)!! + virtualFile.refresh(false, true) + return virtualFile } \ No newline at end of file