[Gradle] workaround to fix failing checkNodeJsSetup on Windows
^KT-73795
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JsSetupConfigurationCacheIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JsSetupConfigurationCacheIT.kt
index a5165bd..8320427 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JsSetupConfigurationCacheIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JsSetupConfigurationCacheIT.kt
@@ -8,8 +8,11 @@
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.testbase.*
import org.jetbrains.kotlin.gradle.testbase.BuildOptions.ConfigurationCacheProblems
+import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.condition.OS
+import java.nio.file.Files
+import kotlin.io.path.isDirectory
// This test is a JS test
// but, as it is the only one to required to run on MacOS
@@ -25,6 +28,34 @@
configurationCacheProblems = ConfigurationCacheProblems.FAIL
)
+ /**
+ * Cleans up symbolic links or shortcuts within the working directory after each test execution.
+ *
+ * This method is specifically designed for Windows operating systems. It traverses the
+ * working directory, collects any symbolic links or shortcuts that are directories but not
+ * actual directories, and deletes them. The operation ensures that resources are cleaned up
+ * properly and avoids any potential issues with stale shortcuts or symbolic links.
+ *
+ * Utilizes the Files.walk method to stream through the directory structure and ensure efficient
+ * resource usage with automatic stream closure upon completion of operations.
+ *
+ * FIXME: Find a real cause and remove this workaround
+ * KT-73795 Fix failing checkNodeJsSetup test on Windows
+ *
+ */
+ @AfterEach
+ fun cleanup() {
+ if (OS.WINDOWS.isCurrentOs) {
+ Files.walk(workingDir).use { stream -> // Automatically closes the stream
+ val links = stream
+ .filter { it != it.toRealPath() && it.isDirectory() } // Check for symbolic links or shortcuts
+ .toList() // Collect into a list to prevent modification of the stream during iteration
+
+ links.forEach { Files.deleteIfExists(it) } // Delete the collected shortcuts or links
+ }
+ }
+ }
+
// hack to be run on Mac m*
@DisplayName("Check Node.JS setup on different platforms")
@GradleTest