Browse Source

Add specs for the beforeunload handler.

Cheng Zhao 11 years ago
parent
commit
cfb957a603

+ 39 - 3
spec/api/window.coffee

@@ -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')

+ 12 - 0
spec/fixtures/api/beforeunload-false.html

@@ -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>

+ 13 - 0
spec/fixtures/api/close-beforeunload-false.html

@@ -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>

+ 13 - 0
spec/fixtures/api/close-beforeunload-string.html

@@ -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>

+ 14 - 0
spec/fixtures/api/close-beforeunload-true.html

@@ -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>
+