1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- const fs = require('fs')
- const test = require('tape')
- const GraphemeSplitter = require('../index')
- function ucs2encode(array) {
- return array.map( value => {
- let output = '';
- if (value > 0xFFFF) {
- value -= 0x10000;
- output += String.fromCharCode(value >>> 10 & 0x3FF | 0xD800);
- value = 0xDC00 | value & 0x3FF;
- }
- output += String.fromCharCode(value);
- return output;
- }).join('');
- }
- function testDataFromLine(line) {
- const codePoints = line.split(/\s*[×÷]\s*/).map(c => parseInt(c, 16));
- const input = ucs2encode(codePoints);
- const expected = line.split(/\s*÷\s*/) .map(sequence => {
- const codePoints = sequence.split(/\s*×\s*/).map(c => parseInt(c, 16))
- return ucs2encode(codePoints)
- });
- return { input, expected };
- }
- const testData = fs.readFileSync('tests/GraphemeBreakTest.txt', 'utf-8')
- .split('\n')
- .filter(line =>
- line != null && line.length > 0 && !line.startsWith('#'))
- .map(line => line.split('#')[0])
- .map(testDataFromLine);
- // ---------------------------------------------------------------------------
- // Test cases
- // ---------------------------------------------------------------------------
- test('splitGraphemes returns properly split list from string', t => {
- const splitter = new GraphemeSplitter();
- t.plan(testData.length);
- testData.forEach( ({ input, expected }) => {
- const result = splitter.splitGraphemes(input);
-
- t.deepLooseEqual(result, expected);
- });
- t.end();
- });
- test('iterateGraphemes returns properly split iterator from string', t => {
- const splitter = new GraphemeSplitter();
- t.plan(testData.length);
- testData.forEach( ({ input, expected }) => {
- const result = splitter.iterateGraphemes(input);
- t.deepLooseEqual([...result], expected);
- });
- t.end();
- });
- test('countGraphemes returns the correct number of graphemes in string', t => {
- const splitter = new GraphemeSplitter();
- t.plan(testData.length);
- testData.forEach( ({ input, expected }) => {
- const result = splitter.countGraphemes(input);
- t.equal(result, expected.length);
- });
- t.end();
- });
|