< prev index next >

modules/javafx.web/src/test/java/test/javafx/scene/web/HistoryTest.java

Print this page

        

@@ -23,15 +23,19 @@
  * questions.
  */
 
 package test.javafx.scene.web;
 
+import static javafx.concurrent.Worker.State.SUCCEEDED;
+
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.CountDownLatch;
 import java.util.List;
 import java.io.File;
 import java.net.MalformedURLException;
 import javafx.beans.value.ObservableValue;
+import javafx.scene.web.WebEngine;
 import javafx.scene.web.WebHistory;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.collections.ListChangeListener;
 import java.util.Date;

@@ -39,10 +43,11 @@
 import java.util.concurrent.Callable;
 import javafx.scene.web.WebHistory;
 import org.junit.Test;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 public class HistoryTest extends TestBase {
     WebHistory history = getEngine().getHistory();

@@ -256,10 +261,78 @@
                 fail("maxSizeProperty: IllegalArgumentException is not thrown");
             } catch (IllegalArgumentException ex) {}
         });
     }
 
+    /**
+     * @test
+     * @bug 8157686
+     * Summary : Html history.pushState, history.back and history.replace
+     * Ref : https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate
+     */
+    @Test(timeout = 30000) public void historyOnPopStateTest() throws Exception {
+        final CountDownLatch latch = new CountDownLatch(1);
+        final String page0 = "archive-root0.html";
+        final String page1 = "archive-root1.html";
+        final String page2 = "archive-root2.html";
+        final String page3 = "longselectorlist.html";
+
+        submit(() -> {
+            WebEngine webEngine = new WebEngine();
+            ClassLoader loader = LoadTest.class.getClassLoader();
+
+            webEngine.locationProperty().addListener((observable, oldValue, newValue) -> {
+                if (oldValue == null) {
+                    return;
+                }
+
+                if (oldValue.substring(oldValue.lastIndexOf('?') + 1).equalsIgnoreCase(page3) &&
+                        newValue.substring(newValue.lastIndexOf('?') + 1).equalsIgnoreCase(page1)) {
+                    webEngine.executeScript("history.back();");
+                } else if (oldValue.substring(oldValue.lastIndexOf('?') + 1).equalsIgnoreCase(page1) &&
+                        newValue.substring(newValue.lastIndexOf('/') + 1).equalsIgnoreCase(page0)) {
+                    assertNull("history.state should be null ", webEngine.executeScript("history.state"));
+                    webEngine.executeScript("history.go(2);");
+                } else if(oldValue.substring(oldValue.lastIndexOf('/') + 1).equalsIgnoreCase(page0) &&
+                        newValue.substring(newValue.lastIndexOf('?') + 1).equalsIgnoreCase(page3)) {
+                    latch.countDown();
+                }
+            });
+
+            webEngine.getLoadWorker().stateProperty().addListener(((observable, oldValue, newValue) -> {
+                if (newValue == SUCCEEDED) {
+                    webEngine.executeScript("history.pushState({page: 1}, 'title 1', '?" + page1 + "');");
+                    assertEquals("history.pushState Failed",
+                            page1,
+                            webEngine.getLocation().substring(webEngine.getLocation().lastIndexOf('?') + 1)
+                    );
+
+                    webEngine.executeScript("history.pushState({page: 2}, 'title 2', '?" + page2 + "');");
+                    assertEquals("history.pushState Failed",
+                            page2,
+                            webEngine.getLocation().substring(webEngine.getLocation().lastIndexOf('?') + 1)
+                    );
+
+                    webEngine.executeScript("history.replaceState({page: 3}, 'title 3', '?" + page3 + "');");
+                    assertEquals("history.pushState Failed",
+                            page3,
+                            webEngine.getLocation().substring(webEngine.getLocation().lastIndexOf('?') + 1)
+                    );
+
+                    webEngine.executeScript("history.back();");
+                }
+            }));
+
+            webEngine.load(loader.getResource("test/html/archive-root0.html").toExternalForm());
+        });
+        try {
+            latch.await();
+        } catch (InterruptedException ex) {
+            throw new AssertionError(ex);
+        }
+    }
+
     void checkLoad(File file, int size, int index, String title) {
         load(file);
         check(file, size, index, title);
     }
 
< prev index next >