Diffstat (limited to 'frontend/gamma/tests/tests/Clipperz/KeyValueObjectStore.test.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/tests/tests/Clipperz/KeyValueObjectStore.test.js | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/frontend/gamma/tests/tests/Clipperz/KeyValueObjectStore.test.js b/frontend/gamma/tests/tests/Clipperz/KeyValueObjectStore.test.js new file mode 100644 index 0000000..53cf5d3 --- a/dev/null +++ b/frontend/gamma/tests/tests/Clipperz/KeyValueObjectStore.test.js @@ -0,0 +1,255 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +This file is part of Clipperz's Javascript Crypto Library. +Javascript Crypto Library provides web developers with an extensive +and efficient set of cryptographic functions. The library aims to +obtain maximum execution speed while preserving modularity and +reusability. +For further information about its features and functionalities please +refer to http://www.clipperz.com + +* Javascript Crypto Library is free software: you can redistribute + it and/or modify it under the terms of the GNU Affero General Public + License as published by the Free Software Foundation, either version + 3 of the License, or (at your option) any later version. + +* Javascript Crypto Library is distributed in the hope that it will + be useful, but WITHOUT ANY WARRANTY; without even the implied + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Javascript Crypto Library. If not, see + <http://www.gnu.org/licenses/>. + +*/ + +var tests = { + + //------------------------------------------------------------------------- + + 'simple_tests': function() { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("simple_tests", {trace:false}); + deferredResult.addCallback(function() { + var objectStore; + + objectStore = new Clipperz.KeyValueObjectStore(); + + ok(objectStore != null, "created an object store"); + + objectStore.setValue('key', "value"); + is(objectStore.getValue('key'), "value", "can store and read a value to a simple key"); + + objectStore.setValue('key', "overwritten value"); + is(objectStore.getValue('key'), "overwritten value", "using the same key overwrites the previous value"); + + objectStore.setValue('record.keys', [1, 2, 3]); + is( + MochiKit.Base.compare(objectStore.getValue('record'), {'keys': [1,2,3]}), + 0, + "getting a partial key returns the whole content associate with that key" + ); + is( + MochiKit.Base.compare(objectStore.getValue('record.keys'), [1,2,3]), + 0, + "accessing data using a key.path return the matching content" + ); + is( + MochiKit.Base.compare(objectStore.getValue('record.keys.1'), 2), + 0, + "accessing data using a key.path return the matching content, even inside an array" + ); + + is( + objectStore.setValue('key', "value"), + "value", + "setting a value return the value itself, as a convenience to chain deferred methods" + ); + + is( + objectStore.getValue('not_set_key'), + null, + "accessing a previously undefined key will return null" + ); + is( + objectStore.getValue('record.not_set_key'), + null, + "accessing a previously undefined key will return null, even if part of the path is defined" + ); + is( + objectStore.getValue('not_set_path.not_set_key'), + null, + "accessing a previously undefined key will return null, even if using a completely undefined path" + ); + + objectStore.removeAllData(); + is( + objectStore.getValue('key'), + null, + "getting a value after a 'removeAllData' return no value" + ); + + }); + + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'simple_deferredGetOrSet_test': function () { + var deferredResult; + var objectStore; + var testValue; + + objectStore = new Clipperz.KeyValueObjectStore(); + testValue = "nifty test value"; + + deferredResult = new Clipperz.Async.Deferred("simple_deferredGetOrSet_test", {trace:false}); + deferredResult.addMethod(objectStore, 'setValue', 'key', testValue); + deferredResult.addMethod(objectStore, 'deferredGetOrSet', 'key', function() {return testValue}); + deferredResult.addCallback(function(aResult) { + SimpleTest.is(aResult, testValue, "deferredGetOrSet works when accessing data already present on the object store"); + }) + deferredResult.callback(); + }, + + //------------------------------------------------------------------------- + + 'deferredGetOrSet_test': function () { + var deferredResult; + var objectStore; + var testValue; + + objectStore = new Clipperz.KeyValueObjectStore(); + testValue = "nifty test value"; + + deferredResult = new Clipperz.Async.Deferred("deferredGetOrSet_test", {trace:false}); + deferredResult.addMethod(objectStore, 'setValue', 'key.path', testValue); + deferredResult.addMethod(objectStore, 'deferredGetOrSet', 'key', function() {return {'path': testValue}; }); + deferredResult.addCallback(function(aResult) { + SimpleTest.is(aResult['path'], testValue, "deferredGetOrSet works when accessing data already present on the object store"); + }) + deferredResult.callback(); + }, + + //------------------------------------------------------------------------- + + 'simple_deferredGetOrSet_withMissingValue_test': function () { + var deferredResult; + var objectStore; + var testValue; + + objectStore = new Clipperz.KeyValueObjectStore(); + testValue = "nifty test value"; + + deferredResult = new Clipperz.Async.Deferred("simple_deferredGetOrSet_withMissingValue_test", {trace:false}); + deferredResult.addMethod(objectStore, 'deferredGetOrSet', 'key', function() {return testValue}); + deferredResult.addCallback(function(aResult) { + SimpleTest.is(aResult, testValue, "deferredGetOrSet works when accessing data already present on the object store"); + }) + deferredResult.callback(); + }, + + //------------------------------------------------------------------------- + + 'deferredGetOrSet_withMissingValue_test': function () { + var deferredResult; + var objectStore; + var testValue; + + objectStore = new Clipperz.KeyValueObjectStore(); + testValue = "nifty test value"; + + deferredResult = new Clipperz.Async.Deferred("deferredGetOrSet_withMissingValue_test", {trace:false}); + deferredResult.addMethod(objectStore, 'deferredGetOrSet', 'key', function() {return {'path': testValue}; }); + deferredResult.addCallback(function(aResult) { + SimpleTest.is(aResult['path'], testValue, "deferredGetOrSet works when accessing data already present on the object store"); + }) + deferredResult.callback(); + }, + + //------------------------------------------------------------------------- + + 'deleteObjectKey': function () { + var someValues; + var objectStore; + + someValues = { + 'key1': { + 'key1_1': "value 1.1", + 'key1_2': "value 1.2" + }, + 'key2': { + 'key2_1': { + 'key2.1.1': "value 2.1.1", + 'key2.1.2': "value 2.1.2" + }, + 'key2_2': "value 2.2" + } + } + + objectStore = new Clipperz.KeyValueObjectStore(); + objectStore.initWithValues(someValues); + objectStore.removeValue('key2.key2_1'); + + SimpleTest.is(objectStore.getValue('key1.key1_1'), "value 1.1", "The first element is still there"); + SimpleTest.is(objectStore.getValue('key1.key1_2'), "value 1.2", "The second element is still there"); + SimpleTest.is(objectStore.getValue('key2.key2_1'), null, "The deleted element is actually gone"); + SimpleTest.is(MochiKit.Base.keys(objectStore.getValue('key2')).length, 1, "Even the key is not stored anylonger"); + SimpleTest.is(objectStore.getValue('key2.key2_2'), "value 2.2", "The sibling of the deleted element is still there"); + }, + + //------------------------------------------------------------------------- + + 'accessDataUsingANumericKey': function () { + var someValues; + var objectStore; + + someValues = { + '1': "value 1", + '2': "value 2" + } + + objectStore = new Clipperz.KeyValueObjectStore(); + objectStore.initWithValues(someValues); + + SimpleTest.is(objectStore.getValue(1), "value 1", "The first element is accessed even using a numeric key"); + + objectStore.setValue(3, "value 3"); + SimpleTest.is(objectStore.getValue('3'), "value 3", "I can set the value using a numeric key and get it with a string key"); + }, + + //------------------------------------------------------------------------- + + 'isEmpty_test': function () { + var someValues; + var objectStore; + + someValues = { + '1': "value 1", + '2': "value 2" + } + + objectStore = new Clipperz.KeyValueObjectStore(); + SimpleTest.is(objectStore.isEmpty(), true, "A newly initialized KeyValueStore is empty"); + + objectStore.initWithValues(someValues); + SimpleTest.is(objectStore.isEmpty(), false, "Once the KeyValueStore is initialized with some values, it is no logner empty"); + + objectStore.removeAllData(); + SimpleTest.is(objectStore.isEmpty(), true, "A KeyValueStore is empty after invoking the 'removeAllData' method"); + }, + + //------------------------------------------------------------------------- + 'syntaxFix': MochiKit.Base.noop +}; + +//############################################################################# + +SimpleTest.runDeferredTests("Clipperz.KeyValueObjectStore", tests, {trace:false}); |