/* * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.kapt.base.test import org.jetbrains.kotlin.kapt3.base.KaptOptions import org.jetbrains.kotlin.kapt3.base.collectJavaSourceFiles import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test import java.io.File import java.nio.file.Files class KaptPathsTest { @Test fun testSymbolicLinks() { if (System.getProperty("os.name").lowercase().contains("win")) return val tempDir = Files.createTempDirectory("kapt-test").toFile() try { fun File.writeJavaClass() = apply { parentFile.mkdirs() writeText("public class $nameWithoutExtension {}") } val outputDir = File(tempDir, "stubs").apply { mkdir() } val otherDir = File(tempDir, "other").apply { mkdir() } val javaRootDir = File(tempDir, "java").apply { mkdir() } val simpleJava = File(tempDir, "Simple.java").writeJavaClass() val otherJava = File(otherDir, "Other.java").writeJavaClass() val notJava = File(otherDir, "NotJava.not").writeJavaClass() File(javaRootDir, "JavaRoot.java").writeJavaClass() val symlinkToOtherJava = Files.createSymbolicLink(File(tempDir, "Other.java").toPath(), otherJava.toPath()).toFile() val symlinkToNotJava = Files.createSymbolicLink(File(tempDir, "NotJava.java").toPath(), notJava.toPath()).toFile() val javaRoots = listOf(simpleJava, symlinkToOtherJava, symlinkToNotJava, javaRootDir) val paths = KaptOptions.Builder().apply { javaSourceRoots.addAll(javaRoots) sourcesOutputDir = outputDir classesOutputDir = outputDir stubsOutputDir = outputDir }.build() val javaSourceFiles = paths.collectJavaSourceFiles() fun assertContains(path: String) { val available by lazy { javaSourceFiles.joinToString { it.toRelativeString(tempDir) } } assertTrue(javaSourceFiles.any { it.toRelativeString(tempDir) == path }) { "Can't find path $path\nAvailable: $available" } } assertEquals(4, javaSourceFiles.size, "Actual content: ${javaSourceFiles}") assertContains("Simple.java") assertContains("Other.java") assertContains("NotJava.java") assertContains("java/JavaRoot.java") } finally { tempDir.deleteRecursively() } } }