Refactor MockLibraryUtil and related tests
- separate compileLibraryToJar into two public functions, for JVM and JS - allow to pass any extra options instead of just -Xallow-kotlin-package - add a bunch of default arguments for the most common cases
This commit is contained in:
+11
-5
@@ -22,12 +22,13 @@ import com.intellij.openapi.roots.ModifiableRootModel;
|
||||
import com.intellij.openapi.roots.OrderRootType;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.util.io.FileUtilRt;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.test.MockLibraryUtil;
|
||||
import org.jetbrains.kotlin.utils.PathUtil;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class JdkAndMockLibraryProjectDescriptor extends KotlinLightProjectDescriptor {
|
||||
public static final String LIBRARY_NAME = "myKotlinLib";
|
||||
@@ -37,7 +38,7 @@ public class JdkAndMockLibraryProjectDescriptor extends KotlinLightProjectDescri
|
||||
private final boolean withRuntime;
|
||||
private final boolean isJsLibrary;
|
||||
private final boolean allowKotlinPackage;
|
||||
private final String[] classpath;
|
||||
private final List<String> classpath;
|
||||
|
||||
public JdkAndMockLibraryProjectDescriptor(String sourcesPath, boolean withSources) {
|
||||
this(sourcesPath, withSources, false, false, false);
|
||||
@@ -45,11 +46,12 @@ public class JdkAndMockLibraryProjectDescriptor extends KotlinLightProjectDescri
|
||||
|
||||
public JdkAndMockLibraryProjectDescriptor(
|
||||
String sourcesPath, boolean withSources, boolean withRuntime, boolean isJsLibrary, boolean allowKotlinPackage) {
|
||||
this(sourcesPath, withSources, withRuntime, isJsLibrary, allowKotlinPackage, ArrayUtil.EMPTY_STRING_ARRAY);
|
||||
this(sourcesPath, withSources, withRuntime, isJsLibrary, allowKotlinPackage, Collections.emptyList());
|
||||
}
|
||||
|
||||
public JdkAndMockLibraryProjectDescriptor(
|
||||
String sourcesPath, boolean withSources, boolean withRuntime, boolean isJsLibrary, boolean allowKotlinPackage, String[] classpath) {
|
||||
String sourcesPath, boolean withSources, boolean withRuntime, boolean isJsLibrary, boolean allowKotlinPackage, List<String> classpath
|
||||
) {
|
||||
this.sourcesPath = sourcesPath;
|
||||
this.withSources = withSources;
|
||||
this.withRuntime = withRuntime;
|
||||
@@ -60,7 +62,11 @@ public class JdkAndMockLibraryProjectDescriptor extends KotlinLightProjectDescri
|
||||
|
||||
@Override
|
||||
public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model) {
|
||||
File libraryJar = MockLibraryUtil.compileLibraryToJar(sourcesPath, LIBRARY_NAME, withSources, isJsLibrary, allowKotlinPackage, classpath);
|
||||
List<String> extraOptions = allowKotlinPackage ? Collections.singletonList("-Xallow-kotlin-package") : Collections.emptyList();
|
||||
File libraryJar =
|
||||
isJsLibrary
|
||||
? MockLibraryUtil.compileJsLibraryToJar(sourcesPath, LIBRARY_NAME, withSources)
|
||||
: MockLibraryUtil.compileJvmLibraryToJar(sourcesPath, LIBRARY_NAME, withSources, extraOptions, classpath);
|
||||
String jarUrl = getJarUrl(libraryJar);
|
||||
|
||||
Library.ModifiableModel libraryModel = model.getModuleLibraryTable().getModifiableModel().createLibrary(LIBRARY_NAME).getModifiableModel();
|
||||
|
||||
+3
-4
@@ -33,10 +33,9 @@ abstract class AbstractJavaAgainstKotlinBinariesCheckerTest : AbstractJavaAgains
|
||||
if (KotlinTestUtils.isAllFilesPresentTest(testName)) {
|
||||
return
|
||||
}
|
||||
val libraryName = "libFor" + testName
|
||||
val libraryJar = MockLibraryUtil.compileLibraryToJar(
|
||||
val libraryJar = MockLibraryUtil.compileJvmLibraryToJar(
|
||||
PluginTestCaseBase.getTestDataPathBase() + "/kotlinAndJavaChecker/javaAgainstKotlin/" + getTestName(false) + ".kt",
|
||||
libraryName, false, false, false
|
||||
"libFor$testName"
|
||||
)
|
||||
val jarUrl = "jar://" + FileUtilRt.toSystemIndependentName(libraryJar.absolutePath) + "!/"
|
||||
ModuleRootModificationUtil.addModuleLibrary(module, jarUrl)
|
||||
@@ -52,4 +51,4 @@ abstract class AbstractJavaAgainstKotlinBinariesCheckerTest : AbstractJavaAgains
|
||||
|
||||
doTest(true, true, path.replace(".kt", ".java"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ abstract class AbstractIdeCompiledLightClassTest : KotlinDaemonAnalyzerTestCase(
|
||||
|
||||
Assert.assertTrue("File doesn't exist $filePath", File(filePath).exists())
|
||||
|
||||
val libraryJar = MockLibraryUtil.compileLibraryToJar(filePath, libName(), false, false, false)
|
||||
val libraryJar = MockLibraryUtil.compileJvmLibraryToJar(filePath, libName())
|
||||
val jarUrl = "jar://" + FileUtilRt.toSystemIndependentName(libraryJar.absolutePath) + "!/"
|
||||
ModuleRootModificationUtil.addModuleLibrary(module, jarUrl)
|
||||
}
|
||||
|
||||
+13
-12
@@ -16,26 +16,27 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.caches.resolve
|
||||
|
||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||
import org.jetbrains.kotlin.test.MockLibraryUtil
|
||||
import com.intellij.openapi.roots.libraries.Library
|
||||
import java.io.File
|
||||
import com.intellij.openapi.roots.OrderRootType
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.roots.ModifiableRootModel
|
||||
import com.intellij.openapi.roots.ContentEntry
|
||||
import com.intellij.openapi.roots.OrderRootType
|
||||
import com.intellij.openapi.roots.libraries.Library
|
||||
import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.idea.test.KotlinLightProjectDescriptor
|
||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||
import org.jetbrains.kotlin.test.MockLibraryUtil
|
||||
import java.io.File
|
||||
|
||||
class HighlightingWithDependentLibrariesTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
private val TEST_DATA_PATH = PluginTestCaseBase.TEST_DATA_DIR + "/highlightingWithDependentLibraries"
|
||||
|
||||
override fun getProjectDescriptor() = object : KotlinLightProjectDescriptor() {
|
||||
override fun configureModule(module: Module, model: ModifiableRootModel) {
|
||||
val compiledJar1 = MockLibraryUtil.compileLibraryToJar("$TEST_DATA_PATH/lib1", "lib1", false, false)
|
||||
val compiledJar2 = MockLibraryUtil.compileLibraryToJar("$TEST_DATA_PATH/lib2", "lib2", false, false, compiledJar1.canonicalPath)
|
||||
val compiledJar1 =
|
||||
MockLibraryUtil.compileJvmLibraryToJar("$TEST_DATA_PATH/lib1", "lib1")
|
||||
val compiledJar2 =
|
||||
MockLibraryUtil.compileJvmLibraryToJar("$TEST_DATA_PATH/lib2", "lib2", extraClasspath = listOf(compiledJar1.canonicalPath))
|
||||
|
||||
model.addLibraryEntry(createLibrary(compiledJar1, "baseLibrary"))
|
||||
model.addLibraryEntry(createLibrary(compiledJar2, "dependentLibrary"))
|
||||
|
||||
@@ -237,8 +237,7 @@ public abstract class KotlinDebuggerTestCase extends DescriptorTestCase {
|
||||
throw ExceptionUtilsKt.rethrow(e);
|
||||
}
|
||||
|
||||
CUSTOM_LIBRARY_JAR = MockLibraryUtil.compileLibraryToJar(
|
||||
CUSTOM_LIBRARY_SOURCES.getPath(), jarDir, "debuggerCustomLibrary", false, false);
|
||||
CUSTOM_LIBRARY_JAR = MockLibraryUtil.compileLibraryToJar(CUSTOM_LIBRARY_SOURCES.getPath(), jarDir, "debuggerCustomLibrary");
|
||||
|
||||
String sourcesDir = modulePath + File.separator + "src";
|
||||
|
||||
|
||||
+2
-2
@@ -56,7 +56,7 @@ class NavigationWithMultipleCustomLibrariesTest : AbstractNavigationToSourceOrDe
|
||||
override fun createProjectLib(libraryName: String, withSources: Boolean): Library {
|
||||
val librarySrc = testDataPath + "libSrc"
|
||||
|
||||
val libraryJar = MockLibraryUtil.compileLibraryToJar(librarySrc, libraryName, withSources, false, false)
|
||||
val libraryJar = MockLibraryUtil.compileJvmLibraryToJar(librarySrc, libraryName, addSources = withSources)
|
||||
val jarRoot = libraryJar.jarRoot
|
||||
return projectLibrary(libraryName, jarRoot, jarRoot.findChild("src").takeIf { withSources })
|
||||
}
|
||||
@@ -120,7 +120,7 @@ class NavigationToSingleJarInMultipleLibrariesTest : AbstractNavigationWithMulti
|
||||
val moduleB = module("m2", srcPath)
|
||||
val moduleC = module("m3", srcPath)
|
||||
|
||||
val sharedJar = MockLibraryUtil.compileLibraryToJar(testDataPath + "libSrc", "sharedJar", true, false, false)
|
||||
val sharedJar = MockLibraryUtil.compileJvmLibraryToJar(testDataPath + "libSrc", "sharedJar", addSources = true)
|
||||
val jarRoot = sharedJar.jarRoot
|
||||
|
||||
moduleA.addDependency(projectLibrary("libA", jarRoot))
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@ abstract class AbstractClsStubBuilderTest : LightCodeInsightFixtureTestCase() {
|
||||
|
||||
private fun getClassFileToDecompile(sourcePath: String): VirtualFile {
|
||||
val outDir = KotlinTestUtils.tmpDir("libForStubTest-" + sourcePath)
|
||||
MockLibraryUtil.compileKotlin(sourcePath, outDir, true)
|
||||
MockLibraryUtil.compileKotlin(sourcePath, outDir, extraOptions = listOf("-Xallow-kotlin-package"))
|
||||
val root = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(outDir)!!
|
||||
return root.findClassFileByName(lastSegment(sourcePath))
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ abstract class AbstractKotlinExceptionFilterTest : KotlinCodeInsightTestCase() {
|
||||
val classLoader: URLClassLoader
|
||||
if (InTextDirectivesUtils.getPrefixedBoolean(fileText, "// WITH_MOCK_LIBRARY: ") ?: false) {
|
||||
if (MOCK_LIBRARY_JAR == null) {
|
||||
MOCK_LIBRARY_JAR = MockLibraryUtil.compileLibraryToJar(MOCK_LIBRARY_SOURCES, "mockLibrary", true, false)
|
||||
MOCK_LIBRARY_JAR = MockLibraryUtil.compileJvmLibraryToJar(MOCK_LIBRARY_SOURCES, "mockLibrary", addSources = true)
|
||||
}
|
||||
|
||||
val mockLibraryJar = MOCK_LIBRARY_JAR ?: throw AssertionError("Mock library JAR is null")
|
||||
@@ -77,7 +77,7 @@ abstract class AbstractKotlinExceptionFilterTest : KotlinCodeInsightTestCase() {
|
||||
}
|
||||
moduleModel.commit()
|
||||
}
|
||||
MockLibraryUtil.compileKotlin(path, File(outDir.path), mockLibraryPath)
|
||||
MockLibraryUtil.compileKotlin(path, File(outDir.path), extraClasspath = mockLibraryPath)
|
||||
classLoader = URLClassLoader(
|
||||
arrayOf(URL(outDir.url + "/"), mockLibraryJar.toURI().toURL()),
|
||||
ForTestCompileRuntime.runtimeJarClassLoader())
|
||||
|
||||
@@ -52,7 +52,7 @@ class GotoWithMultipleLibrariesTest : AbstractMultiModuleTest() {
|
||||
fun doTestSameJarSharedByLibrariesWithAndWithoutSourceAttached(withSource: Int, noSource: Int) {
|
||||
val srcPath = testDataPath + "src"
|
||||
|
||||
val sharedJar = MockLibraryUtil.compileLibraryToJar(testDataPath + "libSrc", "sharedJar", true, false, false)
|
||||
val sharedJar = MockLibraryUtil.compileJvmLibraryToJar(testDataPath + "libSrc", "sharedJar", addSources = true)
|
||||
val jarRoot = sharedJar.jarRoot
|
||||
|
||||
var i: Int = 0
|
||||
@@ -69,4 +69,4 @@ class GotoWithMultipleLibrariesTest : AbstractMultiModuleTest() {
|
||||
}
|
||||
|
||||
protected fun module(name: String, srcPath: String) = createModuleFromTestData(srcPath, name, StdModuleTypes.JAVA, true)!!
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,12 +72,12 @@ abstract class AbstractScriptConfigurationTest : AbstractPsiCheckerTest() {
|
||||
protected fun configureScriptEnvironment(path: String) {
|
||||
val templateOutDir = compileLibToDir(
|
||||
File("${path}template"),
|
||||
classpath = listOf(PathUtil.getKotlinPathsForDistDirectory().scriptRuntimePath.path)
|
||||
PathUtil.getKotlinPathsForDistDirectory().scriptRuntimePath.path
|
||||
)
|
||||
|
||||
val libSrcDir = File("${path}lib")
|
||||
val libClasses = if (libSrcDir.isDirectory) {
|
||||
compileLibToDir(libSrcDir, classpath = listOf())
|
||||
compileLibToDir(libSrcDir)
|
||||
}
|
||||
else null
|
||||
|
||||
@@ -92,22 +92,19 @@ abstract class AbstractScriptConfigurationTest : AbstractPsiCheckerTest() {
|
||||
return vFile
|
||||
}
|
||||
|
||||
private fun compileLibToDir(srcDir: File, classpath: List<String>): File {
|
||||
private fun compileLibToDir(srcDir: File, vararg classpath: String): File {
|
||||
val outDir = KotlinTestUtils.tmpDir("${getTestName(false)}${srcDir.name}Out")
|
||||
|
||||
val kotlinSourceFiles = FileUtil.findFilesByMask(Pattern.compile(".+\\.kt$"), srcDir)
|
||||
if (kotlinSourceFiles.isNotEmpty()) {
|
||||
MockLibraryUtil.compileKotlin(
|
||||
srcDir.path, outDir,
|
||||
*classpath.toTypedArray()
|
||||
)
|
||||
MockLibraryUtil.compileKotlin(srcDir.path, outDir, extraClasspath = *classpath)
|
||||
}
|
||||
|
||||
val javaSourceFiles = FileUtil.findFilesByMask(Pattern.compile(".+\\.java$"), srcDir)
|
||||
if (javaSourceFiles.isNotEmpty()) {
|
||||
KotlinTestUtils.compileJavaFiles(
|
||||
javaSourceFiles,
|
||||
listOf("-cp", StringUtil.join(classpath + outDir, File.pathSeparator), "-d", outDir.path)
|
||||
listOf("-cp", StringUtil.join(listOf(*classpath, outDir), File.pathSeparator), "-d", outDir.path)
|
||||
)
|
||||
}
|
||||
return outDir
|
||||
@@ -145,4 +142,4 @@ class TestScriptTemplateProvider(
|
||||
override val isValid = true
|
||||
override val templateClassNames = listOf("custom.scriptDefinition.Template")
|
||||
override val dependenciesClasspath = listOf(compiledTemplateDir.canonicalPath)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,6 @@ class KotlinLibInjectionTest : AbstractInjectionTest() {
|
||||
override fun getProjectDescriptor(): LightProjectDescriptor {
|
||||
return JdkAndMockLibraryProjectDescriptor(
|
||||
PluginTestCaseBase.getTestDataPathBase() + "/injection/lib/", false, false, false, true,
|
||||
arrayOf(KotlinTestUtils.getHomeDirectory() + "/ideaSDK/lib/annotations.jar"))
|
||||
listOf(KotlinTestUtils.getHomeDirectory() + "/ideaSDK/lib/annotations.jar"))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user