:white_check_mark: Test that replacement history entries don't break forward navigation.
authorDave Townsend <dtownsend@oxymoronical.com>
Sat, 17 Sep 2016 00:06:16 +0000 (17:06 -0700)
committerDave Townsend <dtownsend@oxymoronical.com>
Sat, 17 Sep 2016 00:08:54 +0000 (17:08 -0700)
This is a test for #7175

spec/fixtures/pages/history-replace.html [new file with mode: 0644]
spec/webview-spec.js

diff --git a/spec/fixtures/pages/history-replace.html b/spec/fixtures/pages/history-replace.html
new file mode 100644 (file)
index 0000000..a10feef
--- /dev/null
@@ -0,0 +1,10 @@
+<html>
+<body>
+<script type="text/javascript" charset="utf-8">
+window.addEventListener("load", function() {
+  window.history.replaceState(window.history.state, "test page", window.location.href)
+  require('electron').ipcRenderer.sendToHost('history', window.history.length);
+})
+</script>
+</body>
+</html>
index 01374ba..340c151 100644 (file)
@@ -623,6 +623,53 @@ describe('<webview> tag', function () {
     })
   })
 
+  describe('<webview>.goForward()', function () {
+    it('should work after a replaced history entry', function (done) {
+      var loadCount = 1
+      var listener = function (e) {
+        if (loadCount === 1) {
+          assert.equal(e.channel, 'history')
+          assert.equal(e.args[0], 1)
+          assert(!webview.canGoBack())
+          assert(!webview.canGoForward())
+        } else if (loadCount === 2) {
+          assert.equal(e.channel, 'history')
+          assert.equal(e.args[0], 2)
+          assert(!webview.canGoBack())
+          assert(webview.canGoForward())
+          webview.removeEventListener('ipc-message', listener)
+        }
+      }
+
+      var loadListener = function (e) {
+        if (loadCount === 1) {
+          webview.src = 'file://' + fixtures + '/pages/base-page.html'
+        } else if (loadCount === 2) {
+          assert(webview.canGoBack())
+          assert(!webview.canGoForward())
+
+          webview.goBack()
+        } else if (loadCount === 3) {
+          webview.goForward()
+        } else if (loadCount === 4) {
+          assert(webview.canGoBack())
+          assert(!webview.canGoForward())
+
+          webview.removeEventListener('did-finish-load', loadListener)
+          done()
+        }
+
+        loadCount++
+      }
+
+      webview.addEventListener('ipc-message', listener)
+      webview.addEventListener('did-finish-load', loadListener)
+      webview.setAttribute('nodeintegration', 'on')
+      webview.src = 'file://' + fixtures + '/pages/history-replace.html'
+      document.body.appendChild(webview)
+    })
+  })
+
   describe('<webview>.clearHistory()', function () {
     it('should clear the navigation history', function (done) {
       var listener = function (e) {