48 lines
1.8 KiB
JavaScript
48 lines
1.8 KiB
JavaScript
const fs = require('fs');
|
||
const LineBreaker = require('../');
|
||
const assert = require('assert');
|
||
|
||
describe('unicode line break tests', function () {
|
||
// these tests are weird, possibly incorrect or just tailored differently. we skip them.
|
||
const skip = [
|
||
125, 127, 815, 1161, 1163, 1165, 1167, 1331, 2189, 2191, 2873, 2875, 3567, 3739, 4081, 4083,
|
||
4425, 4427, 4473, 4475, 4597, 4599, 4645, 4647, 4943, 5109, 5111, 5459, 6149, 6151, 6153, 6155,
|
||
6489, 6491, 6663, 6833, 6835, 7005, 7007, 7177, 7179, 7477, 7486, 7491, 7576, 7577, 7578, 7579,
|
||
7580, 7581, 7583, 7584, 7585, 7586, 7587, 7604, 7610, 7611
|
||
];
|
||
|
||
const data = fs.readFileSync(__dirname + '/LineBreakTest.txt', 'utf8');
|
||
const lines = data.split('\n');
|
||
|
||
return lines.forEach(function (line, i) {
|
||
let rowNumber = i + 1;
|
||
let bk;
|
||
if (!line || /^#/.test(line)) { return; }
|
||
|
||
const [cols, comment] = line.split('#');
|
||
const codePoints = cols.split(/\s*[×÷]\s*/).slice(1, -1).map(c => parseInt(c, 16));
|
||
const str = String.fromCodePoint(...codePoints);
|
||
|
||
const breaker = new LineBreaker(str);
|
||
const breaks = [];
|
||
let last = 0;
|
||
while (bk = breaker.nextBreak()) {
|
||
breaks.push(str.slice(last, bk.position));
|
||
last = bk.position;
|
||
}
|
||
|
||
const expected = cols.split(/\s*÷\s*/).slice(0, -1).map(function (c) {
|
||
let codes = c.split(/\s*×\s*/);
|
||
if (codes[0] === '') { codes.shift(); }
|
||
codes = codes.map(c => parseInt(c, 16));
|
||
return String.fromCodePoint(...codes);
|
||
});
|
||
|
||
if (skip.includes(rowNumber)) {
|
||
it.skip(cols, function () { });
|
||
return;
|
||
}
|
||
|
||
it(cols, () => assert.deepStrictEqual(breaks, expected, rowNumber + ' ' + JSON.stringify(breaks) + ' != ' + JSON.stringify(expected) + ' #' + comment));
|
||
});
|
||
});
|