create project
This commit is contained in:
83
kitabcitab/node_modules/grapheme-splitter/tests/grapheme_splitter_tests.js
generated
vendored
Normal file
83
kitabcitab/node_modules/grapheme-splitter/tests/grapheme_splitter_tests.js
generated
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
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();
|
||||
});
|
||||
Reference in New Issue
Block a user