On Wed, 2 Sep 2020 16:57:25 GMT, Nir Lisker <nlis...@openjdk.org> wrote:
>> It can either be a fully qualified class name (with `.` as separator) or the >> unqualified name of the test class. The >> class name must end with exactly `Test`. So for example, try it with >> `Snapshot1Test`. > > I wrote the following test: > > import static org.junit.Assert.assertTrue; > import static org.junit.Assert.fail; > > import java.util.concurrent.CountDownLatch; > import java.util.concurrent.TimeUnit; > > import org.junit.AfterClass; > import org.junit.BeforeClass; > import org.junit.Test; > > import javafx.application.Application; > import javafx.application.Platform; > import javafx.scene.Group; > import javafx.scene.PointLight; > import javafx.scene.Scene; > import javafx.scene.paint.Color; > import javafx.scene.shape.Box; > import javafx.stage.Stage; > import javafx.stage.WindowEvent; > > public class PointLightAttenuationTest { > > private static CountDownLatch startupLatch; > private static Stage stage; > private static PointLight light = new PointLight(Color.BLUE); > private static Box box = new Box(100, 100, 1); > > @BeforeClass > public static void initFX() throws Exception { > startupLatch = new CountDownLatch(1); > new Thread(() -> Application.launch(TestApp.class, > (String[])null)).start(); > assertTrue("Timeout waiting for FX runtime to start", > startupLatch.await(15, TimeUnit.SECONDS)); > } > > public class TestApp extends Application { > > @Override > public void start(Stage mainStage) { > stage = mainStage; > light.setTranslateZ(-50); > var root = new Group(light, box); > var scene = new Scene(root); > stage.setScene(scene); > stage.setFullScreen(true); > stage.addEventHandler(WindowEvent.WINDOW_SHOWN, e -> > Platform.runLater(startupLatch::countDown)); > stage.show(); > } > } > > @Test > public void testAttenuation() { > var image = box.snapshot(null, null); > var nonAttenColor = image.getPixelReader().getColor(1, 1); > > light.setLinearAttenuation(2); > image = box.snapshot(null, null); > var attenColor = image.getPixelReader().getColor(1, 1); > > System.out.println(nonAttenColor); > System.out.println(attenColor); > if (nonAttenColor.getBlue() > attenColor.getBlue()) { > throw new AssertionError("Attenuation color should be less than > non-attenuated"); > } > } > > @AfterClass > public static void teardown() { > Platform.runLater(() -> { > stage.hide(); > Platform.exit(); > }); > } > } > But when executing it with > > ./gradlew -PFULL_TEST=true -PUSE_ROBOT=true :systemTests:test --tests > PointLightAttenuationTest > > I get the error > > test.javafx.scene.lighting3D.PointLightAttenuationTest > classMethod FAILED > java.lang.AssertionError: Timeout waiting for FX runtime to start > at org.junit.Assert.fail(Assert.java:91) > at org.junit.Assert.assertTrue(Assert.java:43) > at > test.javafx.scene.lighting3D.PointLightAttenuationTest.initFX(PointLightAttenuationTest.java:59) > > So for some reason the Application doesn't start, it seems. I ran > `ShapeViewOrderLeakTest` and `RestoreSceneSizeTest` > which look the same, and those work. Any idea? If you run it with `--info` you will see something like this: test.javafx.scene.shape.PointLightAttenuationTest STANDARD_ERROR Exception in Application constructor Exception in thread "Thread-4" java.lang.RuntimeException: Unable to construct Application instance: class test.javafx.scene.shape.PointLightAttenuationTest$TestApp at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:890) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195) at java.base/java.lang.Thread.run(Thread.java:832) Caused by: java.lang.NoSuchMethodException: test.javafx.scene.shape.PointLightAttenuationTest$TestApp.<init>() at java.base/java.lang.Class.getConstructor0(Class.java:3427) at java.base/java.lang.Class.getConstructor(Class.java:2165) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:801) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) at java.base/java.security.AccessController.doPrivileged(AccessController.java:391) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) ... 1 more The nested `TestApp` class should be declared as `static`. Btw, I don't recommend using `setFullScreen` for a test such as this. ------------- PR: https://git.openjdk.java.net/jfx/pull/43