You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

48 lines
1.8 KiB

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));
});
});