238 lines
6.5 KiB
JavaScript
238 lines
6.5 KiB
JavaScript
/**
|
|
* browser_test.js
|
|
*
|
|
* test file for browser-specific functionality
|
|
*
|
|
* Usage:
|
|
* npm install mocha -g
|
|
* mocha browser_test.js -require @babel/register
|
|
*
|
|
* or
|
|
*
|
|
* npm test
|
|
*
|
|
* Copyright (c) 2012-2020 mooster@42at.com
|
|
* https://github.com/moos/wordpos
|
|
*
|
|
* Released under MIT license
|
|
*/
|
|
|
|
// used in src code to signal test mode
|
|
global.window = global.window || {};
|
|
global.window.__mocha = true;
|
|
|
|
var
|
|
chai = require('chai'),
|
|
_ = require('underscore'),
|
|
assert = chai.assert,
|
|
browser = process.browser = process.argv.includes('@babel/register'),
|
|
WordPOS = require('../src/wordpos'),
|
|
wordpos,
|
|
path = require('path'),
|
|
dictPath = browser ? path.resolve('./test/dict') : undefined;
|
|
|
|
const dictRequired = () => Object.keys(require.cache).filter(p => /\bdict\b/i.test(p));
|
|
|
|
if (!browser) {
|
|
throw new Error('Not in browser mode!');
|
|
}
|
|
chai.config.showDiff = true;
|
|
|
|
describe('options: preload', () => {
|
|
|
|
// clear require.cache before each test
|
|
beforeEach(() => {
|
|
dictRequired().forEach((m) => delete require.cache[m]);
|
|
});
|
|
|
|
it('preload: false', () => {
|
|
wordpos = new WordPOS({
|
|
preload: false,
|
|
dictPath: dictPath
|
|
});
|
|
return wordpos.ready().then(res => {
|
|
assert.equal(res, undefined);
|
|
assert.equal(dictRequired().length, 0);
|
|
});
|
|
});
|
|
|
|
it('preload: true', () => {
|
|
assert.equal(dictRequired().length, 0);
|
|
wordpos = new WordPOS({
|
|
preload: true,
|
|
dictPath: dictPath
|
|
});
|
|
return wordpos.ready().then(res => {
|
|
assert.equal(res.length, 4);
|
|
res.forEach(index => assert.equal(index.type, 'index'));
|
|
res.forEach(index => assert.equal(/\bdict.index\./.test(index.filePath), true));
|
|
|
|
let reqs = dictRequired();
|
|
assert.equal(reqs.length, 4);
|
|
reqs.forEach(req => assert.equal(/\bdict.index\./.test(req), true));
|
|
Object.values(WordPOS.POS).forEach(pos => assert.notEqual(reqs.join().indexOf(`index.${pos}.js`), -1));
|
|
});
|
|
});
|
|
|
|
it('preload: "r"', () => {
|
|
wordpos = new WordPOS({
|
|
preload: 'r',
|
|
dictPath: dictPath
|
|
});
|
|
return wordpos.ready().then(res => {
|
|
assert.equal(res.type, 'index');
|
|
assert.equal(res.posName, 'adv');
|
|
let reqs = dictRequired();
|
|
assert.equal(reqs.length, 1);
|
|
assert.equal(/index\.adv\.js/.test(reqs[0]), true);
|
|
});
|
|
});
|
|
|
|
it('preload: ["r","a"]', () => {
|
|
wordpos = new WordPOS({
|
|
preload: ['r','a'],
|
|
dictPath: dictPath
|
|
});
|
|
return wordpos.ready().then(res => {
|
|
assert.equal(res.length, 2);
|
|
|
|
// TODO -- order may NOT be always the same!!!
|
|
assert.equal(res[0].type, 'index');
|
|
assert.equal(res[0].posName, 'adv');
|
|
assert.equal(res[1].type, 'index');
|
|
assert.equal(res[1].posName, 'adj');
|
|
|
|
let reqs = dictRequired();
|
|
assert.equal(reqs.length, 2);
|
|
assert.equal(/index\.adv\.js/.test(reqs[0]), true);
|
|
assert.equal(/index\.adj\.js/.test(reqs[1]), true);
|
|
});
|
|
});
|
|
|
|
it('preload: "foo"', () => {
|
|
wordpos = new WordPOS({
|
|
preload: 'foo',
|
|
dictPath: dictPath
|
|
});
|
|
return wordpos.ready().then(res => {
|
|
// shouldn't get here
|
|
assert(false);
|
|
}).catch(err => {
|
|
assert.equal(err, 'RangeError: Unknown POS "foo" for preload.')
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
|
|
describe('options: preload with includeData', () => {
|
|
|
|
// clear require.cache before each test
|
|
beforeEach(() => {
|
|
dictRequired().forEach((m) => delete require.cache[m]);
|
|
});
|
|
|
|
it('preload: false', () => {
|
|
wordpos = new WordPOS({
|
|
preload: false,
|
|
includeData: true,
|
|
dictPath: dictPath
|
|
});
|
|
return wordpos.ready().then(res => {
|
|
assert.equal(res, undefined);
|
|
assert.equal(dictRequired().length, 0);
|
|
});
|
|
});
|
|
|
|
it('preload: true', () => {
|
|
assert.equal(dictRequired().length, 0);
|
|
wordpos = new WordPOS({
|
|
preload: true,
|
|
includeData: true,
|
|
dictPath: dictPath
|
|
});
|
|
return wordpos.ready().then(res => {
|
|
assert.equal(res.length, 8);
|
|
assert.equal(res.filter(m => m.type === 'index').length, 4);
|
|
assert.equal(res.filter(m => m.type === 'data').length, 4);
|
|
assert.equal(res.filter(m => /\bdict.index\./.test(m.filePath)).length, 4);
|
|
assert.equal(res.filter(m => /\bdict.data\./.test(m.filePath)).length, 4);
|
|
|
|
let reqs = dictRequired();
|
|
assert.equal(reqs.length, 8);
|
|
assert.equal(reqs.filter(m => /\bdict.index\./.test(m)).length, 4);
|
|
assert.equal(reqs.filter(m => /\bdict.data\./.test(m)).length, 4);
|
|
|
|
let reqsStr = reqs.join();
|
|
Object.values(WordPOS.POS).forEach(pos => {
|
|
assert.equal(reqs.filter(m => m.indexOf(`index.${pos}.js`) !== -1).length, 1);
|
|
assert.equal(reqs.filter(m => m.indexOf(`data.${pos}.js`) !== -1).length, 1);
|
|
});
|
|
});
|
|
});
|
|
|
|
it('preload: "r"', () => {
|
|
wordpos = new WordPOS({
|
|
preload: 'r',
|
|
includeData: true,
|
|
dictPath: dictPath
|
|
});
|
|
return wordpos.ready().then(res => {
|
|
assert.equal(res.length, 2);
|
|
assert.equal(res[0].type, 'index');
|
|
assert.equal(res[0].posName, 'adv');
|
|
assert.equal(res[1].type, 'data');
|
|
assert.equal(res[1].posName, 'adv');
|
|
let reqs = dictRequired();
|
|
assert.equal(reqs.length, 2);
|
|
assert.equal(/index\.adv\.js/.test(reqs[0]), true);
|
|
assert.equal(/data\.adv\.js/.test(reqs[1]), true);
|
|
});
|
|
});
|
|
|
|
it('preload: ["r","a"]', () => {
|
|
wordpos = new WordPOS({
|
|
preload: ['r','a'],
|
|
includeData: true,
|
|
dictPath: dictPath
|
|
});
|
|
return wordpos.ready().then(res => {
|
|
assert.equal(res.length, 4);
|
|
|
|
// TODO -- order may NOT be always the same!!!
|
|
assert.equal(res[0].type, 'index');
|
|
assert.equal(res[0].posName, 'adv');
|
|
assert.equal(res[1].type, 'index');
|
|
assert.equal(res[1].posName, 'adj');
|
|
|
|
assert.equal(res[2].type, 'data');
|
|
assert.equal(res[2].posName, 'adv');
|
|
assert.equal(res[3].type, 'data');
|
|
assert.equal(res[3].posName, 'adj');
|
|
|
|
let reqs = dictRequired();
|
|
assert.equal(reqs.length, 4);
|
|
assert.equal(/index\.adv\.js/.test(reqs[0]), true);
|
|
assert.equal(/index\.adj\.js/.test(reqs[1]), true);
|
|
assert.equal(/data\.adv\.js/.test(reqs[2]), true);
|
|
assert.equal(/data\.adj\.js/.test(reqs[3]), true);
|
|
});
|
|
});
|
|
|
|
it('preload: "foo"', () => {
|
|
wordpos = new WordPOS({
|
|
preload: 'foo',
|
|
includeData: true,
|
|
dictPath: dictPath
|
|
});
|
|
return wordpos.ready().then(res => {
|
|
// shouldn't get here
|
|
assert(false);
|
|
}).catch(err => {
|
|
assert.equal(err, 'RangeError: Unknown POS "foo" for preload.')
|
|
});
|
|
});
|
|
|
|
|
|
});
|