From d52df7a1cffeb85656d73b0967cc861ac2d6d442 Mon Sep 17 00:00:00 2001 From: Ariya Hidayat Date: Thu, 11 Sep 2014 09:50:14 -0700 Subject: [PATCH] Port the test to abort network request. https://github.com/ariya/phantomjs/issues/12439 --- test/module/webpage/abort-network-request.js | 21 +++++++++++++ test/run-tests.py | 1 + test/webpage-spec.js | 31 ------------------- test/www/logo.html | 8 +++++ test/www/logo.png | Bin 0 -> 22055 bytes 5 files changed, 30 insertions(+), 31 deletions(-) create mode 100644 test/module/webpage/abort-network-request.js create mode 100644 test/www/logo.html create mode 100644 test/www/logo.png diff --git a/test/module/webpage/abort-network-request.js b/test/module/webpage/abort-network-request.js new file mode 100644 index 00000000..2f36b077 --- /dev/null +++ b/test/module/webpage/abort-network-request.js @@ -0,0 +1,21 @@ +var assert = require('../../assert'); +var webpage = require('webpage'); + +var page = webpage.create(); + +var urlToBlockRexExp = /logo\.png$/i; +var abortCount = 0; + +page.onResourceRequested = function(requestData, request) { + if (urlToBlockRexExp.test(requestData.url)) { + assert.typeOf(request, 'object'); + assert.typeOf(request.abort, 'function'); + request.abort(); + ++abortCount; + } +}; + +page.open('http://localhost:9180/logo.html', function (status) { + assert.equal(status, 'success'); + assert.equal(abortCount, 1); +}); diff --git a/test/run-tests.py b/test/run-tests.py index 4cc2a2a8..37f63c20 100755 --- a/test/run-tests.py +++ b/test/run-tests.py @@ -32,6 +32,7 @@ TESTS = [ 'module/webpage/add-header.js', 'module/webpage/remove-header.js', 'module/webpage/modify-header.js', + 'module/webpage/abort-network-request.js', 'module/webpage/resource-request-error.js', 'module/webpage/resource-received-error.js', 'module/system/system.js', diff --git a/test/webpage-spec.js b/test/webpage-spec.js index 20782048..4176941c 100644 --- a/test/webpage-spec.js +++ b/test/webpage-spec.js @@ -1185,37 +1185,6 @@ describe("WebPage object", function() { }); - it('should able to abort a network request', function() { - var page = require('webpage').create(); - var url = 'http://phantomjs.org'; - var urlToBlockRexExp = /phantomjs-logo\.png$/i; - - var handled = false; - - page.onResourceRequested = function(requestData, request) { - - if (urlToBlockRexExp.test(requestData['url'])) { - expect(typeof request).toEqual('object'); - expect(typeof request.abort).toEqual('function'); - request.abort(); - handled = true; - } - }; - - runs(function() { - page.open(url, function(status) { - expect(status).toEqual('success'); - }); - }); - - waits(5000); - - runs(function() { - page.close(); - expect(handled).toBeTruthy(); - }); - }); - xit('should fail on secure connection to url with bad cert', function() { var page = require('webpage').create(); var url = 'https://tv.eurosport.com/'; diff --git a/test/www/logo.html b/test/www/logo.html new file mode 100644 index 00000000..1323ffdf --- /dev/null +++ b/test/www/logo.html @@ -0,0 +1,8 @@ + + + Show logo + + + + + diff --git a/test/www/logo.png b/test/www/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7b44e54189fa80bf2b35227cffcd1559d9e3947a GIT binary patch literal 22055 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