summaryrefslogtreecommitdiff
path: root/frontend/gamma/tests/tests/Clipperz/KeyValueObjectStore.test.js
Side-by-side diff
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.js255
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});