Add specs for the beforeunload handler.
authorCheng Zhao <zcbenz@gmail.com>
Mon, 2 Sep 2013 08:28:36 +0000 (16:28 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Mon, 2 Sep 2013 08:28:36 +0000 (16:28 +0800)
spec/api/window.coffee
spec/fixtures/api/beforeunload-false.html [new file with mode: 0644]
spec/fixtures/api/close-beforeunload-false.html [new file with mode: 0644]
spec/fixtures/api/close-beforeunload-string.html [new file with mode: 0644]
spec/fixtures/api/close-beforeunload-true.html [new file with mode: 0644]

index fd81750..976c577 100644 (file)
@@ -21,10 +21,20 @@ describe 'window module', ->
         done()
       w.loadUrl 'file://' + path.join(fixtures, 'api', 'unload.html')
 
-  xdescribe 'window.close()', ->
-    it 'should emit unload handler', (done) ->
+    it 'should emit beforeunload handler', (done) ->
       w = new BrowserWindow(show: false)
-      w.on 'destroyed', ->
+      w.on 'onbeforeunload', ->
+        w.destroy()
+        done()
+      w.on 'loading-state-changed', (event, isLoading) ->
+        if (!isLoading)
+          w.close()
+      w.loadUrl 'file://' + path.join(fixtures, 'api', 'beforeunload-false.html')
+
+  describe 'window.close()', ->
+    xit 'should emit unload handler', (done) ->
+      w = new BrowserWindow(show: false)
+      w.on 'closed', ->
         test = path.join(fixtures, 'api', 'close')
         content = fs.readFileSync(test)
         fs.unlinkSync(test)
@@ -32,6 +42,11 @@ describe 'window module', ->
         done()
       w.loadUrl 'file://' + path.join(fixtures, 'api', 'close.html')
 
+    it 'should emit beforeunload handler', (done) ->
+      w = new BrowserWindow(show: false)
+      w.on 'onbeforeunload', done
+      w.loadUrl 'file://' + path.join(fixtures, 'api', 'close-beforeunload-true.html')
+
   describe 'BrowserWindow.loadUrl(url)', ->
     it 'should emit loading-state-changed event', (done) ->
       w = new BrowserWindow(show: false)
@@ -49,3 +64,24 @@ describe 'window module', ->
 
         ++count
       w.loadUrl 'about:blank'
+
+  describe 'beforeunload handler', ->
+    it 'returning true would not prevent close', (done) ->
+      w = new BrowserWindow(show: false)
+      w.on 'closed', ->
+        done()
+      w.loadUrl 'file://' + path.join(fixtures, 'api', 'close-beforeunload-true.html')
+
+    it 'returning false would prevent close', (done) ->
+      w = new BrowserWindow(show: false)
+      w.on 'onbeforeunload', ->
+        w.destroy()
+        done()
+      w.loadUrl 'file://' + path.join(fixtures, 'api', 'close-beforeunload-false.html')
+
+    it 'returning non-empty string would prevent close', (done) ->
+      w = new BrowserWindow(show: false)
+      w.on 'onbeforeunload', ->
+        w.destroy()
+        done()
+      w.loadUrl 'file://' + path.join(fixtures, 'api', 'close-beforeunload-false.html')
diff --git a/spec/fixtures/api/beforeunload-false.html b/spec/fixtures/api/beforeunload-false.html
new file mode 100644 (file)
index 0000000..06a2ecf
--- /dev/null
@@ -0,0 +1,12 @@
+<html>
+<body>
+<script type="text/javascript" charset="utf-8">
+  window.onbeforeunload = function() {
+    setImmediate(function() {
+      require('remote').getCurrentWindow().emit('onbeforeunload');
+    });
+    return false;
+  }
+</script>
+</body>
+</html>
diff --git a/spec/fixtures/api/close-beforeunload-false.html b/spec/fixtures/api/close-beforeunload-false.html
new file mode 100644 (file)
index 0000000..d8e4f1f
--- /dev/null
@@ -0,0 +1,13 @@
+<html>
+<body>
+<script type="text/javascript" charset="utf-8">
+  window.onbeforeunload = function() {
+    setImmediate(function() {
+      require('remote').getCurrentWindow().emit('onbeforeunload');
+    });
+    return false;
+  }
+  window.close();
+</script>
+</body>
+</html>
diff --git a/spec/fixtures/api/close-beforeunload-string.html b/spec/fixtures/api/close-beforeunload-string.html
new file mode 100644 (file)
index 0000000..c4fc0ba
--- /dev/null
@@ -0,0 +1,13 @@
+<html>
+<body>
+<script type="text/javascript" charset="utf-8">
+  window.onbeforeunload = function() {
+    setImmediate(function() {
+      require('remote').getCurrentWindow().emit('onbeforeunload');
+    });
+    return 'string';
+  }
+  window.close();
+</script>
+</body>
+</html>
diff --git a/spec/fixtures/api/close-beforeunload-true.html b/spec/fixtures/api/close-beforeunload-true.html
new file mode 100644 (file)
index 0000000..667afbb
--- /dev/null
@@ -0,0 +1,14 @@
+<html>
+<body>
+<script type="text/javascript" charset="utf-8">
+  window.onbeforeunload = function() {
+    setImmediate(function() {
+      require('remote').getCurrentWindow().emit('onbeforeunload');
+    });
+    return true;
+  }
+  window.close();
+</script>
+</body>
+</html>
+