mirror of
https://github.com/localForage/localForage.git
synced 2026-01-25 14:44:26 +00:00
273 lines
9.5 KiB
JavaScript
273 lines
9.5 KiB
JavaScript
/* global before:true, beforeEach:true, describe:true, expect:true, it:true */
|
|
describe('Config API', function() {
|
|
'use strict';
|
|
|
|
var DRIVERS = [
|
|
localforage.INDEXEDDB,
|
|
localforage.LOCALSTORAGE,
|
|
localforage.WEBSQL
|
|
];
|
|
var supportedDrivers = [];
|
|
|
|
before(function() {
|
|
this.defaultConfig = localforage.config();
|
|
|
|
supportedDrivers = [];
|
|
for (var i = 0; i <= DRIVERS.length; i++) {
|
|
if (localforage.supports(DRIVERS[i])) {
|
|
supportedDrivers.push(DRIVERS[i]);
|
|
}
|
|
}
|
|
});
|
|
|
|
// Reset localForage before each test so we can call `config()` without
|
|
// errors.
|
|
beforeEach(function() {
|
|
localforage._ready = null;
|
|
localforage.config(this.defaultConfig);
|
|
});
|
|
|
|
it('returns the default values', function(done) {
|
|
expect(localforage.config('description')).to.be('');
|
|
expect(localforage.config('name')).to.be('localforage');
|
|
expect(localforage.config('size')).to.be(4980736);
|
|
expect(localforage.config('storeName')).to.be('keyvaluepairs');
|
|
expect(localforage.config('version')).to.be(1.0);
|
|
localforage.ready(function() {
|
|
expect(localforage.config('driver')).to.be(localforage.driver());
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('returns error if API call was already made', function(done) {
|
|
localforage.length(function() {
|
|
var configResult = localforage.config({
|
|
description: '123',
|
|
driver: 'I a not set driver',
|
|
name: 'My Cool App',
|
|
storeName: 'myStoreName',
|
|
version: 2.0
|
|
});
|
|
|
|
var error =
|
|
"Error: Can't call config() after localforage " +
|
|
'has been used.';
|
|
|
|
expect(configResult).to.not.be(true);
|
|
expect(configResult.toString()).to.be(error);
|
|
|
|
// Expect the config values to be as they were before.
|
|
expect(localforage.config('description')).to.not.be('123');
|
|
expect(localforage.config('description')).to.be('');
|
|
expect(localforage.config('driver')).to.be(localforage.driver());
|
|
expect(localforage.config('driver')).to.not.be(
|
|
'I a not set driver'
|
|
);
|
|
expect(localforage.config('name')).to.be('localforage');
|
|
expect(localforage.config('name')).to.not.be('My Cool App');
|
|
expect(localforage.config('size')).to.be(4980736);
|
|
expect(localforage.config('storeName')).to.be('keyvaluepairs');
|
|
expect(localforage.config('version')).to.be(1.0);
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('sets new values and returns them properly', function(done) {
|
|
var secondSupportedDriver =
|
|
supportedDrivers.length >= 2 ? supportedDrivers[1] : null;
|
|
|
|
localforage.config({
|
|
description: 'The offline datastore for my cool app',
|
|
driver: secondSupportedDriver,
|
|
name: 'My Cool App',
|
|
storeName: 'myStoreName',
|
|
version: 2.0
|
|
});
|
|
|
|
expect(localforage.config('description')).to.not.be('');
|
|
expect(localforage.config('description')).to.be(
|
|
'The offline datastore for my cool app'
|
|
);
|
|
expect(localforage.config('driver')).to.be(secondSupportedDriver);
|
|
expect(localforage.config('name')).to.be('My Cool App');
|
|
expect(localforage.config('size')).to.be(4980736);
|
|
expect(localforage.config('storeName')).to.be('myStoreName');
|
|
expect(localforage.config('version')).to.be(2.0);
|
|
|
|
localforage.ready(function() {
|
|
if (supportedDrivers.length >= 2) {
|
|
expect(localforage.config('driver')).to.be(
|
|
secondSupportedDriver
|
|
);
|
|
} else {
|
|
expect(localforage.config('driver')).to.be(supportedDrivers[0]);
|
|
}
|
|
done();
|
|
});
|
|
});
|
|
|
|
if (supportedDrivers.length >= 2) {
|
|
it('sets new driver using preference order', function(done) {
|
|
var otherSupportedDrivers = supportedDrivers.slice(1);
|
|
|
|
var configResult = localforage.config({
|
|
driver: otherSupportedDrivers
|
|
});
|
|
|
|
expect(configResult).to.be.a(Promise);
|
|
localforage
|
|
.ready(function() {
|
|
expect(localforage.config('driver')).to.be(
|
|
otherSupportedDrivers[0]
|
|
);
|
|
return configResult;
|
|
})
|
|
.then(function() {
|
|
done();
|
|
});
|
|
});
|
|
}
|
|
|
|
it('it does not set an unsupported driver', function(done) {
|
|
var oldDriver = localforage.driver();
|
|
var configResult = localforage.config({
|
|
driver: 'I am a not supported driver'
|
|
});
|
|
|
|
expect(configResult).to.be.a(Promise);
|
|
localforage
|
|
.ready(function() {
|
|
expect(localforage.config('driver')).to.be(oldDriver);
|
|
return configResult;
|
|
})
|
|
.catch(function(error) {
|
|
expect(error).to.be.an(Error);
|
|
expect(error.message).to.be(
|
|
'No available storage method found.'
|
|
);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('it does not set an unsupported driver using preference order', function(done) {
|
|
var oldDriver = localforage.driver();
|
|
localforage.config({
|
|
driver: [
|
|
'I am a not supported driver',
|
|
'I am a an other not supported driver'
|
|
]
|
|
});
|
|
|
|
localforage.ready(function() {
|
|
expect(localforage.config('driver')).to.be(oldDriver);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('converts bad config values across drivers', function() {
|
|
localforage.config({
|
|
name: 'My Cool App',
|
|
// https://github.com/mozilla/localForage/issues/247
|
|
storeName: 'my store&name-v1',
|
|
version: 2.0
|
|
});
|
|
|
|
expect(localforage.config('name')).to.be('My Cool App');
|
|
expect(localforage.config('storeName')).to.be('my_store_name_v1');
|
|
expect(localforage.config('version')).to.be(2.0);
|
|
});
|
|
|
|
it('uses the config values in ' + localforage.driver(), function(done) {
|
|
localforage.config({
|
|
description: 'The offline datastore for my cool app',
|
|
driver: localforage.driver(),
|
|
name: 'My Cool App',
|
|
storeName: 'myStoreName',
|
|
version: 2.0
|
|
});
|
|
|
|
localforage.setItem('some key', 'some value').then(function(value) {
|
|
if (localforage.driver() === localforage.INDEXEDDB) {
|
|
var indexedDB =
|
|
indexedDB ||
|
|
window.indexedDB ||
|
|
window.webkitIndexedDB ||
|
|
window.mozIndexedDB ||
|
|
window.OIndexedDB ||
|
|
window.msIndexedDB;
|
|
var req = indexedDB.open('My Cool App', 2.0);
|
|
|
|
req.onsuccess = function() {
|
|
var dbValue = req.result
|
|
.transaction('myStoreName', 'readonly')
|
|
.objectStore('myStoreName')
|
|
.get('some key');
|
|
expect(dbValue).to.be(value);
|
|
done();
|
|
};
|
|
} else if (localforage.driver() === localforage.WEBSQL) {
|
|
window
|
|
.openDatabase('My Cool App', String(2.0), '', 4980736)
|
|
.transaction(function(t) {
|
|
t.executeSql(
|
|
'SELECT * FROM myStoreName WHERE key = ? ' +
|
|
'LIMIT 1',
|
|
['some key'],
|
|
function(t, results) {
|
|
var dbValue = JSON.parse(
|
|
results.rows.item(0).value
|
|
);
|
|
|
|
expect(dbValue).to.be(value);
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
} else if (localforage.driver() === localforage.LOCALSTORAGE) {
|
|
var dbValue = JSON.parse(
|
|
localStorage['My Cool App/myStoreName/some key']
|
|
);
|
|
|
|
expect(dbValue).to.be(value);
|
|
done();
|
|
}
|
|
});
|
|
});
|
|
|
|
it("returns all values when config isn't passed arguments", function() {
|
|
expect(localforage.config()).to.be.an('object');
|
|
expect(Object.keys(localforage.config()).length).to.be(6);
|
|
});
|
|
|
|
// This may go away when https://github.com/mozilla/localForage/issues/168
|
|
// is fixed.
|
|
it('maintains config values across setDriver calls', function(done) {
|
|
localforage.config({
|
|
name: 'Mega Mozilla Dino'
|
|
});
|
|
|
|
localforage
|
|
.length()
|
|
.then(function() {
|
|
return localforage.setDriver(localforage.LOCALSTORAGE);
|
|
})
|
|
.then(function() {
|
|
expect(localforage.config('name')).to.be('Mega Mozilla Dino');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('returns error if database version is not a number', function(done) {
|
|
var configResult = localforage.config({
|
|
version: '2.0'
|
|
});
|
|
|
|
var error = 'Error: Database version must be a number.';
|
|
|
|
expect(configResult).to.not.be(true);
|
|
expect(configResult.toString()).to.be(error);
|
|
done();
|
|
});
|
|
});
|