puppeteer/third_party/phantomjs/test/module/webpage/url-encoding.js
2017-05-11 00:06:41 -07:00

135 lines
4.2 KiB
JavaScript

//! unsupported
var webpage = require('webpage');
// Many of the URLs used in this file contain text encoded in
// Shift_JIS, so that they will not round-trip correctly if
// misinterpreted at any point as UTF-8 (and thus, the test will
// fail). See www/url-encoding.py for Unicode equivalents.
function URL(path) {
return TEST_HTTP_BASE + 'url-encoding?' + path;
}
async_test(function () {
var p = webpage.create();
p.open(URL('/'), this.step_func_done(function (status) {
assert_equals(status, 'success');
assert_equals(p.url, URL('/%83y%81[%83W'));
assert_equals(p.plainText, 'PASS');
}));
}, "page.url");
async_test(function () {
var p = webpage.create();
p.open(URL('/f'), this.step_func_done(function (status) {
assert_equals(status, 'success');
assert_equals(p.url, URL('/f'));
assert_equals(p.framesCount, 2);
assert_is_true(p.switchToFrame('a'));
assert_equals(p.frameUrl, URL('/%98g'));
assert_equals(p.framePlainText, 'PASS');
assert_is_true(p.switchToParentFrame());
assert_is_true(p.switchToFrame('b'));
assert_equals(p.frameUrl, URL('/%95s%96%D1%82%C8%98_%91%88'));
assert_equals(p.framePlainText, 'FRAME');
}));
}, "page.frameUrl");
async_test(function () {
var p = webpage.create();
var n = 0;
var expectedUrls = [ URL('/'), URL('/%83y%81[%83W') ];
p.onNavigationRequested = this.step_func(function (url, ty, will, main) {
assert_equals(url, expectedUrls[n]);
assert_equals(ty, 'Other');
assert_is_true(will);
assert_is_true(main);
n++;
if (n === expectedUrls.length) {
p.onNavigationRequested = this.unreached_func();
}
});
p.open(URL('/'), this.step_func_done(function (status) {
assert_equals(status, 'success');
assert_equals(n, expectedUrls.length);
assert_equals(p.plainText, 'PASS');
}));
}, "arguments to onNavigationRequested");
async_test(function () {
var p = webpage.create();
var n = 0;
var n_req = 0;
var n_recv = 0;
var expectedUrls = [ URL('/r'), URL('/%8F%91') ];
var receivedUrls = {};
p.onResourceRequested = this.step_func(function (req, nr) {
assert_equals(req.url, expectedUrls[n_req]);
n_req++;
if (n_req === expectedUrls.length) {
p.onResourceRequested = this.unreached_func();
}
});
p.onResourceReceived = this.step_func(function (resp) {
// This function may be called more than once per URL.
if (receivedUrls.hasOwnProperty(resp.url))
return;
receivedUrls[resp.url] = true;
assert_equals(resp.url, expectedUrls[n_recv]);
n_recv++;
});
p.open(URL('/r'), this.step_func_done(function (status) {
assert_equals(status, 'success');
assert_equals(n_req, expectedUrls.length);
assert_equals(n_recv, expectedUrls.length);
assert_equals(p.plainText, 'PASS');
}));
}, "arguments to onResourceRequested and onResourceReceived");
async_test(function () {
var p = webpage.create();
p.settings.resourceTimeout = 100;
var n_timeout = 0;
var n_error = 0;
var expectedUrls_timeout = [ URL('/%89i%8Bv') ];
// the error hook is called for timeouts as well
var expectedUrls_error = [ URL('/%8C%CC%8F%E1'), URL('/%89i%8Bv') ];
p.onResourceTimeout = this.step_func(function (req) {
assert_equals(req.url, expectedUrls_timeout[n_timeout]);
n_timeout++;
if (n_timeout === expectedUrls_timeout.length) {
p.onResourceTimeout = this.unreached_func();
}
});
p.onResourceError = this.step_func(function (err) {
assert_equals(err.url, expectedUrls_error[n_error]);
n_error++;
if (n_error === expectedUrls_error.length) {
p.onResourceTimeout = this.unreached_func();
}
});
p.open(URL("/re"), this.step_func_done(function (status) {
assert_equals(status, 'success');
assert_equals(n_timeout, expectedUrls_timeout.length);
assert_equals(n_error, expectedUrls_error.length);
}));
}, " arguments to onResourceError and onResourceTimeout");