UNPKG

ydn.db

Version:

Javascript database library for IndexedDB, WebDatabase (WebSQL) and WebStorage (localStorage) storage mechanisms supporting version migration, advanced query and transaction workflow.

202 lines (153 loc) 4.56 kB
goog.require('goog.debug.Console'); goog.require('goog.testing.jsunit'); goog.require('ydn.debug'); goog.require('ydn.async'); goog.require('ydn.db.Storage'); goog.require('goog.testing.PropertyReplacer'); var reachedFinalContinuation, debug_console, db; var setUp = function() { ydn.debug.log('ydn.db', 'finest'); reachedFinalContinuation = false; }; var tearDown = function() { assertTrue('The final continuation was not reached', reachedFinalContinuation); }; var encoding_test = function(key) { var encodedKey = ydn.db.utils.encodeKey(key); var re_key = ydn.db.utils.decodeKey(encodedKey); //console.log([key, encodedKey]); if (goog.isArray(key)) { assertArrayEquals(key + ' ' + encodedKey, key, re_key) } else { assertEquals(key + ' ' + encodedKey, key, re_key); } }; var test_encoding = function() { // these value are taken from FB polyfill test. encoding_test(0); encoding_test(2); // "01C0" encoding_test(8); // "01C020" encoding_test(8.3); // ["01C02099999999999A", 8.3] encoding_test(5.7); // ["01C016CCCCCCCCCCCD", 5.7] encoding_test('n2'); // "036F33" encoding_test('n3'); // ["036F34", "n3"] encoding_test([[2], 'abc']); // "09C000000000000000072441250008037C217E00000001C0390000000000000003626364" reachedFinalContinuation = true; }; var starts_test = function (start, test, not_start) { var key_range = ydn.db.KeyRange.starts(start); var lower = ydn.db.utils.encodeKey(key_range.lower); var upper = ydn.db.utils.encodeKey(key_range.upper); var e_test = ydn.db.utils.encodeKey(test); var is_between = e_test <= upper && e_test >= lower; if (not_start) { assertFalse(test + ' is not between ' + key_range.lower + ' or ' + key_range.upper + ' because ' + (e_test <= upper) + ' and ' + (e_test >= lower), is_between); } else { assertTrue(key_range.lower + ' is > then ' + test, e_test <= upper); assertTrue(key_range.upper + ' is < then ' + test, e_test >= lower); assertTrue(test + ' is between ' + key_range.lower + ' or ' + key_range.upper, is_between); } }; var test_starts = function() { starts_test('a', 'ab'); starts_test('a', 'c', true); starts_test('b', 'a', true); starts_test('b', 'b'); starts_test(['a'], ['a', 'b']); starts_test(['a'], ['b'], true); starts_test(['b'], ['a'], true); starts_test(['b'], ['b']); starts_test(['M'], ['M', 20]); reachedFinalContinuation = true; }; var text_store = function(table_name, key) { var value = Math.random(); var obj = {id: key, value: value}; var done, result; waitForCondition( // Condition function() { return done; }, // Continuation function() { assertTrue(table_name + ':' + key, goog.isObject(result)); assertEquals(table_name + ':' + key, value, result.value); reachedFinalContinuation = true; }, 100, // interval 2000); // maxTimeout db.put(table_name, obj).addCallback(function(id) { //console.log('put ' + id); db.get(table_name, key).addBoth(function(x) { //console.log('get ' + JSON.stringify(x)); result = x; done = true; }) }); }; var schema = { stores: [ { name: 'st_text', keyPath: 'id', type: 'TEXT' }, { name: 'st_int', keyPath: 'id', type: 'INTEGER' }, { name: 'st_num', keyPath: 'id', type: 'NUMERIC' }, { name: 'st_date', keyPath: 'id', type: 'DATE' }, { name: 'st_array', keyPath: 'id', type: 'TEXT' }, { name: 'st_any', keyPath: 'id' }] }; var test_text = function() { text_store('st_text', 'a'); }; var test_int = function() { text_store('st_int', 1); }; var test_num = function() { text_store('st_num', 1.3); }; var test_date = function() { var d = new Date(); text_store('st_date', d); }; var test_array = function() { text_store('st_array', ['1', 'b']); }; var test_any_text = function() { text_store('st_any', 'a'); }; var test_any_int = function() { text_store('st_any', 1); }; var test_any_num = function() { text_store('st_any', Math.random()); }; var setUpPage = function() { var dn_name = 'test_key_encoding_2'; var options = {mechanisms: ['websql']}; db = new ydn.db.Storage(dn_name, schema, options); }; var tearDownPage = function() { ydn.db.deleteDatabase(db.getName(), db.getType()); db.close(); }; var testCase = new goog.testing.ContinuationTestCase(); testCase.autoDiscoverTests(); G_testRunner.initialize(testCase);