thinkjs/test/Lib/Util/Cache.js
2014-08-18 09:55:11 +08:00

160 lines
4.5 KiB
JavaScript

var should = require('should');
var assert = require('assert');
var muk = require('muk');
var path = require('path')
global.APP_PATH = path.normalize(__dirname + '/../../App');
process.execArgv.push('--no-app');
require(path.normalize(__dirname + '/../../../index.js'));
var Cache = thinkRequire('Cache');
describe('Cache', function(){
var setIntervalFn = global.setInterval;
it('before', function(){
global.setInterval = function(callback, interval){
callback && callback();
}
})
it('empty options', function(){
var instance = Cache();
assert.deepEqual(instance.options, { timeout: 21600 });
})
it('gctype options', function(){
var instance = Cache({
gcType: 'Cache'
});
assert.deepEqual(instance.options, { timeout: 21600, gcType: 'Cache' });
})
it('timeout options', function(){
var instance = Cache({
timeout: 100
});
assert.deepEqual(instance.options, { timeout: 100 });
})
it('gc', function(){
APP_MODE = '';
APP_DEBUG = false
var instance = Cache({
timeout: 100
});
})
it('gc hour', function(){
APP_MODE = '';
APP_DEBUG = false;
var hour = (new Date()).getHours();
C('cache_gc_hour', [hour])
var instance = Cache({
timeout: 100
});
C('cache_gc_hour', [])
})
it('get undefined', function(done){
var instance = Cache();
instance.cacheData = {};
instance.get('name').then(function(data){
assert.deepEqual(data, undefined);
done();
})
})
it('get data', function(done){
var instance = Cache();
instance.set('name', 'welefen').then(function(){
return instance.get('name');
}).then(function(data){
assert.deepEqual(data, 'welefen');
done();
})
})
it('get data expired', function(done){
var instance = Cache();
instance.set('name1', 'welefen', -100).then(function(){
return instance.get('name1');
}).then(function(data){
assert.deepEqual(data, undefined);
done();
})
})
it('get updateExpire', function(done){
var instance = Cache({updateExpire: true});
instance.set('name2', 'welefen', 100).then(function(){
return instance.get('name2');
}).then(function(data){
assert.deepEqual(data, 'welefen');
done();
})
})
it('get mixed data', function(done){
var instance = Cache({updateExpire: true});
var data = {name: 'welefen'};
instance.set('name2', data, 100).then(function(){
return instance.get('name2');
}).then(function(d){
assert.deepEqual(data, d);
data.value = 'suredy';
assert.deepEqual(d, {name: 'welefen'})
done();
})
})
it('get array', function(done){
var instance = Cache({updateExpire: true});
var data = [1, 2, 3]
instance.set('name2', data, 100).then(function(){
return instance.get('name2');
}).then(function(d){
assert.deepEqual(data, d);
data.push(4);
assert.deepEqual(d, [1, 2, 3])
done();
})
})
it('rm', function(done){
var instance = Cache({updateExpire: true});
instance.cacheData = {name2: {data: {}}}
instance.rm('name').then(function(){
assert.deepEqual(Object.keys(instance.cacheData), ['name2'])
done();
})
})
it('rm empty', function(done){
var instance = Cache({updateExpire: true});
instance.key = 'name';
instance.cacheData = {};
instance.rm('name').then(function(){
assert.deepEqual(instance.cacheData, {})
done();
})
})
it('rm empty', function(done){
var instance = Cache({updateExpire: true});
instance.key = 'name';
instance.cacheData = {name: {data: {}}};
instance.rm('name').then(function(){
//console.log(instance.cacheData)
assert.deepEqual(instance.cacheData, { name: { data: {} } })
done();
})
})
it('gc empty', function(){
var instance = Cache({updateExpire: true});
instance.cacheData = {};
instance.gc(1);
assert.deepEqual(instance.cacheData, {})
})
it('gc not expired', function(){
var instance = Cache({updateExpire: true});
var now = Date.now();
instance.cacheData = {name: {expire: now + 1000000, data: {}}};
instance.gc(1);
assert.deepEqual(instance.cacheData, {name: {expire: now + 1000000, data: {}}})
})
it('gc expired', function(){
var instance = Cache({updateExpire: true});
instance.cacheData = {name: {expire: Date.now() - 1000000, data: {}}};
instance.gc(Date.now());
assert.deepEqual(instance.cacheData, {})
})
it('after', function(){
global.setInterval = setIntervalFn;
})
})