ydn.db
Version:
Javascript database library for IndexedDB, WebDatabase (WebSQL) and WebStorage (localStorage) storage mechanisms supporting version migration, advanced query and transaction workflow.
277 lines (228 loc) • 7.76 kB
JavaScript
/**
* @fileoverview About this file.
*
* User: kyawtun
* Date: 5/8/12
*/
goog.provide('ydn.db.test');
goog.require('ydn.db.Storage');
goog.require('goog.dom.pattern.AbstractPattern');
/**
*
* @type {string} store name.
*/
ydn.db.test.table = 't1';
/**
* @return {!ydn.db.schema.Database} database schema.
*/
ydn.db.test.getSchema = function() {
// var basic_schema = new ydn.db.schema.Database(1);
// basic_schema.addStore(new ydn.db.schema.Store(ydn.db.test.table, 'id'));
return new ydn.db.schema.Database({
stores: [{
name: 't1',
keyPath: 'id'
}]
});
};
/**
* @param queue test queue.
* @param {ydn.db.Storage} db Database instance.
*/
ydn.db.test.db_clear_all_tests = function(queue, db) {
queue.call('clear db', function(callbacks) {
var df_clear = db.clear();
df_clear.addCallback(callbacks.add(function(value) {
assertTrue('clear OK', value);
}));
});
queue.call('count', function(callbacks) {
db.count().addCallback(callbacks.add(function(count) {
assertEquals('count 0', 0, count);
}));
});
};
/**
* @param queue test queue.
* @param {ydn.db.Storage} db Database instance.
*/
ydn.db.test.clear_tests = function(queue, db) {
var a_value = 'a' + Math.random();
queue.call('put a', function(callbacks) {
db.put(ydn.db.test.table, {id: 'a', value: a_value}).addCallback(callbacks.add(function(value) {
assertEquals('put a', 'a', value);
}));
});
queue.call('get a', function(callbacks) {
db.get(ydn.db.test.table, 'a').addCallback(callbacks.add(function(value) {
assertEquals('get a = ' + a_value, a_value, value.value);
}));
});
queue.call('clear a', function(callbacks) {
var df_clear = db.clear(ydn.db.test.table, 'a');
df_clear.addCallback(callbacks.add(function(value) {
assertEquals('clear OK', true, value);
}));
});
queue.call('get a after clear', function(callbacks) {
db.get(ydn.db.test.table, 'a').addCallback(callbacks.add(function(value) {
assertUndefined('get a after clear', value);
}));
});
};
/**
* Test put and get for basic object.
* @param queue test queue.
* @param {ydn.db.Storage} db Database instance.
*/
ydn.db.test.run_put_get_tests = function(queue, db) {
queue.call('clear db before start', function(callbacks) {
db.clear(ydn.db.test.table).addCallback(callbacks.add(function(value) {
assertEquals('clear OK', 1, value);
}));
});
queue.call('count after clear', function(callbacks) {
db.count(ydn.db.test.table).addCallback(callbacks.add(function(count) {
//console.log('starting count ' + count);
assertEquals('start with 0', 0, count);
}));
});
var a_value = 'a' + Math.random();
queue.call('put a', function(callbacks) {
db.put(ydn.db.test.table, {id: 'a', value: a_value}).addCallback(callbacks.add(function(value) {
assertEquals('put a ' + a_value, 'a', value);
}));
});
queue.call('get a', function(callbacks) {
db.get(ydn.db.test.table, 'a').addCallback(callbacks.add(function(value) {
assertEquals('get a = ' + a_value, a_value, value.value);
}));
});
queue.call('count 1', function(callbacks) {
db.count(ydn.db.test.table).addCallback(callbacks.add(function(count) {
//console.log('new count ' + count);
assertEquals('count 2', 1, count);
}));
});
queue.call('put b', function(callbacks) {
db.put(ydn.db.test.table, {id: 'b', value: '2'}).addCallback(callbacks.add(function(value) {
assertEquals('put b 2', 'b', value);
}));
});
queue.call('get b', function(callbacks) {
db.get(ydn.db.test.table, 'b').addCallback(callbacks.add(function(value) {
assertEquals('get b 2', '2', value.value);
}));
});
queue.call('count', function(callbacks) {
db.count(ydn.db.test.table).addCallback(callbacks.add(function(count) {
//console.log('new count 2 ' + count);
assertEquals('count 2', 2, count);
}));
});
queue.call('update a', function(callbacks) {
db.put(ydn.db.test.table, {id: 'a', value: '3'}).addCallback(callbacks.add(function(value) {
assertEquals('put a 3', 'a', value);
}));
});
queue.call('get updated a', function(callbacks) {
db.get(ydn.db.test.table, 'a').addCallback(callbacks.add(function(value) {
assertEquals('get a 3', '3', value.value);
}));
});
queue.call('count again', function(callbacks) {
db.count(ydn.db.test.table).addCallback(callbacks.add(function(count) {
assertEquals('count again', 2, count);
}));
});
// queue.call('clear db', function(callbacks) {
// db.clear().addCallback(callbacks.add(function(value) {
// assertEquals('clear OK', true, value);
// }));
// });
//
// queue.call('count', function(callbacks) {
// db.count().addCallback(callbacks.add(function(count) {
// assertEquals('count 0', 0, count);
// }));
// });
};
/**
* Test key values and ensure that value is unchanged on put and get.
* For IndexedDB, key value is DOMString
* http://www.w3.org/TR/2011/WD-WebIDL-20110927/#idl-DOMString
* The DOMString type corresponds to the set of all possible sequences of 16 bit unsigned integer code units.
* @param queue test queue.
* @param {ydn.db.Storage} db Database instance.
*/
ydn.db.test.special_keys_test = function(queue, db) {
var test_key = function(key) {
var key_value = 'a' + Math.random();
queue.call('put ' + key, function(callbacks) {
// goog.global.console.log('putting ' + key + key_value);
db.put(ydn.db.test.table, {id: key, value: key_value}).addCallback(callbacks.add(function(value) {
// goog.global.console.log('put ' + key + ' ' + value);
assertEquals('put a 1', key, value);
}));
});
queue.call('get ' + key, function(callbacks) {
// goog.global.console.log('getting ' + key);
db.get(ydn.db.test.table, key).addCallback(callbacks.add(function(value) {
// goog.global.console.log('get ' + key + ' ' + value);
assertEquals('get ' + key, key_value, value.value);
}));
});
};
test_key('x');
var key = 't@som.com';
test_key('t@som.com');
test_key('http://www.ok.com');
test_key('http://www.ok.com/ereom\ere#code?oer=ere');
};
/**
* @param queue test queue.
* @param {ydn.db.Storage} db Database instance.
*/
ydn.db.test.empty_store_get_test = function(queue, db) {
var rand_key = 'k' + Math.random();
queue.call('get non existing key: ' + rand_key, function(callbacks) {
db.get(ydn.db.test.table, rand_key).addCallback(callbacks.add(function(value) {
assertUndefined('result', value);
}))
});
};
/**
* @return {DatabaseSchema} schema used in nested_key_path test.
*/
ydn.db.test.get_nested_key_path_schema = function() {
// var store_name = 'nested_key_path';
// var schema = new ydn.db.schema.Database(1);
// schema.addStore(new ydn.db.schema.Store(store_name, 'id.$t'));
return {
stores: [{
name: 'nested_key_path',
keyPath: 'id.$t'
}]
};
};
/**
* @param queue test queue.
* @param {ydn.db.Storage} db Database instance.
*/
ydn.db.test.nested_key_path = function(queue, db) {
var schema = ydn.db.test.get_nested_key_path_schema();
var store_name = schema.stores[0].name;
var key = 'k' + Math.random();
var data = {value: Math.random()};
data.id = {$t: key};
queue.call('put ' + key, function(callbacks) {
db.put(store_name, data).addBoth(callbacks.add(function(value) {
assertEquals('put OK', key, value);
}))
});
queue.call('get ' + key, function(callbacks) {
db.get(store_name, key).addBoth(callbacks.add(function(value) {
assertEquals('get OK', data, value);
}))
});
};