validation.test.js (1488B)
1 'use strict'; 2 3 const assert = require('assert'); 4 5 const { isValidUTF8 } = require('../lib/validation'); 6 7 describe('extension', () => { 8 describe('isValidUTF8', () => { 9 it('returns false if it finds invalid bytes', () => { 10 assert.strictEqual(isValidUTF8(Buffer.from([0xf8])), false); 11 }); 12 13 it('returns false for overlong encodings', () => { 14 assert.strictEqual(isValidUTF8(Buffer.from([0xc0, 0xa0])), false); 15 assert.strictEqual(isValidUTF8(Buffer.from([0xe0, 0x80, 0xa0])), false); 16 assert.strictEqual( 17 isValidUTF8(Buffer.from([0xf0, 0x80, 0x80, 0xa0])), 18 false 19 ); 20 }); 21 22 it('returns false for code points in the range U+D800 - U+DFFF', () => { 23 for (let i = 0xa0; i < 0xc0; i++) { 24 for (let j = 0x80; j < 0xc0; j++) { 25 assert.strictEqual(isValidUTF8(Buffer.from([0xed, i, j])), false); 26 } 27 } 28 }); 29 30 it('returns false for code points greater than U+10FFFF', () => { 31 assert.strictEqual( 32 isValidUTF8(Buffer.from([0xf4, 0x90, 0x80, 0x80])), 33 false 34 ); 35 assert.strictEqual( 36 isValidUTF8(Buffer.from([0xf5, 0x80, 0x80, 0x80])), 37 false 38 ); 39 }); 40 41 it('returns true for a well-formed UTF-8 byte sequence', () => { 42 // prettier-ignore 43 const buf = Buffer.from([ 44 0xe2, 0x82, 0xAC, // € 45 0xf0, 0x90, 0x8c, 0x88, // 𐍈 46 0x24 // $ 47 ]); 48 49 assert.strictEqual(isValidUTF8(buf), true); 50 }); 51 }); 52 });