From 91219435407853d1a854c41be491cd731063c3fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Sat, 8 Jul 2023 22:10:17 +0200 Subject: [PATCH] Fix unstable unittest org.netbeans.modules.maven.ModuleInfoSupportTest 25347dfe7f75e540d751f06b541320dc6c5511ce introduces a new unittest, that proved to be unstable in CI/CD pipeline. The failure can be reproduced after several tries. Adding workDir.getFileSystem().refresh(true); seems to fix the issue. Hypothesis: The new module files are written outside the filesystem infrastructure of NetBeans and the cache of the javac integration does not pick up the module files created by the javac-Tool. Apart from the fix, style of the code was improved. --- .../modules/maven/ModuleInfoSupportTest.java | 62 ++++++++++++------- 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/ModuleInfoSupportTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/ModuleInfoSupportTest.java index badb91c19ee9..aa3d26a93c91 100644 --- a/java/maven/test/unit/src/org/netbeans/modules/maven/ModuleInfoSupportTest.java +++ b/java/maven/test/unit/src/org/netbeans/modules/maven/ModuleInfoSupportTest.java @@ -21,11 +21,13 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import javax.tools.ToolProvider; import org.netbeans.api.java.classpath.ClassPath; import org.netbeans.api.java.platform.JavaPlatformManager; import org.netbeans.api.java.source.ClasspathInfo; import org.netbeans.api.java.source.JavaSource; import org.netbeans.junit.NbTestCase; +import org.netbeans.spi.java.classpath.support.ClassPathSupport; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; import org.openide.filesystems.test.TestFileUtils; @@ -43,50 +45,68 @@ void setUp() throws Exception { public void testAddRequires() throws Exception { System.setProperty("test.load.sync", "true"); - FileObject d = FileUtil.toFileObject(getWorkDir()); - TestFileUtils.writeFile(d, "module-info.java", - "module Mavenproject {\n}"); - FileObject moduleInfo = d.getFileObject("module-info.java"); + FileObject workDir = FileUtil.toFileObject(getWorkDir()); + FileObject moduleInfo = TestFileUtils.writeFile( + workDir, + "module-info.java", + "module Mavenproject {\n}" + ); ModuleInfoSupport.addRequires(moduleInfo, List.of("test.dummy")); assertEquals("module Mavenproject {\n requires test.dummy;\n}", moduleInfo.asText()); } public void testGetDeclaredModules() throws Exception { System.setProperty("test.load.sync", "true"); - FileObject d = FileUtil.toFileObject(getWorkDir()); - FileObject dummy = d.createFolder("dummy"); - FileObject dummy2 = d.createFolder("dummy2"); - TestFileUtils.writeFile(dummy, "module-info.java", "module test.dummy {}"); - TestFileUtils.writeFile(dummy2, "module-info.java", "module test.dummy2x {}"); - TestFileUtils.writeFile(d, "module-info.java", + FileObject workDir = FileUtil.toFileObject(getWorkDir()); + FileObject dummyDir = workDir.createFolder("dummy"); + FileObject dummy2xDir = workDir.createFolder("dummy2x"); + FileObject dummyModuleInfo = TestFileUtils.writeFile( + dummyDir, + "module-info.java", + "module test.dummy {}" + ); + FileObject dummy2xModuleInfo = TestFileUtils.writeFile( + dummy2xDir, + "module-info.java", + "module test.dummy2x {}" + ); + FileObject moduleInfo = TestFileUtils.writeFile(workDir, "module-info.java", "module Mavenproject {" + " requires test.dummy;\n" + " requires test.dummy2x;\n" + "\n}"); - FileObject moduleInfo = d.getFileObject("module-info.java"); - javax.tools.ToolProvider.getSystemJavaCompiler().run( + ToolProvider.getSystemJavaCompiler().run( System.in, System.out, System.err, - "-d", dummy.getPath(), - dummy.getFileObject("module-info.java").getPath() + "-d", dummyDir.getPath(), + dummyModuleInfo.getPath() ); - javax.tools.ToolProvider.getSystemJavaCompiler().run( + ToolProvider.getSystemJavaCompiler().run( System.in, System.out, System.err, - "-d", dummy2.getPath(), - dummy2.getFileObject("module-info.java").getPath() + "-d", dummy2xDir.getPath(), + dummy2xModuleInfo.getPath() ); - ClassPath cp = org.netbeans.spi.java.classpath.support.ClassPathSupport.createClassPath( - dummy, dummy2 + // Enforce refresh NB view of filesystem - assumes, that file system for + // both dummy modules is identical + workDir.getFileSystem().refresh(true); + + ClassPath bootClasspath = JavaPlatformManager + .getDefault() + .getDefaultPlatform() + .getBootstrapLibraries(); + + ClassPath modulePath = ClassPathSupport.createClassPath( + dummyDir, dummy2xDir ); - ClasspathInfo cpi = new ClasspathInfo.Builder(JavaPlatformManager.getDefault().getDefaultPlatform().getBootstrapLibraries()) - .setModuleCompilePath(cp) + ClasspathInfo cpi = new ClasspathInfo.Builder(bootClasspath) + .setModuleCompilePath(modulePath) .build(); JavaSource js = JavaSource.create(cpi, moduleInfo);