firedoc
Version:
[](https://circleci.com/gh/cocos-creator/firedoc/tree/master)
167 lines (150 loc) • 5.33 kB
JavaScript
const _ = require('underscore');
const path = require('path');
const assert = require('assert');
const utils = require('../lib/utils');
const Firedoc = require('../lib/firedoc').Firedoc;
describe('firedoc.utils', function () {
describe('.escapeHTML', function () {
it('should escape some htmls', function () {
assert.equal('<a></a>', utils.escapeHTML('<a></a>'));
assert.equal('&', utils.escapeHTML('&'));
assert.equal('`', utils.escapeHTML('`'));
assert.equal('"', utils.escapeHTML('"'));
});
});
describe('.safetrim', function () {
it('should trim strings', function () {
assert.equal('abc', utils.safetrim(' abc '));
});
it('should trim unknown object', function () {
assert.equal('true', utils.safetrim(true));
assert.equal('', utils.safetrim(null));
assert.equal('', utils.safetrim(undefined));
assert.equal('1', utils.safetrim(1));
});
});
describe('.unindent', function () {
it('should return unidented string', function () {
assert.equal('* foobar', utils.unindent(' * foobar'));
});
});
describe('.filterFileName', function () {
it('should return filename', function () {
var actual = utils.filterFileName('path/to/file');
assert.equal('path_to_file', actual);
});
});
describe('.getLayouts', function () {
it('should get layouts', function () {
var layouts = utils.getLayouts(path.join(__dirname, '../themes/default'));
assert.ok(layouts.main);
assert.ok(layouts.xhr);
});
});
describe('.getPages', function () {
var themedir = path.join(__dirname, '../themes/default');
it('should get layouts', function () {
var layouts = utils.getLayouts(themedir);
assert.ok(layouts.main);
assert.ok(layouts.xhr);
});
it('should get partials', function () {
var partials = utils.getPartials(themedir);
assert.ok(partials['index']);
assert.ok(partials['enum']);
assert.ok(partials['class']);
assert.ok(partials['module']);
});
});
describe('.prepare', function () {
var themedir = path.join(__dirname, '../themes/default');
it('should call prepare function', function () {
var actual = utils.prepare([themedir], {});
assert.ok(actual.meta);
assert.ok(actual.layouts);
assert.ok(actual.partials);
});
it('should use same dirs', function () {
var actual = utils.prepare([themedir, themedir], {});
assert.ok(actual.meta);
assert.ok(actual.layouts);
assert.ok(actual.partials);
});
it('should use skipLoad', function () {
var actual = utils.prepare([themedir], {skipLoad: true});
assert.ok(actual.meta);
assert.deepEqual(actual.layouts, {});
assert.deepEqual(actual.partials, {});
});
});
describe('.fixType', function () {
it('should fix types', function () {
assert.equal('String', utils.fixType('string'));
assert.equal('Object', utils.fixType('object'));
});
});
describe('.webpath', function () {
it('should return web(http) path from local', function () {
assert.equal('path/to/file', utils.webpath('path\\to\\file'));
});
});
describe('.localize', function () {
it('should localize a string', function () {
var raw = ''+
'!#en english'+
'!#zh 中文';
var en = utils.localize(raw);
var zh = utils.localize(raw, 'zh');
assert.equal('english', utils.localize(raw));
assert.equal('中文', utils.localize(raw, 'zh'));
});
it('should localize a complex string', function () {
var raw = ''+
'!#zh: 这个类用来封装编辑器针对节点的操作。\n'+
'Note: 接口中以 "N" 结尾的使用的都是 Runtime 的原生 Node 类型。\n'+
'!#en: This is a wrapper class for operating...';
var en = utils.localize(raw);
var zh = utils.localize(raw, 'zh');
console.log(en);
console.log(zh);
});
});
describe('.markdownLink', function () {
it('should call markdownLink', function () {
assert.equal('foobarx-10-20', utils.markdownLink('foobar(x,10,20)'));
});
});
describe('.buildFileTree', function () {
it('should call buildFileTree', function (next) {
var src = path.join(__dirname, './targets/basic');
var doc = new Firedoc({'path': src, 'parseOnly': true});
doc.build(function (err, ast, options) {
var filetree = utils.buildFileTree(_.values(ast.files));
assert.equal('test/targets/basic/index.js', filetree.test.targets.basic['index.js'].path);
assert.equal('test_targets_basic_index.js', filetree.test.targets.basic['index.js'].name);
next();
});
});
});
describe('.stringlog', function () {
it('should return the sinle', function () {
var data = {
file: 'file',
line: 20
};
var actual = utils.stringlog(data);
assert.equal(actual, ' file:20');
});
});
describe('.defineReadonly', function () {
var obj = {};
it('define property', function () {
utils.defineReadonly(obj, 'x', 10);
assert.equal(10, obj.x);
});
it('change the obj.x', function () {
obj.x = 100;
assert.equal(10, obj.x);
});
});
});