redmine-client/node_modules/i18next/test/i18next.backend.spec.js
2014-12-26 04:41:54 +01:00

270 lines
5.8 KiB
JavaScript

var i18n = require('../index')
, expect = require('expect.js')
, sync;
function asyncLoop(iterations, func, callback) {
var index = 0;
var done = false;
var loop = {
next: function() {
if (done) {
return;
}
if (index < iterations) {
index++;
func(loop);
} else {
done = true;
callback();
}
},
iteration: function() {
return index - 1;
},
'break': function() {
done = true;
callback();
}
};
loop.next();
return loop;
}
function clear(done) {
sync.fetchOne('en-US', 'ns.test', function(err, data) {
var keys = [];
function getKeys(pre, value) {
for (var k in value) {
if (pre) {
keys.push(pre + '.' + k);
} else {
keys.push(k);
}
}
for (var key in value) {
if (typeof(value[key]) === 'object' && value[key].length === undefined) {
var newPre = key;
if (pre) {
newPre = pre + '.' + key;
}
getKeys(newPre, value[key]);
}
}
}
getKeys(null, data);
asyncLoop(keys.length, function(loop) {
sync.postRemove('en-US', 'ns.test', keys[loop.iteration()], function(err) {
loop.next();
});
}, done);
});
}
function initBackend(callback) {
// use file sync
sync = require('../lib/filesync');
callback();
// use yaml
// sync = require('../backends/yaml/index');
// callback();
// use gettext
// sync = require('../backends/gettext/index');
// callback();
// use mongoDb
// sync = require('../backends/mongoDb/index');
// sync.connect(callback);
// use redis
// sync = require('../backends/redis/index');
// sync.connect(callback);
// use couchDb
// sync = require('../backends/couchDb/index');
// sync.connect(callback);
}
describe('i18next.backend.spec', function() {
before(function(done) {
var opts = {
lng: 'en-US',
preload: [],
supportedLngs: [],
lowerCaseLng: false,
ns: 'ns.test',
resGetPath: 'test/locales/__lng__/__ns__.json',
//resGetPath: 'test/locales/__lng__/__ns__.po',
//resGetPath: 'test/locales/__lng__/__ns__.yml',
resSetPath: 'test/locales/__lng__/__ns__.json',
returnObjectTrees: false,
debug: false
};
initBackend(function() {
i18n.backend(sync);
i18n.init(opts, function(t) {
sync = i18n.sync;
clear(done);
});
});
});
describe('backend functionality', function() {
beforeEach(function(done) {
clear(done);
});
describe('fetch one', function() {
it('it should callback without error', function(done) {
sync.fetchOne('en-US', 'ns.test', function(err, data) {
expect(err).to.not.be.ok();
done();
});
});
it('it should strip BOM without error', function(done) {
sync.fetchOne('en-US', 'ns.test-bom', function(err, data) {
expect(err).to.not.be.ok();
done();
});
});
it('it should return JSON.parse error', function(done) {
sync.fetchOne('en-US', 'ns.test-jsonfail', function(err, data) {
expect(err).to.be.ok();
done();
});
});
});
describe('post missing', function() {
it('it should callback without error', function(done) {
sync.saveMissing('en-US', 'ns.test', 'testKey', 'testTrans', function(err) {
expect(err).to.not.be.ok();
done();
});
});
it('it should have inserted the new key', function(done) {
sync.saveMissing('en-US', 'ns.test', 'testKey', 'testTrans', function(err) {
sync.fetchOne('en-US', 'ns.test', function(err, data) {
expect(data.testKey).to.eql('testTrans');
done();
});
});
});
});
describe('post change', function() {
it('it should callback without error', function(done) {
sync.postChange('en-US', 'ns.test', 'testKey', 'testTransNew', function(err) {
expect(err).to.not.be.ok();
done();
});
});
it('it should have changed the key', function(done) {
sync.postChange('en-US', 'ns.test', 'testKey', 'testTransNew', function(err) {
sync.fetchOne('en-US', 'ns.test', function(err, data) {
expect(data.testKey).to.eql('testTransNew');
done();
});
});
});
});
describe('post remove', function() {
it('it should callback without error', function(done) {
sync.saveMissing('en-US', 'ns.test', 'toRemove', 'testTrans', function(err) {
sync.postRemove('en-US', 'ns.test', 'toRemove', function(err) {
expect(err).to.not.be.ok();
done();
});
});
});
it('it should have removed the key', function(done) {
sync.saveMissing('en-US', 'ns.test', 'toRemove', 'testTrans', function(err) {
sync.postRemove('en-US', 'ns.test', 'toRemove', function(err) {
sync.fetchOne('en-US', 'ns.test', function(err, data) {
expect(data.testKey).to.not.be.ok();
done();
});
});
});
});
});
describe('save resource set', function() {
it('it should callback without error', function(done) {
sync.saveResourceSet('en-US', 'ns.test', {
'abc': '123'
}, function(err) {
expect(err).to.not.be.ok();
done();
});
});
it('it should have inserted the new key', function(done) {
sync.saveResourceSet('en-US', 'ns.test', {
'abc': '123'
}, function(err) {
sync.fetchOne('en-US', 'ns.test', function(err, data) {
expect(data.abc).to.eql('123');
done();
});
});
});
});
});
});