| 'use strict'; |
| |
| // Refs: https://github.com/nodejs/node/issues/5832 |
| require('../common'); |
| const url = require('url'); |
| const assert = require('assert'); |
| const fixtures = require('../common/fixtures'); |
| const tests = require( |
| fixtures.path('wpt', 'url', 'resources', 'urltestdata.json') |
| ); |
| |
| let failed = 0; |
| let attempted = 0; |
| |
| tests.forEach((test) => { |
| attempted++; |
| // Skip comments |
| if (typeof test === 'string') return; |
| let 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. |
| let 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 { |
| // For now, we're just interested in the number of failures. |
| failed++; |
| } |
| } |
| } catch { |
| // 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})`); |