1'use strict'; 2 3// Tests below are not from WPT. 4 5const common = require('../common'); 6 7if (!common.hasIntl) 8 common.skip('missing Intl'); 9 10const assert = require('assert'); 11const { domainToASCII, domainToUnicode } = require('url'); 12 13const tests = require('../fixtures/url-idna'); 14const fixtures = require('../common/fixtures'); 15const wptToASCIITests = require( 16 fixtures.path('wpt', 'url', 'resources', 'toascii.json') 17); 18 19{ 20 const expectedError = { code: 'ERR_MISSING_ARGS', name: 'TypeError' }; 21 assert.throws(() => domainToASCII(), expectedError); 22 assert.throws(() => domainToUnicode(), expectedError); 23 assert.strictEqual(domainToASCII(undefined), 'undefined'); 24 assert.strictEqual(domainToUnicode(undefined), 'undefined'); 25} 26 27{ 28 for (const [i, { ascii, unicode }] of tests.entries()) { 29 assert.strictEqual(ascii, domainToASCII(unicode), 30 `domainToASCII(${i + 1})`); 31 assert.strictEqual(unicode, domainToUnicode(ascii), 32 `domainToUnicode(${i + 1})`); 33 assert.strictEqual(ascii, domainToASCII(domainToUnicode(ascii)), 34 `domainToASCII(domainToUnicode(${i + 1}))`); 35 assert.strictEqual(unicode, domainToUnicode(domainToASCII(unicode)), 36 `domainToUnicode(domainToASCII(${i + 1}))`); 37 } 38} 39 40{ 41 for (const [i, test] of wptToASCIITests.entries()) { 42 if (typeof test === 'string') 43 continue; // skip comments 44 const { comment, input, output } = test; 45 let caseComment = `Case ${i + 1}`; 46 if (comment) 47 caseComment += ` (${comment})`; 48 if (output === null) { 49 assert.strictEqual(domainToASCII(input), '', caseComment); 50 assert.strictEqual(domainToUnicode(input), '', caseComment); 51 } else { 52 assert.strictEqual(domainToASCII(input), output, caseComment); 53 const roundtripped = domainToASCII(domainToUnicode(input)); 54 assert.strictEqual(roundtripped, output, caseComment); 55 } 56 } 57} 58