var test = require('tape'); var punycode = require('punycode'); var ent = require('../'); test('amp', function (t) { var a = 'a & b & c'; var b = 'a & b & c'; t.equal(ent.encode(a), b); t.equal(ent.decode(b), a); t.end(); }); test('html', function (t) { var a = ' © π " \''; var b = '<html> © π " ''; t.equal(ent.encode(a), b); t.equal(ent.decode(b), a); t.end(); }); test('html named', function (t) { var a = ' © π " \' ∴ Β β'; var b = '<html> © π " ' ∴ Β β'; t.equal(ent.encode(a, { named: true }), b); t.equal(ent.decode(b), a); t.end(); }); test('ambiguous ampersands', function (t) { var a = '• &bullet'; var b = '• &bullet'; var c = '• &bullet'; t.equal(ent.encode(a, { named: true }), c); t.equal(ent.decode(b), a); t.equal(ent.decode(c), a); t.end(); }); test('entities', function (t) { var a = '\u2124'; var b = 'ℤ'; t.equal(ent.encode(a), b); t.equal(ent.decode(b), a); t.end(); }); test('entities named', function (t) { var a = '\u2124'; var b = 'ℤ'; t.equal(ent.encode(a, { named: true }), b); t.equal(ent.decode(b), a); t.end(); }); test('num', function (t) { var a = String.fromCharCode(1337); var b = 'Թ'; t.equal(ent.encode(a), b); t.equal(ent.decode(b), a); t.equal(ent.encode(a + a), b + b); t.equal(ent.decode(b + b), a + a); t.end(); }); test('astral num', function (t) { var a = punycode.ucs2.encode([0x1d306]); var b = '𝌆'; t.equal(ent.encode(a), b); t.equal(ent.decode(b), a); t.equal(ent.encode(a + a), b + b); t.equal(ent.decode(b + b), a + a); t.end(); }); test('nested escapes', function (t) { var a = '&'; var b = '&amp;'; t.equal(ent.encode(a), b); t.equal(ent.decode(b), a); t.equal(ent.encode(a + a), b + b); t.equal(ent.decode(b + b), a + a); t.end(); }); test('encode `special` option', function (t) { var a = '<>\'"&'; var b = '<>\'"&'; t.equal(ent.encode(a, { named: true, special: { '<': true, '>': true, '&': true } }), b); t.end(); });