RFR: 8255940: localStorage is null after window.close() [v2]
Kevin Rushforth
kcr at openjdk.java.net
Sat Feb 5 15:13:16 UTC 2022
On Sat, 5 Feb 2022 05:41:25 GMT, Jay Bhaskar <duke at openjdk.java.net> wrote:
>> modules/javafx.web/src/test/java/test/javafx/scene/web/LocalStorageTest.java line 2:
>>
>>> 1: /*
>>> 2: * Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
>>
>> Copyright should be a single year (2022)
>
> done
Did you forget to push the change? It doesn't show up in the PR.
>> modules/javafx.web/src/test/java/test/javafx/scene/web/LocalStorageTest.java line 48:
>>
>>> 46: final WebEngine webEngine = getEngine();
>>> 47: webEngine.setJavaScriptEnabled(true);
>>> 48: webEngine.setUserDataDirectory(new File("/tmp/java-store"));
>>
>> You should not hard-code /tmp/. You can either use a local subdirectory in the build dir (which some other tests do), or else you will need to use something like `Files.createTempDirectory("webstorage")`. If you use the latter, then you will need to worry about how to clean up after the test, so the former seems better.
>
> i think /tmp/java-store is ok, as it would not require cleanup
No, it's not OK for two reasons:
1. It prevents concurrent execution of tests from two different directories
2. The Java temp directory might be something other than "/tmp" on some systems.
Best is to use a local subdir under the build directory.
>> modules/javafx.web/src/test/java/test/javafx/scene/web/LocalStorageTest.java line 70:
>>
>>> 68: WebView view = getView();
>>> 69: view.getEngine().executeScript("test_local_storage_set();");
>>> 70: String s = (String) view.getEngine().executeScript("document.getElementById('key').innerText;");
>>
>> This will work, but it might be cleaner to add a JavaScript `getLocalStorage` method so you don't have to get it from a DOM element.
>
> The method webEngine.executeScript("localStorage;") returns JSObject and in to get data members we need to call js.getMember(...) , getMember is not available in our code base, so i used tring s = (String) view.getEngine().executeScript("document.getElementById('key').innerText;");
OK. You could also have gotten it by calling a JavaScript method that you provided, but if this works, then that's fine.
>> modules/javafx.web/src/test/java/test/javafx/scene/web/LocalStorageTest.java line 80:
>>
>>> 78: submit(() -> {
>>> 79: WebView view = getView();
>>> 80: view.getEngine().executeScript("delete_items();");
>>
>> You need to set some items first before deleting them if you want it to be an effective test of this case.
>
> The test runs after testLocalStorageSet , so there would be items in localstorage
No, this is a common misconception when writing JUnit tests. The test execution order is _not_ guaranteed and will change. Each test method needs to run as if it were the first (or only) test.
-------------
PR: https://git.openjdk.java.net/jfx/pull/703
More information about the openjfx-dev
mailing list