import { describe, it } from '@ephox/bedrock-client'; import { assert } from 'chai'; import Entities from 'tinymce/core/api/html/Entities'; describe('browser.tinymce.core.html.EntitiesTest', () => { it('encodeRaw', () => { assert.equal( Entities.encodeRaw(`<>"'&\u00e5\u00e4\u00f6\u0060`), `<>"'&\u00e5\u00e4\u00f6\u0060`, 'Raw encoding text' ); assert.equal( Entities.encodeRaw(`<>"'&\u00e5\u00e4\u00f6\u0060`, true), `<>"'&\u00e5\u00e4\u00f6``, 'Raw encoding attribute' ); }); it('encodeAllRaw', () => { assert.equal(Entities.encodeAllRaw(`<>"'&\u00e5\u00e4\u00f6`), '<>"'&\u00e5\u00e4\u00f6', 'Raw encoding all'); }); it('encodeNumeric', () => { assert.equal( Entities.encodeNumeric(`<>"'&\u00e5\u00e4\u00f6\u03b8\u2170\ufa11`), `<>"'&åäöθⅰ﨑`, 'Numeric encoding text' ); assert.equal( Entities.encodeNumeric(`<>"'&\u00e5\u00e4\u00f6`, true), `<>"'&åäö`, 'Numeric encoding attribute' ); }); it('encodeNamed', () => { assert.equal(Entities.encodeNamed(`<>"'&\u00e5\u00e4\u00f6`), `<>"'&åäö`, 'Named encoding text'); assert.equal( Entities.encodeNamed(`<>"'&\u00e5\u00e4\u00f6`, true), `<>"'&åäö`, 'Named encoding attribute' ); assert.equal( Entities.encodeNamed(`<>"'\u00e5\u00e4\u00f6`, false, { å: 'å' }), `<>"'å\u00e4\u00f6`, 'Named encoding text' ); assert.equal( Entities.encodeNamed(`<>"'\u00e5\u00e4\u00f6`, true, { å: 'å' }), `<>"'å\u00e4\u00f6`, 'Named encoding attribute' ); }); it('getEncodeFunc', () => { let encodeFunc: (text: string, attr?: boolean) => string; encodeFunc = Entities.getEncodeFunc('raw'); assert.equal(encodeFunc(`<>"'&\u00e5\u00e4\u00f6`), `<>"'&\u00e5\u00e4\u00f6`, 'Raw encoding text'); assert.equal(encodeFunc(`<>"'&\u00e5\u00e4\u00f6`, true), `<>"'&\u00e5\u00e4\u00f6`, 'Raw encoding attribute'); assert.equal(encodeFunc('\ud87e\udc04'), '\ud87e\udc04', 'Raw high-byte encoding text'); assert.equal(encodeFunc('\ud87e\udc04', true), '\ud87e\udc04', 'Raw high-byte encoding attribute'); encodeFunc = Entities.getEncodeFunc('named'); assert.equal(encodeFunc(`<>"'&\u00e5\u00e4\u00f6`), `<>"'&åäö`, 'Named encoding text'); assert.equal( encodeFunc(`<>"'&\u00e5\u00e4\u00f6`, true), `<>"'&åäö`, 'Named encoding attribute' ); assert.equal(encodeFunc('\ud87e\udc04'), '\ud87e\udc04', 'Named high-byte encoding text'); assert.equal(encodeFunc('\ud87e\udc04', true), '\ud87e\udc04', 'Named high-byte encoding attribute'); encodeFunc = Entities.getEncodeFunc('numeric'); assert.equal(encodeFunc(`<>"'&\u00e5\u00e4\u00f6`), `<>"'&åäö`, 'Numeric encoding text'); assert.equal( encodeFunc(`<>"'&\u00e5\u00e4\u00f6`, true), `<>"'&åäö`, 'Numeric encoding attribute'); assert.equal(encodeFunc('\ud87e\udc04'), '你', 'Numeric high-byte encoding text'); assert.equal(encodeFunc('\ud87e\udc04', true), '你', 'Numeric high-byte encoding attribute'); encodeFunc = Entities.getEncodeFunc('named+numeric', '229,aring'); assert.equal(encodeFunc(`<>"'&\u00e5\u00e4\u00f6`), `<>"'&åäö`, 'Named+numeric encoding text'); assert.equal( encodeFunc(`<>"'&\u00e5\u00e4\u00f6`, true), `<>"'&åäö`, 'Named+numeric encoding attribute' ); assert.equal(encodeFunc('\ud87e\udc04'), '你', 'Named+numeric high-byte encoding text'); assert.equal(encodeFunc('\ud87e\udc04', true), '你', 'Named+numeric high-byte encoding attribute'); encodeFunc = Entities.getEncodeFunc('named,numeric', '229,aring'); assert.equal(encodeFunc(`<>"'&\u00e5\u00e4\u00f6`), `<>"'&åäö`, 'Named+numeric encoding text'); assert.equal( encodeFunc(`<>"'&\u00e5\u00e4\u00f6`, true), `<>"'&åäö`, 'Named+numeric encoding attribute' ); assert.equal(encodeFunc('\ud87e\udc04'), '你', 'Named+numeric high-byte encoding text'); assert.equal(encodeFunc('\ud87e\udc04', true), '你', 'Named+numeric high-byte encoding attribute'); }); it('decode', () => { assert.equal( Entities.decode('<>"'&åäö&unknown;'), `<>"'&\u00e5\u00e4\u00f6&unknown;`, 'Decode text with various entities' ); assert.equal(Entities.decode('AB''), `AB'`, 'Decode numeric entities'); assert.equal(Entities.decode('OO''), `OO'`, 'Decode hexanumeric entities'); assert.equal(Entities.decode('ABC'), 'ABC', 'Decode numeric entities with no semicolon'); assert.equal(Entities.decode('&test'), '&test', 'Dont decode invalid entity name without semicolon'); assert.equal(Entities.encodeNumeric(Entities.decode( '‚ƒ„…†‡ˆ‰Š' + '‹ŒŽ‘’“”•–—˜' + '™š›œžŸ') ), '‚ƒ„…†‡ˆ‰Š‹ŒŽ' + '‘’“”•–—˜™š' + '›œžŸ', 'Entity decode ascii'); assert.equal(Entities.encodeNumeric(Entities.decode('你')), '你', 'High byte non western character.'); }); });