On Tue, 1 Sep 2020 23:09:39 GMT, Kevin Rushforth <k...@openjdk.org> wrote:

>>> gradle -PFULL_TEST=true -PUSE_ROBOT=true :systemTests:test --tests MyTest
>> 
>> What format is `MyTest`? Is it some relative path?
>
> 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?

-------------

PR: https://git.openjdk.java.net/jfx/pull/43

Reply via email to