• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2// Flags: --expose-internals
3const common = require('../common');
4
5if (!common.hasIntl)
6  common.skip('missing Intl');
7
8const { internalBinding } = require('internal/test/binding');
9const icu = internalBinding('icu');
10const assert = require('assert');
11
12// Test hasConverter method
13assert(icu.hasConverter('utf-8'),
14       'hasConverter should report converter exists for utf-8');
15assert(!icu.hasConverter('x'),
16       'hasConverter should report converter does not exist for x');
17
18const tests = require('../fixtures/url-idna.js');
19const fixtures = require('../common/fixtures');
20const wptToASCIITests = require(
21  fixtures.path('wpt', 'url', 'resources', 'toascii.json')
22);
23
24{
25  for (const [i, { ascii, unicode }] of tests.entries()) {
26    assert.strictEqual(ascii, icu.toASCII(unicode), `toASCII(${i + 1})`);
27    assert.strictEqual(unicode, icu.toUnicode(ascii), `toUnicode(${i + 1})`);
28    assert.strictEqual(ascii, icu.toASCII(icu.toUnicode(ascii)),
29                       `toASCII(toUnicode(${i + 1}))`);
30    assert.strictEqual(unicode, icu.toUnicode(icu.toASCII(unicode)),
31                       `toUnicode(toASCII(${i + 1}))`);
32  }
33}
34
35{
36  for (const [i, test] of wptToASCIITests.entries()) {
37    if (typeof test === 'string')
38      continue; // skip comments
39    const { comment, input, output } = test;
40    let caseComment = `case ${i + 1}`;
41    if (comment)
42      caseComment += ` (${comment})`;
43    if (output === null) {
44      assert.throws(
45        () => icu.toASCII(input),
46        {
47          code: 'ERR_INVALID_ARG_VALUE',
48          name: 'TypeError',
49          message: 'Cannot convert name to ASCII'
50        }
51      );
52      icu.toASCII(input, true); // Should not throw.
53    } else {
54      assert.strictEqual(icu.toASCII(input), output, `ToASCII ${caseComment}`);
55      assert.strictEqual(icu.toASCII(input, true), output,
56                         `ToASCII ${caseComment} in lenient mode`);
57    }
58    icu.toUnicode(input); // Should not throw.
59  }
60}
61