mirror of https://github.com/lukechilds/node.git
Browse Source
url resolve and parse do not currently adhere to the same url spec parsing rules that browsers use, which leads to some issues. This addition to test/known_issues creates a set of tests based on the w3c/whatwg test suite from: Refs: https://github.com/w3c/web-platform-tests/tree/master/url PR-URL: https://github.com/nodejs/node/pull/5885 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Brian White <mscdex@mscdex.net>process-exit-stdio-flushing
James M Snell
9 years ago
2 changed files with 4287 additions and 0 deletions
File diff suppressed because it is too large
@ -0,0 +1,57 @@ |
|||
'use strict'; |
|||
|
|||
// Refs: https://github.com/nodejs/node/issues/5832
|
|||
|
|||
const common = require('../common'); |
|||
const url = require('url'); |
|||
const assert = require('assert'); |
|||
const path = require('path'); |
|||
|
|||
const tests = require(path.join(common.fixturesDir, 'url-tests.json')); |
|||
|
|||
var failed = 0; |
|||
var attempted = 0; |
|||
|
|||
tests.forEach((test) => { |
|||
attempted++; |
|||
// Skip comments
|
|||
if (typeof test === 'string') return; |
|||
var parsed; |
|||
|
|||
try { |
|||
// Attempt to parse
|
|||
parsed = url.parse(url.resolve(test.base, test.input)); |
|||
if (test.failure) { |
|||
// If the test was supposed to fail and we didn't get an
|
|||
// error, treat it as a failure.
|
|||
failed++; |
|||
} else { |
|||
// Test was not supposed to fail, so we're good so far. Now
|
|||
// check the results of the parse.
|
|||
var username, password; |
|||
try { |
|||
assert.strictEqual(test.href, parsed.href); |
|||
assert.strictEqual(test.protocol, parsed.protocol); |
|||
username = parsed.auth ? parsed.auth.split(':', 2)[0] : ''; |
|||
password = parsed.auth ? parsed.auth.split(':', 2)[1] : ''; |
|||
assert.strictEqual(test.username, username); |
|||
assert.strictEqual(test.password, password); |
|||
assert.strictEqual(test.host, parsed.host); |
|||
assert.strictEqual(test.hostname, parsed.hostname); |
|||
assert.strictEqual(+test.port, +parsed.port); |
|||
assert.strictEqual(test.pathname, parsed.pathname || '/'); |
|||
assert.strictEqual(test.search, parsed.search || ''); |
|||
assert.strictEqual(test.hash, parsed.hash || ''); |
|||
} catch (err) { |
|||
// For now, we're just interested in the number of failures.
|
|||
failed++; |
|||
} |
|||
} |
|||
} catch (err) { |
|||
// If Parse failed and it wasn't supposed to, treat it as a failure.
|
|||
if (!test.failure) |
|||
failed++; |
|||
} |
|||
}); |
|||
|
|||
assert.ok(failed === 0, `${failed} failed tests (out of ${attempted})`); |
Loading…
Reference in new issue