The Wayback Machine - https://web.archive.org/web/20250407172935/https://github.com/nodejs/node/commit/b93c3d89f5
Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Commit b93c3d8

Browse filesBrowse files
claudiorodriguezaddaleax
authored andcommitted
test: add toASCII and toUnicode punycode tests
- Add toUnicode and toASCII tests to test-punycode - Refactor test-punycode.js to better organize test cases - Change assert.equal to assert.strictEqual in test-punycode.js PR-URL: #9741 Reviewed-By: Roman Reiss <me@silverwind.io> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
1 parent 51c8fe0 commit b93c3d8
Copy full SHA for b93c3d8

File tree

1 file changed

+165
-94
lines changed

1 file changed

+165
-94
lines changed

‎test/parallel/test-punycode.js

Copy file name to clipboard
+165-94
Original file line numberDiff line numberDiff line change
@@ -1,153 +1,224 @@
11
'use strict';
22
require('../common');
3-
var punycode = require('punycode');
4-
var assert = require('assert');
3+
const punycode = require('punycode');
4+
const assert = require('assert');
55

6-
assert.equal(punycode.encode('ü'), 'tda');
7-
assert.equal(punycode.encode('Goethe'), 'Goethe-');
8-
assert.equal(punycode.encode('Bücher'), 'Bcher-kva');
9-
assert.equal(punycode.encode(
6+
assert.strictEqual(punycode.encode('ü'), 'tda');
7+
assert.strictEqual(punycode.encode('Goethe'), 'Goethe-');
8+
assert.strictEqual(punycode.encode('Bücher'), 'Bcher-kva');
9+
assert.strictEqual(punycode.encode(
1010
'Willst du die Blüthe des frühen, die Früchte des späteren Jahres'),
1111
'Willst du die Blthe des frhen, die Frchte des spteren Jahres-x9e96lkal');
12-
assert.equal(punycode.encode('日本語'), 'wgv71a119e');
12+
assert.strictEqual(punycode.encode('日本語'), 'wgv71a119e');
1313

14-
assert.equal(punycode.decode('tda'), 'ü');
15-
assert.equal(punycode.decode('Goethe-'), 'Goethe');
16-
assert.equal(punycode.decode('Bcher-kva'), 'Bücher');
17-
assert.equal(punycode.decode(
14+
assert.strictEqual(punycode.decode('tda'), 'ü');
15+
assert.strictEqual(punycode.decode('Goethe-'), 'Goethe');
16+
assert.strictEqual(punycode.decode('Bcher-kva'), 'Bücher');
17+
assert.strictEqual(punycode.decode(
1818
'Willst du die Blthe des frhen, die Frchte des spteren Jahres-x9e96lkal'),
1919
'Willst du die Blüthe des frühen, die Früchte des späteren Jahres');
20-
assert.equal(punycode.decode('wgv71a119e'), '日本語');
20+
assert.strictEqual(punycode.decode('wgv71a119e'), '日本語');
2121

2222
// http://tools.ietf.org/html/rfc3492#section-7.1
23-
var tests = {
23+
const tests = [
2424
// (A) Arabic (Egyptian)
25-
'egbpdaj6bu4bxfgehfvwxn':
26-
'\u0644\u064A\u0647\u0645\u0627\u0628\u062A\u0643\u0644\u0645\u0648' +
27-
'\u0634\u0639\u0631\u0628\u064A\u061F',
25+
{
26+
encoded: 'egbpdaj6bu4bxfgehfvwxn',
27+
decoded: '\u0644\u064A\u0647\u0645\u0627\u0628\u062A\u0643\u0644\u0645' +
28+
'\u0648\u0634\u0639\u0631\u0628\u064A\u061F'
29+
},
2830

2931
// (B) Chinese (simplified)
30-
'ihqwcrb4cv8a8dqg056pqjye':
31-
'\u4ED6\u4EEC\u4E3A\u4EC0\u4E48\u4E0D\u8BF4\u4E2D\u6587',
32+
{
33+
encoded: 'ihqwcrb4cv8a8dqg056pqjye',
34+
decoded: '\u4ED6\u4EEC\u4E3A\u4EC0\u4E48\u4E0D\u8BF4\u4E2D\u6587'
35+
},
3236

3337
// (C) Chinese (traditional)
34-
'ihqwctvzc91f659drss3x8bo0yb':
35-
'\u4ED6\u5011\u7232\u4EC0\u9EBD\u4E0D\u8AAA\u4E2D\u6587',
38+
{
39+
encoded: 'ihqwctvzc91f659drss3x8bo0yb',
40+
decoded: '\u4ED6\u5011\u7232\u4EC0\u9EBD\u4E0D\u8AAA\u4E2D\u6587'
41+
},
3642

3743
// (D) Czech: Pro<ccaron>prost<ecaron>nemluv<iacute><ccaron>esky
38-
'Proprostnemluvesky-uyb24dma41a':
39-
'\u0050\u0072\u006F\u010D\u0070\u0072\u006F\u0073\u0074\u011B\u006E' +
40-
'\u0065\u006D\u006C\u0075\u0076\u00ED\u010D\u0065\u0073\u006B\u0079',
44+
{
45+
encoded: 'Proprostnemluvesky-uyb24dma41a',
46+
decoded: '\u0050\u0072\u006F\u010D\u0070\u0072\u006F\u0073\u0074\u011B' +
47+
'\u006E\u0065\u006D\u006C\u0075\u0076\u00ED\u010D\u0065\u0073\u006B\u0079'
48+
},
4149

4250
// (E) Hebrew
43-
'4dbcagdahymbxekheh6e0a7fei0b':
44-
'\u05DC\u05DE\u05D4\u05D4\u05DD\u05E4\u05E9\u05D5\u05D8\u05DC\u05D0' +
45-
'\u05DE\u05D3\u05D1\u05E8\u05D9\u05DD\u05E2\u05D1\u05E8\u05D9\u05EA',
51+
{
52+
encoded: '4dbcagdahymbxekheh6e0a7fei0b',
53+
decoded: '\u05DC\u05DE\u05D4\u05D4\u05DD\u05E4\u05E9\u05D5\u05D8\u05DC' +
54+
'\u05D0\u05DE\u05D3\u05D1\u05E8\u05D9\u05DD\u05E2\u05D1\u05E8\u05D9\u05EA'
55+
},
4656

4757
// (F) Hindi (Devanagari)
48-
'i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd':
49-
'\u092F\u0939\u0932\u094B\u0917\u0939\u093F\u0928\u094D\u0926\u0940' +
50-
'\u0915\u094D\u092F\u094B\u0902\u0928\u0939\u0940\u0902\u092C\u094B' +
51-
'\u0932\u0938\u0915\u0924\u0947\u0939\u0948\u0902',
58+
{
59+
encoded: 'i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd',
60+
decoded: '\u092F\u0939\u0932\u094B\u0917\u0939\u093F\u0928\u094D\u0926' +
61+
'\u0940\u0915\u094D\u092F\u094B\u0902\u0928\u0939\u0940\u0902\u092C' +
62+
'\u094B\u0932\u0938\u0915\u0924\u0947\u0939\u0948\u0902'
63+
},
5264

5365
// (G) Japanese (kanji and hiragana)
54-
'n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa':
55-
'\u306A\u305C\u307F\u3093\u306A\u65E5\u672C\u8A9E\u3092\u8A71\u3057' +
56-
'\u3066\u304F\u308C\u306A\u3044\u306E\u304B',
66+
{
67+
encoded: 'n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa',
68+
decoded: '\u306A\u305C\u307F\u3093\u306A\u65E5\u672C\u8A9E\u3092\u8A71' +
69+
'\u3057\u3066\u304F\u308C\u306A\u3044\u306E\u304B'
70+
},
5771

5872
// (H) Korean (Hangul syllables)
59-
'989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879ccm6fea98c':
60-
'\uC138\uACC4\uC758\uBAA8\uB4E0\uC0AC\uB78C\uB4E4\uC774\uD55C\uAD6D' +
61-
'\uC5B4\uB97C\uC774\uD574\uD55C\uB2E4\uBA74\uC5BC\uB9C8\uB098\uC88B' +
62-
'\uC744\uAE4C',
73+
{
74+
encoded: '989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879' +
75+
'ccm6fea98c',
76+
decoded: '\uC138\uACC4\uC758\uBAA8\uB4E0\uC0AC\uB78C\uB4E4\uC774\uD55C' +
77+
'\uAD6D\uC5B4\uB97C\uC774\uD574\uD55C\uB2E4\uBA74\uC5BC\uB9C8\uB098' +
78+
'\uC88B\uC744\uAE4C'
79+
},
6380

6481
// (I) Russian (Cyrillic)
65-
'b1abfaaepdrnnbgefbadotcwatmq2g4l':
66-
'\u043F\u043E\u0447\u0435\u043C\u0443\u0436\u0435\u043E\u043D\u0438' +
67-
'\u043D\u0435\u0433\u043E\u0432\u043E\u0440\u044F\u0442\u043F\u043E' +
68-
'\u0440\u0443\u0441\u0441\u043A\u0438',
82+
{
83+
encoded: 'b1abfaaepdrnnbgefbadotcwatmq2g4l',
84+
decoded: '\u043F\u043E\u0447\u0435\u043C\u0443\u0436\u0435\u043E\u043D' +
85+
'\u0438\u043D\u0435\u0433\u043E\u0432\u043E\u0440\u044F\u0442\u043F' +
86+
'\u043E\u0440\u0443\u0441\u0441\u043A\u0438'
87+
},
6988

7089
// (J) Spanish: Porqu<eacute>nopuedensimplementehablarenEspa<ntilde>ol
71-
'PorqunopuedensimplementehablarenEspaol-fmd56a':
72-
'\u0050\u006F\u0072\u0071\u0075\u00E9\u006E\u006F\u0070\u0075\u0065' +
73-
'\u0064\u0065\u006E\u0073\u0069\u006D\u0070\u006C\u0065\u006D\u0065' +
74-
'\u006E\u0074\u0065\u0068\u0061\u0062\u006C\u0061\u0072\u0065\u006E' +
75-
'\u0045\u0073\u0070\u0061\u00F1\u006F\u006C',
90+
{
91+
encoded: 'PorqunopuedensimplementehablarenEspaol-fmd56a',
92+
decoded: '\u0050\u006F\u0072\u0071\u0075\u00E9\u006E\u006F\u0070\u0075' +
93+
'\u0065\u0064\u0065\u006E\u0073\u0069\u006D\u0070\u006C\u0065\u006D' +
94+
'\u0065\u006E\u0074\u0065\u0068\u0061\u0062\u006C\u0061\u0072\u0065' +
95+
'\u006E\u0045\u0073\u0070\u0061\u00F1\u006F\u006C'
96+
},
7697

7798
// (K) Vietnamese: T<adotbelow>isaoh<odotbelow>kh<ocirc>ngth
7899
// <ecirchookabove>ch<ihookabove>n<oacute>iti<ecircacute>ngVi<ecircdotbelow>t
79-
'TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g':
80-
'\u0054\u1EA1\u0069\u0073\u0061\u006F\u0068\u1ECD\u006B\u0068\u00F4' +
81-
'\u006E\u0067\u0074\u0068\u1EC3\u0063\u0068\u1EC9\u006E\u00F3\u0069' +
82-
'\u0074\u0069\u1EBF\u006E\u0067\u0056\u0069\u1EC7\u0074',
100+
{
101+
encoded: 'TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g',
102+
decoded: '\u0054\u1EA1\u0069\u0073\u0061\u006F\u0068\u1ECD\u006B\u0068' +
103+
'\u00F4\u006E\u0067\u0074\u0068\u1EC3\u0063\u0068\u1EC9\u006E\u00F3' +
104+
'\u0069\u0074\u0069\u1EBF\u006E\u0067\u0056\u0069\u1EC7\u0074'
105+
},
83106

84107
// (L) 3<nen>B<gumi><kinpachi><sensei>
85-
'3B-ww4c5e180e575a65lsy2b':
86-
'\u0033\u5E74\u0042\u7D44\u91D1\u516B\u5148\u751F',
108+
{
109+
encoded: '3B-ww4c5e180e575a65lsy2b',
110+
decoded: '\u0033\u5E74\u0042\u7D44\u91D1\u516B\u5148\u751F'
111+
},
87112

88113
// (M) <amuro><namie>-with-SUPER-MONKEYS
89-
'-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n':
90-
'\u5B89\u5BA4\u5948\u7F8E\u6075\u002D\u0077\u0069\u0074\u0068\u002D' +
91-
'\u0053\u0055\u0050\u0045\u0052\u002D\u004D\u004F\u004E\u004B\u0045' +
92-
'\u0059\u0053',
114+
{
115+
encoded: '-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n',
116+
decoded: '\u5B89\u5BA4\u5948\u7F8E\u6075\u002D\u0077\u0069\u0074\u0068' +
117+
'\u002D\u0053\u0055\u0050\u0045\u0052\u002D\u004D\u004F\u004E\u004B' +
118+
'\u0045\u0059\u0053'
119+
},
93120

94121
// (N) Hello-Another-Way-<sorezore><no><basho>
95-
'Hello-Another-Way--fc4qua05auwb3674vfr0b':
96-
'\u0048\u0065\u006C\u006C\u006F\u002D\u0041\u006E\u006F\u0074\u0068' +
97-
'\u0065\u0072\u002D\u0057\u0061\u0079\u002D\u305D\u308C\u305E\u308C' +
98-
'\u306E\u5834\u6240',
122+
{
123+
encoded: 'Hello-Another-Way--fc4qua05auwb3674vfr0b',
124+
decoded: '\u0048\u0065\u006C\u006C\u006F\u002D\u0041\u006E\u006F\u0074' +
125+
'\u0068\u0065\u0072\u002D\u0057\u0061\u0079\u002D\u305D\u308C\u305E' +
126+
'\u308C\u306E\u5834\u6240'
127+
},
99128

100129
// (O) <hitotsu><yane><no><shita>2
101-
'2-u9tlzr9756bt3uc0v':
102-
'\u3072\u3068\u3064\u5C4B\u6839\u306E\u4E0B\u0032',
130+
{
131+
encoded: '2-u9tlzr9756bt3uc0v',
132+
decoded: '\u3072\u3068\u3064\u5C4B\u6839\u306E\u4E0B\u0032'
133+
},
103134

104135
// (P) Maji<de>Koi<suru>5<byou><mae>
105-
'MajiKoi5-783gue6qz075azm5e':
106-
'\u004D\u0061\u006A\u0069\u3067\u004B\u006F\u0069\u3059\u308B\u0035' +
107-
'\u79D2\u524D',
136+
{
137+
encoded: 'MajiKoi5-783gue6qz075azm5e',
138+
decoded: '\u004D\u0061\u006A\u0069\u3067\u004B\u006F\u0069\u3059\u308B' +
139+
'\u0035\u79D2\u524D'
140+
},
108141

109142
// (Q) <pafii>de<runba>
110-
'de-jg4avhby1noc0d':
111-
'\u30D1\u30D5\u30A3\u30FC\u0064\u0065\u30EB\u30F3\u30D0',
143+
{
144+
encoded: 'de-jg4avhby1noc0d',
145+
decoded: '\u30D1\u30D5\u30A3\u30FC\u0064\u0065\u30EB\u30F3\u30D0'
146+
},
112147

113148
// (R) <sono><supiido><de>
114-
'd9juau41awczczp':
115-
'\u305D\u306E\u30B9\u30D4\u30FC\u30C9\u3067',
149+
{
150+
encoded: 'd9juau41awczczp',
151+
decoded: '\u305D\u306E\u30B9\u30D4\u30FC\u30C9\u3067'
152+
},
116153

117154
// (S) -> $1.00 <-
118-
'-> $1.00 <--':
119-
'\u002D\u003E\u0020\u0024\u0031\u002E\u0030\u0030\u0020\u003C\u002D'
155+
{
156+
encoded: '-> $1.00 <--',
157+
decoded: '\u002D\u003E\u0020\u0024\u0031\u002E\u0030\u0030\u0020\u003C' +
158+
'\u002D'
159+
}
160+
];
161+
162+
let errors = 0;
163+
const handleError = (error, name) => {
164+
console.error(
165+
'FAIL: %s expected %j, got %j',
166+
name,
167+
error.expected,
168+
error.actual
169+
);
170+
errors++;
120171
};
121172

122-
var errors = 0;
173+
const regexNonASCII = /[^\x20-\x7E]/;
174+
const testBattery = {
175+
encode: (test) => assert.strictEqual(
176+
punycode.encode(test.decoded),
177+
test.encoded
178+
),
179+
decode: (test) => assert.strictEqual(
180+
punycode.decode(test.encoded),
181+
test.decoded
182+
),
183+
toASCII: (test) => assert.strictEqual(
184+
punycode.toASCII(test.decoded),
185+
regexNonASCII.test(test.decoded)
186+
? `xn--${test.encoded}`
187+
: test.decoded
188+
),
189+
toUnicode: (test) => assert.strictEqual(
190+
punycode.toUnicode(
191+
regexNonASCII.test(test.decoded)
192+
? `xn--${test.encoded}`
193+
: test.decoded
194+
),
195+
regexNonASCII.test(test.decoded)
196+
? test.decoded.toLowerCase()
197+
: test.decoded
198+
)
199+
};
123200

124-
for (var encoded in tests) {
125-
var decoded = tests[encoded];
126-
try {
127-
assert.equal(punycode.encode(decoded), encoded);
128-
} catch (e) {
129-
console.error('FAIL: expected %j, got %j', e.expected, e.actual);
130-
errors++;
131-
}
132-
try {
133-
assert.equal(punycode.decode(encoded), decoded);
134-
} catch (e) {
135-
console.error('FAIL: expected %j, got %j', e.expected, e.actual);
136-
errors++;
137-
}
138-
}
201+
tests.forEach((testCase) => {
202+
Object.keys(testBattery).forEach((key) => {
203+
try {
204+
testBattery[key](testCase);
205+
} catch (error) {
206+
handleError(error, key);
207+
}
208+
});
209+
});
139210

140211
// BMP code point
141-
assert.equal(punycode.ucs2.encode([0x61]), 'a');
212+
assert.strictEqual(punycode.ucs2.encode([0x61]), 'a');
142213
// supplementary code point (surrogate pair)
143-
assert.equal(punycode.ucs2.encode([0x1D306]), '\uD834\uDF06');
214+
assert.strictEqual(punycode.ucs2.encode([0x1D306]), '\uD834\uDF06');
144215
// high surrogate
145-
assert.equal(punycode.ucs2.encode([0xD800]), '\uD800');
216+
assert.strictEqual(punycode.ucs2.encode([0xD800]), '\uD800');
146217
// high surrogate followed by non-surrogates
147-
assert.equal(punycode.ucs2.encode([0xD800, 0x61, 0x62]), '\uD800ab');
218+
assert.strictEqual(punycode.ucs2.encode([0xD800, 0x61, 0x62]), '\uD800ab');
148219
// low surrogate
149-
assert.equal(punycode.ucs2.encode([0xDC00]), '\uDC00');
220+
assert.strictEqual(punycode.ucs2.encode([0xDC00]), '\uDC00');
150221
// low surrogate followed by non-surrogates
151-
assert.equal(punycode.ucs2.encode([0xDC00, 0x61, 0x62]), '\uDC00ab');
222+
assert.strictEqual(punycode.ucs2.encode([0xDC00, 0x61, 0x62]), '\uDC00ab');
152223

153-
assert.equal(errors, 0);
224+
assert.strictEqual(errors, 0);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.