mirror of
https://github.com/thinkjs/thinkjs.git
synced 2026-01-18 14:26:56 +00:00
536 lines
16 KiB
JavaScript
536 lines
16 KiB
JavaScript
var should = require('should');
|
||
var assert = require('assert');
|
||
var muk = require('muk');
|
||
var path = require('path');
|
||
var fs = require('fs');
|
||
|
||
global.APP_PATH = path.normalize(__dirname + '/../App');
|
||
process.execArgv.push('--no-app');
|
||
require(path.normalize(__dirname + '/../../index.js'));
|
||
|
||
describe('getThinkRequirePath', function(){
|
||
it('getThinkRequirePath("AdvModel") with APP_DEBUG', function(done){
|
||
global.APP_DEBUG = true;
|
||
var path = getThinkRequirePath('AdvModel');
|
||
assert.equal(path.indexOf('AdvModel.js') > -1, true);
|
||
global.APP_DEBUG = false;
|
||
done();
|
||
})
|
||
it('getThinkRequirePath("Model")', function(){
|
||
var path = getThinkRequirePath('Model');
|
||
assert.equal(path.indexOf('lib/Lib/Core/Model.js') > -1, true);
|
||
})
|
||
it('getThinkRequirePath("notExistModule") with APP_DEBUG', function(){
|
||
global.APP_DEBUG = true;
|
||
var path = getThinkRequirePath('notExistModule');
|
||
//console.log(path)
|
||
assert.equal(path, '');
|
||
global.APP_DEBUG = false;
|
||
})
|
||
it('getThinkRequirePath("notExistModule")', function(){
|
||
var path = getThinkRequirePath('notExistModule');
|
||
assert.equal(path, '');
|
||
})
|
||
})
|
||
|
||
describe('thinkRequire', function(){
|
||
it('thinkRequire is function', function(){
|
||
assert.equal(isFunction(thinkRequire), true)
|
||
})
|
||
it('thinkRequire(function(){})', function(){
|
||
var fn = thinkRequire(function(){});
|
||
assert.equal(isFunction(fn), true);
|
||
})
|
||
it('thinkRequire("modulenotexist")', function(){
|
||
var module = '';
|
||
try{
|
||
module = thinkRequire('modulenotexist');
|
||
}catch(e){}
|
||
assert.equal(module, '')
|
||
})
|
||
it('thinkRequire("/fasdf")', function(){
|
||
var filePath = getThinkRequirePath('Controller');
|
||
var controller = thinkRequire(filePath);
|
||
assert.equal(isFunction(controller), true)
|
||
})
|
||
var list = [
|
||
'Controller', 'App', 'Behavior', 'Cache', 'Db',
|
||
'Dispatcher', 'Filter', 'Http', 'Model',
|
||
'Session', 'Think', 'Valid', 'View', 'Cookie', 'WebSocket',
|
||
'AdvModel', 'CheckResourceBehavior', 'CheckRouteBehavior',
|
||
'DenyIpBehavior', 'LocationTemplateBehavior', 'ParseTemplateBehavior',
|
||
'ReadHtmlCacheBehavior', 'WriteHtmlCacheBehavior', 'FileCache',
|
||
'MemcacheCache', 'MysqlDb', 'DbSession', 'FileSession', 'MemcacheSocket',
|
||
'MysqlSocket', 'EjsTemplate', 'RestController'
|
||
];
|
||
list.forEach(function(item){
|
||
it(item + ' is module', function(){
|
||
var module = thinkRequire(item);
|
||
assert.equal(isFunction(module) || isObject(module), true)
|
||
})
|
||
})
|
||
})
|
||
|
||
describe('inherits from base Class', function(){
|
||
it('inherits from FileCache', function(){
|
||
var fileCache = thinkRequire('FileCache');
|
||
var cls = Cache('FileCache', function(){})
|
||
assert.equal(cls.super_ === fileCache, true)
|
||
})
|
||
it('inherits from Cache', function(){
|
||
var cache = thinkRequire('Cache');
|
||
var cls = Cache(function(){})
|
||
assert.equal(cls.super_ === cache, true)
|
||
})
|
||
})
|
||
|
||
describe('aliasImport', function(){
|
||
it('aliasImport string', function(){
|
||
aliasImport('test', 'path/to/test');
|
||
assert.equal(getThinkRequirePath('test'), 'path/to/test');
|
||
})
|
||
it('aliasImport obj', function(){
|
||
aliasImport({test: 'path/to/test1'});
|
||
assert.equal(getThinkRequirePath('test'), 'path/to/test1')
|
||
})
|
||
})
|
||
|
||
describe('B', function(){
|
||
it('B()', function(){
|
||
assert.equal(B(), undefined)
|
||
})
|
||
it('B(function(){})', function(){
|
||
var fn = function(){
|
||
return 'welefen';
|
||
}
|
||
assert.equal(B(fn), 'welefen')
|
||
})
|
||
it('B("DenyIpBehavior") = true', function(){
|
||
assert.equal(B('DenyIp'), true)
|
||
})
|
||
it('B("DenyIpBehavior"), promise', function(){
|
||
C('deny_ip', ['127.0.0.1']);
|
||
var result = B('DenyIp', {
|
||
ip: function(){
|
||
return '127.0.0.1';
|
||
},
|
||
res: {
|
||
end: function(){}
|
||
}
|
||
});
|
||
assert.equal(isFunction(result.then), true)
|
||
})
|
||
})
|
||
|
||
describe('C', function(){
|
||
it('C("db_host") = "localhost"', function(){
|
||
var host = C('db_host');
|
||
assert.equal(host, '127.0.0.1');
|
||
})
|
||
it('C("one.two") = undefined', function(){
|
||
assert.equal(C('one.two'), undefined)
|
||
})
|
||
it('C("one") = undefined', function(){
|
||
assert.equal(C('one'), undefined);
|
||
})
|
||
it('C("one", "welefen")', function(){
|
||
C('one', 'welefen');
|
||
assert.equal(C('one'), 'welefen');
|
||
})
|
||
it('C("one1.two", "welefen")', function(){
|
||
C('one1.two', 'welefen');
|
||
assert.equal(C('one1.two'), 'welefen');
|
||
assert.equal(JSON.stringify(C('one1')), '{"two":"welefen"}')
|
||
})
|
||
it('C()', function(){
|
||
var data = C();
|
||
assert.equal(data.db_host, '127.0.0.1');
|
||
assert.equal(data.db_type, 'mysql');
|
||
assert.equal(data.port, 8360)
|
||
})
|
||
it('C(null)', function(){
|
||
data = C();
|
||
C(null);
|
||
assert.equal(C('db_host'), undefined)
|
||
assert.equal(C('db_type'), undefined);
|
||
assert.equal(C('port'), undefined)
|
||
C(data);
|
||
assert.equal(C('db_type'), 'mysql')
|
||
})
|
||
})
|
||
|
||
describe('F', function(){
|
||
it('F("not exist")', function(){
|
||
var value = F('not exist');
|
||
assert.equal(value, false)
|
||
})
|
||
it('F("welefen", "suredy")', function(){
|
||
F('welefen', 'suredy');
|
||
var value = F('welefen');
|
||
assert.equal(value, 'suredy')
|
||
})
|
||
it('F("welefen", null)', function(){
|
||
F('welefen', null);
|
||
assert.equal(F('welefen'), null)
|
||
})
|
||
it('F("welefen", {})', function(){
|
||
var data = {name: 'welefen', value: 'suredy'};
|
||
F('welefen', data);
|
||
assert.equal(JSON.stringify(F('welefen')), JSON.stringify(data))
|
||
})
|
||
it('F("welefen", "suredy", tmpPath)', function(){
|
||
F('welefen', 'suredy', DATA_PATH + '/xxx/other');
|
||
var value = F('welefen', undefined, DATA_PATH + '/xxx/other');
|
||
assert.equal(value, 'suredy')
|
||
})
|
||
it('F() file no content', function(){
|
||
var filePath = path.normalize(__dirname + '/../App/Runtime/Data/a.json');
|
||
mkdir(path.dirname(filePath));
|
||
fs.writeFileSync(filePath, '');
|
||
var value = F('a');
|
||
assert.equal(value, false)
|
||
})
|
||
})
|
||
|
||
describe('tag', function(){
|
||
var http = thinkRequire('Http').getDefaultHttp('/index/index');
|
||
http = thinkRequire('Http')(http.req, http.res).run();
|
||
it('all tags', function(done){
|
||
var tags = C('tag');
|
||
assert.equal(JSON.stringify(tags), '{"app_init":[],"form_parse":[null],"path_info":[],"resource_check":["CheckResource"],"route_check":["CheckRoute"],"app_begin":["ReadHtmlCache"],"action_init":[],"view_init":[],"view_template":["LocationTemplate"],"view_parse":["ParseTemplate"],"view_filter":[],"view_end":["WriteHtmlCache"],"action_end":[],"app_end":[null]}')
|
||
done();
|
||
})
|
||
it('tags not found', function(done){
|
||
tag('xxxx', http).then(function(data){
|
||
assert.equal(data, undefined)
|
||
done();
|
||
})
|
||
})
|
||
it('tag:app_init', function(done){
|
||
http.then(function(http){
|
||
return tag('app_init', http)
|
||
}).then(function(data){
|
||
assert.equal(data, undefined);
|
||
done();
|
||
})
|
||
})
|
||
it('tag:form_parse', function(done){
|
||
http.then(function(http){
|
||
return tag('form_parse', http)
|
||
}).then(function(data){
|
||
assert.equal(data, undefined);
|
||
done();
|
||
})
|
||
})
|
||
it('tag:path_info', function(done){
|
||
http.then(function(http){
|
||
return tag('path_info', http)
|
||
}).then(function(data){
|
||
assert.equal(data, undefined);
|
||
done();
|
||
})
|
||
})
|
||
it('tag return value', function(done){
|
||
C('tag.testtag', [function(){
|
||
return 'testtag'
|
||
}]);
|
||
http.then(function(http){
|
||
return tag('testtag', http)
|
||
}).then(function(data){
|
||
assert.equal(data, 'testtag');
|
||
done();
|
||
})
|
||
})
|
||
})
|
||
|
||
|
||
describe('A', function(){
|
||
var http = thinkRequire('Http').getDefaultHttp('/index/index');
|
||
http = thinkRequire('Http')(http.req, http.res).run();
|
||
var filepath = path.normalize(__dirname + '/../App/Lib/Controller/Home/IndexController.js');
|
||
mkdir(path.dirname(filepath));
|
||
fs.writeFileSync(filepath, 'module.exports = Controller({testAction: function(){return "welefen"}})')
|
||
|
||
it('A("home:index:test")', function(done){
|
||
var ret = A('home:index:test', http);
|
||
ret.then(function(value){
|
||
assert.equal(value, 'welefen')
|
||
done();
|
||
})
|
||
})
|
||
var filepath = path.normalize(__dirname + '/../App/Lib/Controller/Home/TestController.js');
|
||
mkdir(path.dirname(filepath));
|
||
fs.writeFileSync(filepath, 'module.exports = Controller({testAction: function(){return "test:test"},otherAction: function(){return {"name":"welefen"}}})')
|
||
it('A("home:test:test")', function(done){
|
||
var ret = A('home:test:test', http);
|
||
ret.then(function(value){
|
||
assert.equal(value, 'test:test')
|
||
done();
|
||
})
|
||
})
|
||
it('A("home:test:other")', function(done){
|
||
var ret = A('home:test:other', http, 'welefen');
|
||
ret.then(function(value){
|
||
assert.deepEqual(value, {"name":"welefen"})
|
||
done();
|
||
})
|
||
})
|
||
it('A("home:test1:other")', function(done){
|
||
var ret = A('home:test1:other', http, 'welefen');
|
||
assert.equal(ret, undefined);
|
||
done();
|
||
})
|
||
it('A("home:test")', function(done){
|
||
var ret = A('home:test', http, 'welefen');
|
||
assert.equal(isFunction(ret.otherAction), true)
|
||
done();
|
||
})
|
||
})
|
||
|
||
describe('D', function(){
|
||
it('D()', function(){
|
||
var model = D();
|
||
var Model = thinkRequire('Model');
|
||
assert.equal(model instanceof Model, true)
|
||
})
|
||
it('D("User").hasFile = function', function(){
|
||
var filepath = path.normalize(__dirname + '/../App/Lib/Model/UserModel.js');
|
||
mkdir(path.dirname(filepath))
|
||
fs.writeFileSync(filepath, 'module.exports = Model({testName: "welefen", hasFile: function(){return true;}})')
|
||
var model = D('User');
|
||
assert.equal(isFunction(model.hasFile), true);
|
||
})
|
||
it('D("User") prop', function(){
|
||
var model = D('User');
|
||
var testName = model.constructor.__prop.testName;
|
||
assert.equal(testName, 'welefen')
|
||
})
|
||
it('D("xxx").hasFile = undefined', function(){
|
||
var model = D('xxx');
|
||
assert.equal(model.hasFile, undefined)
|
||
})
|
||
it('D("xxx").prop', function(){
|
||
var model = D('xxx');
|
||
assert.equal(model.constructor.__prop.testName, undefined)
|
||
})
|
||
it('D("User:AdvModel")', function(){
|
||
var model = D('User:AdvModel');
|
||
assert.equal(isFunction(model.setRelation), false)
|
||
})
|
||
it('D("Xxx:AdvModel")', function(){
|
||
var model = D('Xxx:AdvModel');
|
||
assert.equal(isFunction(model.setRelation), true)
|
||
})
|
||
})
|
||
|
||
describe('M', function(){
|
||
it('M()', function(){
|
||
var model = M();
|
||
var Model = thinkRequire('Model');
|
||
assert.equal(model instanceof Model, true)
|
||
})
|
||
it('M("User").hasFile = undefined', function(){
|
||
var model = M('User');
|
||
assert.equal(model.hasFile, undefined);
|
||
})
|
||
it('M("User") prop', function(){
|
||
var model = M('User');
|
||
var testName = model.constructor.__prop.testName;
|
||
assert.equal(testName, undefined)
|
||
})
|
||
it('M("XXX").hasFile = undefined', function(){
|
||
var model = M('XXX');
|
||
assert.equal(model.hasFile, undefined);
|
||
})
|
||
it('M("User:AdvModel")', function(){
|
||
var model = M('User:AdvModel');
|
||
assert.equal(isFunction(model.setRelation), true)
|
||
})
|
||
it('M("Xxx:AdvModel")', function(){
|
||
var model = D('Xxx:AdvModel');
|
||
assert.equal(isFunction(model.setRelation), true)
|
||
})
|
||
})
|
||
|
||
describe('S', function(){
|
||
describe('FileCache', function(){
|
||
it('file cache string', function(done){
|
||
S('name', 'welefen').then(function(){
|
||
return S('name');
|
||
}).then(function(value){
|
||
assert.equal(value, 'welefen');
|
||
done();
|
||
})
|
||
})
|
||
it('file cache json', function(done){
|
||
S('json', {name: 'welefen'}).then(function(){
|
||
return S('json');
|
||
}).then(function(value){
|
||
//console.log(JSON.stringify(value))
|
||
assert.equal(JSON.stringify(value), '{"name":"welefen"}');
|
||
done();
|
||
})
|
||
})
|
||
it('file rm cache', function(done){
|
||
S('json', {name: 'welefen'}).then(function(){
|
||
return S('json', null);
|
||
}).then(function(){
|
||
return S('json')
|
||
}).then(function(value){
|
||
//console.log(JSON.stringify(value))
|
||
assert.equal(value, undefined);
|
||
done();
|
||
})
|
||
})
|
||
it('file cache timeout', function(done){
|
||
S('json', {name: 'welefen'}, -100).then(function(){
|
||
return S('json');
|
||
}).then(function(value){
|
||
//console.log(JSON.stringify(value))
|
||
assert.equal(value, undefined);
|
||
done();
|
||
})
|
||
})
|
||
it('file cache time', function(done){
|
||
S('json', {name: 'welefen'}, 3).then(function(){
|
||
return S('json');
|
||
}).then(function(value){
|
||
//console.log(JSON.stringify(value))
|
||
assert.equal(JSON.stringify(value), '{"name":"welefen"}');
|
||
done();
|
||
})
|
||
})
|
||
it('file cache, timeout remove', function(done){
|
||
S('json', {name: 'welefen'}, 0.01).then(function(){
|
||
var deferred = getDefer();
|
||
setTimeout(function(){
|
||
S('json').then(function(data){
|
||
deferred.resolve(data)
|
||
})
|
||
}, 20)
|
||
return deferred.promise;
|
||
}).then(function(value){
|
||
//console.log(JSON.stringify(value))
|
||
assert.equal(value, undefined);
|
||
done();
|
||
})
|
||
})
|
||
it('file cache, promise', function(done){
|
||
S('wwwwwwwwfasdfasdw', function(){
|
||
return 'welefen';
|
||
}, -100).then(function(data){
|
||
assert.equal(data, 'welefen');
|
||
return S('wwwwwwwwfasdfasdw', null)
|
||
}).then(function(){
|
||
done();
|
||
})
|
||
})
|
||
|
||
|
||
})
|
||
describe('Node.js memory', function(){
|
||
//使用Node.js内存cache
|
||
it('Node.js mem, cache string', function(done){
|
||
S('name', 'welefen', true).then(function(){
|
||
return S('name');
|
||
}).then(function(value){
|
||
assert.equal(value, 'welefen');
|
||
done();
|
||
})
|
||
})
|
||
it('Node.js mem, cache function', function(done){
|
||
S('name', 'welefen', true).then(function(){
|
||
return S('name', function(){
|
||
return 'welefen cache'
|
||
});
|
||
}).then(function(value){
|
||
assert.equal(value, 'welefen');
|
||
done();
|
||
})
|
||
})
|
||
it('Node.js mem, cache function 1', function(done){
|
||
S('name', 'welefen', true).then(function(){
|
||
return S('name1', function(){
|
||
return 'welefen cache'
|
||
});
|
||
}).then(function(value){
|
||
assert.equal(value, 'welefen cache');
|
||
done();
|
||
})
|
||
})
|
||
it('Node.js mem, cache json', function(done){
|
||
S('json', {name: 'welefen'}, true).then(function(){
|
||
return S('json', undefined, true);
|
||
}).then(function(value){
|
||
//console.log(JSON.stringify(value))
|
||
assert.equal(JSON.stringify(value), '{"name":"welefen"}');
|
||
done();
|
||
})
|
||
})
|
||
it('Node.js mem, rm cache', function(done){
|
||
S('json1', {name: 'welefen'}, true).then(function(){
|
||
return S('json1', null, true);
|
||
}).then(function(){
|
||
return S('json1', undefined, true)
|
||
}).then(function(value){
|
||
//console.log(JSON.stringify(value))
|
||
assert.equal(value, undefined);
|
||
done();
|
||
})
|
||
})
|
||
it('Node.js mem, cache timeout', function(done){
|
||
S('json2', {name: 'welefen'}, {type: true, timeout: -100}).then(function(){
|
||
return S('json2', undefined, true);
|
||
}).then(function(value){
|
||
assert.equal(value, undefined);
|
||
done();
|
||
})
|
||
})
|
||
it('Node.js mem, cache time', function(done){
|
||
S('json3', {name: 'welefen'}, {type: true, timeout: 3}).then(function(){
|
||
return S('json3', undefined, true);
|
||
}).then(function(value){
|
||
//console.log(JSON.stringify(value))
|
||
assert.equal(JSON.stringify(value), '{"name":"welefen"}');
|
||
done();
|
||
})
|
||
})
|
||
it('Node.js mem, cache timeout remove', function(done){
|
||
S('json4', {name: 'welefen'}, {type: true, timeout: 0.01}).then(function(){
|
||
var deferred = getDefer();
|
||
setTimeout(function(){
|
||
S('json4', undefined, true).then(function(data){
|
||
deferred.resolve(data)
|
||
})
|
||
}, 20)
|
||
return deferred.promise;
|
||
}).then(function(value){
|
||
//console.log(JSON.stringify(value))
|
||
assert.equal(value, undefined);
|
||
done();
|
||
})
|
||
})
|
||
})
|
||
})
|
||
|
||
|
||
|
||
describe('L', function(){
|
||
it('L("welefen") = welefen', function(){
|
||
assert.equal(L('welefen'), 'welefen')
|
||
})
|
||
it('L() = undefined', function(){
|
||
assert.equal(L(), undefined)
|
||
})
|
||
})
|
||
|
||
|
||
|
||
//删除缓存文件
|
||
//异步删除,不能在after里操作
|
||
describe('rm tmp files', function(){
|
||
it('rm tmp files', function(done){
|
||
rmdir(path.normalize(__dirname + '/../App')).then(done)
|
||
})
|
||
})
|