Diffstat (limited to 'frontend/gamma/tests/tests/Clipperz/Async.test.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/tests/tests/Clipperz/Async.test.js | 687 |
1 files changed, 687 insertions, 0 deletions
diff --git a/frontend/gamma/tests/tests/Clipperz/Async.test.js b/frontend/gamma/tests/tests/Clipperz/Async.test.js new file mode 100644 index 0000000..fa6daca --- a/dev/null +++ b/frontend/gamma/tests/tests/Clipperz/Async.test.js @@ -0,0 +1,687 @@ +/* + +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/>. + +*/ + +testObject = function (aLabel) { + this._label = aLabel; + this._sibling = null; +} + +testObject.prototype = { + 'label': function () { + return MochiKit.Async.succeed(this._label); + }, + + 'shouldHit': function () { + var filterRegExp; + + filterRegExp = new RegExp("hit", "i"); + + return Clipperz.Async.callbacks("testObject.shouldHit", [ + MochiKit.Base.method(this, 'label'), + MochiKit.Base.method(filterRegExp, 'test') + ]); + }, + + 'sibling': function () { + return this._sibling; + }, + + 'setSibling': function (aSibling) { + this._sibling = aSibling; + } + +} + +var tests = { + + //------------------------------------------------------------------------- + + 'succeedingForkedDeferrer_test': function (someTestArgs) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('Async.test succeedingForkedDeferred', someTestArgs); + deferredResult.addCallback(Clipperz.Async.forkAndJoin("Async.test succeedingForkedDeferred", + [ + MochiKit.Base.partial(MochiKit.Async.succeed, 3), + MochiKit.Base.partial(MochiKit.Async.succeed, 2) + ], someTestArgs + )); + deferredResult.addCallback(function (anAsyncResult) { + var sum; + + sum = MochiKit.Iter.reduce(MochiKit.Base.operator.add, anAsyncResult); + SimpleTest.is(sum, 5, "the sum of all the returned results should be 5"); + }); + deferredResult.addErrback(function() { + SimpleTest.ok(false, "forkAndJoin should succeed and execution path should NOT go through here (1)") + }) + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'succeedingForkedAndWaitDeferrer_test': function (someTestArgs) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('succeedingForkedAndWaitDeferrer_test', someTestArgs); + deferredResult.addCallback(Clipperz.Async.forkAndJoin("Async.test succeedingForkedAndWaitDeferrer", + [ + MochiKit.Base.partial(MochiKit.Async.callLater, 2, MochiKit.Async.succeed, 3), + MochiKit.Base.partial(MochiKit.Async.callLater, 1, MochiKit.Async.succeed, 2), + MochiKit.Base.partial(MochiKit.Async.callLater, 3, MochiKit.Async.succeed, 7) + ], someTestArgs + )); + deferredResult.addCallback(function (anAsyncResult) { + var sum; + + sum = MochiKit.Iter.reduce(MochiKit.Base.operator.add, anAsyncResult); + SimpleTest.is(sum, 12, "the sum of all the returned results should be 12"); + }); + deferredResult.addErrback(function() { + SimpleTest.ok(false, "forkAndJoin should succeed and execution path should NOT go through here (2)") + }) + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'failingForkedDeferrer_test': function (someTestArgs) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('Async.test failingForkedDeferred', someTestArgs); + deferredResult.addCallback(Clipperz.Async.forkAndJoin("Async.test failingForkedDeferred", + [ + MochiKit.Async.succeed, + MochiKit.Async.fail + ], someTestArgs + )); + deferredResult.addCallback(function () { + SimpleTest.ok(false, "forkAndJoin should fail, and execution path should NOT go through here"); + }); + deferredResult.addErrback(function() { + SimpleTest.ok(true, "forkAndJoin should fail and execution path should go through here") + }) + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'succeedingCollectResultsDeferrer_test': function (someTestArgs) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('Async.test succeedingCollectResultsDeferrer', someTestArgs); + deferredResult.addCallback(Clipperz.Async.collectResults('Async.test succeedingCollectResultsDeferrer', { + 'first': MochiKit.Base.partial(MochiKit.Async.callLater, 2, MochiKit.Async.succeed, 3), + 'second': MochiKit.Base.partial(MochiKit.Async.callLater, 1, MochiKit.Async.succeed, 2), + 'third': MochiKit.Base.partial(MochiKit.Async.callLater, 3, MochiKit.Async.succeed, 7) + }, someTestArgs)); + deferredResult.addCallback(function (anAsyncResult) { + var sum; + + sum = MochiKit.Iter.reduce(MochiKit.Base.operator.add, MochiKit.Base.values(anAsyncResult)); + SimpleTest.is(sum, 12, "the sum of all the returned results should be 12"); + SimpleTest.is(anAsyncResult['first'], 3, "the result of the 'first' item is 3"); + SimpleTest.is(anAsyncResult['second'], 2, "the result of the 'second' item is 2"); + SimpleTest.is(anAsyncResult['third'], 7, "the result of the 'third' item is 7"); + SimpleTest.is(MochiKit.Base.keys(anAsyncResult).length, 3, "the result has exactly 3 values"); + }); + deferredResult.addErrback(function() { + SimpleTest.ok(false, "collectResults should succeed and execution path should NOT go through here"); + }); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'collectResultsWithParameter_test': function (someTestArgs) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('collectResultsWithParameter_test', someTestArgs); + deferredResult.collectResults({ + 'add_3': MochiKit.Base.partial(MochiKit.Base.operator.add, 3), + 'sub_8': MochiKit.Base.partial(MochiKit.Base.operator.sub, 8), + 'mul_4': MochiKit.Base.partial(MochiKit.Base.operator.mul, 4) + }); + deferredResult.addCallback(function (anAsyncResult) { + SimpleTest.is(anAsyncResult['add_3'], 8, "adding 3 to the passed value (5) returns 8"); + SimpleTest.is(anAsyncResult['sub_8'], 3, "subtracting the passed value (5) to 8 returns 3"); + SimpleTest.is(anAsyncResult['mul_4'], 20, "multiplying the passed value (5) by 4 returns 20"); + SimpleTest.is(MochiKit.Base.keys(anAsyncResult).length, 3, "the result has exactly 3 values"); + }); + deferredResult.callback(5); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'succeedingCollectResultsDeferrer_alternative_syntax_test': function (someTestArgs) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('succeedingCollectResultsDeferrer_alternative_syntax_test', someTestArgs); + deferredResult.collectResults({ + 'first': MochiKit.Base.partial(MochiKit.Async.callLater, 2, MochiKit.Async.succeed, 3), + 'second': MochiKit.Base.partial(MochiKit.Async.callLater, 1, MochiKit.Async.succeed, 2), + 'third': MochiKit.Base.partial(MochiKit.Async.callLater, 3, MochiKit.Async.succeed, 7) + }); + deferredResult.addCallback(function (anAsyncResult) { + var sum; + + sum = MochiKit.Iter.reduce(MochiKit.Base.operator.add, MochiKit.Base.values(anAsyncResult)); + SimpleTest.is(sum, 12, "the sum of all the returned results should be 12"); + SimpleTest.is(anAsyncResult['first'], 3, "the result of the 'first' item is 3"); + SimpleTest.is(anAsyncResult['second'], 2, "the result of the 'second' item is 2"); + SimpleTest.is(anAsyncResult['third'], 7, "the result of the 'third' item is 7"); + SimpleTest.is(MochiKit.Base.keys(anAsyncResult).length, 3, "the result has exactly 3 values"); + }); + deferredResult.addErrback(function() { + SimpleTest.ok(false, "collectResults should succeed and execution path should NOT go through here"); + }); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'failingCollectResultsDeferrer_test': function (someTestArgs) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('Async.test failingCollectResultsDeferrer', someTestArgs); + deferredResult.addCallback(Clipperz.Async.collectResults('Async.test failingCollectResultsDeferrer', { + 'succeed': MochiKit.Base.partial(MochiKit.Async.succeed, 3), + 'fail': MochiKit.Base.partial(MochiKit.Async.fail, 2) + }, someTestArgs)); + deferredResult.addCallback(function() { + SimpleTest.ok(false, "collectResults should fail and execution path should NOT go through here"); + }); + deferredResult.addErrback(function (anAsyncResult) { + var result; + + result = anAsyncResult['message']; + SimpleTest.is(MochiKit.Base.keys(result).length, 2, "the result has exactly 2 values"); +//console.log("anAsyncResult", anAsyncResult); + SimpleTest.ok(!(result['succeed'] instanceof Error), "the successful value is actually successful"); + SimpleTest.ok(result['fail'] instanceof Error, "the failed value is actually failed"); + }); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'collectResults_withSimpleArrayListOfCalls_test': function (someTestArgs) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('collectResults_withSimpleArrayListOfCalls_test', someTestArgs); + deferredResult.addCallback(Clipperz.Async.collectResults('collectResults_withSimpleArrayListOfCalls_test - collectResults', { + 'path1': [ + MochiKit.Base.partial(MochiKit.Async.succeed, 3) + ], + 'path2': MochiKit.Base.partial(MochiKit.Async.succeed, 2) + }, someTestArgs)); + deferredResult.addCallback(function (anAsyncResult) { + SimpleTest.is(anAsyncResult['path1'], 3, "the result of the first path is 3"); + SimpleTest.is(anAsyncResult['path2'], 2, "the result of the second path is 2"); + }); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'collectResults_withArrayListOfCalls_test': function (someTestArgs) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('collectResults_withArrayListOfCalls_test', someTestArgs); + deferredResult.addCallback(Clipperz.Async.collectResults('collectResults_withArrayListOfCalls_test - collectResults', { + 'path1': [ + MochiKit.Base.partial(MochiKit.Async.succeed, {key1:'value1', key2:'value2'}), + Clipperz.Base.serializeJSON + ], + 'path2': [ + MochiKit.Base.partial(MochiKit.Async.succeed, {key3:'value3', key4:'value4'}), + Clipperz.Base.serializeJSON + ] + }, someTestArgs)); + deferredResult.addCallback(function (anAsyncResult) { + SimpleTest.is(anAsyncResult['path1'], "{\"key1\":\"value1\",\"key2\":\"value2\"}", "the result of the first path is correct"); + SimpleTest.is(anAsyncResult['path2'], "{\"key3\":\"value3\",\"key4\":\"value4\"}", "the result of the second path is correct"); + }); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'deferredSort_test': function (someTestArgs) { + var deferredResult; + var testArray; + + testArray = [ + {key:'key2', label:function () { return MochiKit.Async.succeed('label2')} }, + {key:'key3', label:function () { return MochiKit.Async.succeed('label3')} }, + {key:'key7', label:function () { return MochiKit.Async.succeed('label7')} }, + {key:'key1', label:function () { return MochiKit.Async.succeed('label1')} }, + {key:'key5', label:function () { return MochiKit.Async.succeed('label5')} }, + {key:'key4', label:function () { return MochiKit.Async.succeed('label4')} }, + {key:'key9', label:function () { return MochiKit.Async.succeed('label9')} }, + {key:'key8', label:function () { return MochiKit.Async.succeed('label8')} }, + {key:'key6', label:function () { return MochiKit.Async.succeed('label6')} } + ] + + deferredResult = new Clipperz.Async.Deferred('deferredSort_test', someTestArgs); + deferredResult.addCallback(Clipperz.Async.deferredSort, function (aObject, bObject) { + var result; + + result = Clipperz.Async.deferredCompare(MochiKit.Base.compare, aObject.label(), bObject.label()); + + return result; + }); + deferredResult.addCallback(function (aSortedArray) { + SimpleTest.is(aSortedArray.length, testArray.length, "The sorted array should have the same number of objects as the original one"); + SimpleTest.is(aSortedArray[0]['key'], 'key1', "[0] -> key1"); + SimpleTest.is(aSortedArray[1]['key'], 'key2', "[1] -> key2"); + SimpleTest.is(aSortedArray[2]['key'], 'key3', "[2] -> key3"); + SimpleTest.is(aSortedArray[3]['key'], 'key4', "[3] -> key4"); + SimpleTest.is(aSortedArray[4]['key'], 'key5', "[4] -> key5"); + SimpleTest.is(aSortedArray[5]['key'], 'key6', "[5] -> key6"); + SimpleTest.is(aSortedArray[6]['key'], 'key7', "[6] -> key7"); + SimpleTest.is(aSortedArray[7]['key'], 'key8', "[7] -> key8"); + SimpleTest.is(aSortedArray[8]['key'], 'key9', "[8] -> key9"); + }); + deferredResult.callback(testArray); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'callbacks_test': function (someTestArgs) { + return Clipperz.Async.callbacks("callbacks_test", [ + MochiKit.Base.partial(MochiKit.Base.operator.add, 5), + Clipperz.Async.Test.is(15, "Clipperz.Async.callbacks seems to work") + ], someTestArgs, 10); + }, + + //------------------------------------------------------------------------- + + 'deferredAcquireLockTest': function (someTestArgs) { + var deferredLock; + var deferredResult; + var anotherDeferred; + var deferredResults; + + deferredLock = new MochiKit.Async.DeferredLock(); + deferredResult = new Clipperz.Async.Deferred("acquireLockTest", {trace:false}); + deferredResult.acquireLock(deferredLock); + deferredResult.addCallback(function () { + SimpleTest.is(true, deferredLock.locked, 'DeferredLock is locked after Clipperz.Async.Deferred.acquireLock'); + }); + + anotherDeferred = new Clipperz.Async.Deferred("acquireLockLockedTest", {trace:false}); + anotherDeferred.acquireLock(deferredLock); + anotherDeferred.addCallback(function () { + SimpleTest.ok(false, 'Did not wait on a locked DeferredLock') + }); + anotherDeferred.addErrback(function (anError) { + SimpleTest.ok(true, 'Did wait on a locked DeferredLock'); + }); + + deferredResults = new MochiKit.Async.DeferredList([deferredResult, anotherDeferred], false, false, false); + MochiKit.Async.callLater(1, function () { + anotherDeferred.cancel(); + }); + + deferredResult.callback(); + anotherDeferred.callback(); + return deferredResults; + }, + + //------------------------------------------------------------------------- + + 'deferredLockAcquireTest': function (someTestArgs) { + var deferredLock; + var defferedResult; + var anotherDeferred; + var deferredResults; + + deferredLock = new MochiKit.Async.DeferredLock(); + deferredResult = new Clipperz.Async.Deferred("acquireLockTest", {trace:false}); + deferredResult.addMethod(deferredLock, 'acquire'); + deferredResult.addCallback(function () { + SimpleTest.is(true, deferredLock.locked, 'DeferredLock is locked after Clipperz.Async.Deferred.acquireLock'); + }); + + anotherDeferred = new Clipperz.Async.Deferred("acquireLockLockedTest", {trace:false}); + anotherDeferred.addMethod(deferredLock, 'acquire'); + anotherDeferred.addCallback(function () { + SimpleTest.ok(false, 'Did not wait on a locked DeferredLock') + }); + anotherDeferred.addErrback(function (anError) { + SimpleTest.ok(true, 'Did wait on a locked DeferredLock'); + }); + + + deferredResults = new MochiKit.Async.DeferredList([deferredResult, anotherDeferred], false, false, false); + MochiKit.Async.callLater(1, function () { + anotherDeferred.cancel(); + }); + + deferredResult.callback(); + anotherDeferred.callback() + + return deferredResults; + }, + + //------------------------------------------------------------------------- + + 'deferredFilter_test': function (someTestArgs) { + var deferredResult; + var testObjects; + var filterRegExp; + var deferredFilterFunction; + + testObjects = [ + {key: '1', label: MochiKit.Base.partial(MochiKit.Async.succeed, 'skip 1') }, + {key: '2', label: MochiKit.Base.partial(MochiKit.Async.succeed, 'hit 2') }, + {key: '3', label: MochiKit.Base.partial(MochiKit.Async.succeed, 'skip 3') }, + {key: '4', label: MochiKit.Base.partial(MochiKit.Async.succeed, 'hit 4') }, + {key: '5', label: MochiKit.Base.partial(MochiKit.Async.succeed, 'skip 5') }, + {key: '6', label: MochiKit.Base.partial(MochiKit.Async.succeed, 'skip 6') }, + {key: '7', label: MochiKit.Base.partial(MochiKit.Async.succeed, 'hit 7') }, + {key: '8', label: MochiKit.Base.partial(MochiKit.Async.succeed, 'skip 8') }, + {key: '9', label: MochiKit.Base.partial(MochiKit.Async.succeed, 'skip 9') }, + {key:'10', label: MochiKit.Base.partial(MochiKit.Async.succeed, 'hit 10') } + ] + + filterRegExp = new RegExp("hit", "i"); + + deferredFilterFunction = function (aRegExp, anObject) { + return Clipperz.Async.callbacks("deferredFilterFunction", [ + MochiKit.Base.method(anObject, 'label'), + MochiKit.Base.method(aRegExp, 'test'), + function (doesItMatch) { + var result; + + if (doesItMatch) { + result = MochiKit.Async.succeed('match'); + } else { + result = MochiKit.Async.fail('miss'); + } + + return result; + } + ], someTestArgs); + }; + + deferredResult = new Clipperz.Async.Deferred("deferredFilter_test", someTestArgs); + deferredResult.addCallback(Clipperz.Async.deferredFilter, MochiKit.Base.partial(deferredFilterFunction, filterRegExp), testObjects); + deferredResult.addCallback(function (aResult) { + SimpleTest.is(aResult.length, 4, "There are 4 items matching the 'hit' regexp"); + SimpleTest.is(aResult[0]['key'], '2', "The first item to match is the one with key:2"); + SimpleTest.is(aResult[1]['key'], '4', "The first item to match is the one with key:4"); + SimpleTest.is(aResult[2]['key'], '7', "The first item to match is the one with key:7"); + SimpleTest.is(aResult[3]['key'], '10', "The first item to match is the one with key:10"); + }) + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'deferredFilter_methodcaller_test': function (someTestArgs) { + var deferredResult; + var testObjects; + var filterRegExp; + var deferredFilterFunction; + + testObjects = [ + new testObject('skip 1'), + new testObject('hit 2'), + new testObject('skip 3'), + new testObject('hit 4'), + new testObject('skip 5'), + new testObject('skip 6'), + new testObject('hit 7'), + new testObject('skip 8'), + new testObject('skip 9'), + new testObject('hit 10') + ]; + + deferredResult = new Clipperz.Async.Deferred("deferredFilter_methodcaller_test", someTestArgs); +// deferredResult.addCallback(function () { return testObjects[0]; }); + deferredResult.addCallback(MochiKit.Async.succeed, testObjects[0]); + deferredResult.addCallback(MochiKit.Base.methodcaller('shouldHit')); + deferredResult.addTest(false, "the first element shoud return 'false' to the 'shouldHit' method"); + + deferredResult.addCallback(MochiKit.Async.succeed, testObjects[1]); + deferredResult.addCallback(MochiKit.Base.methodcaller('shouldHit')); + deferredResult.addTest(true, "the second element shoud return 'true' to the 'shouldHit' method"); + + deferredResult.addCallback(MochiKit.Async.succeed, testObjects); + deferredResult.addCallback(Clipperz.Async.deferredFilter, MochiKit.Base.methodcaller('shouldHit')); + deferredResult.addCallback(function (aResult) { + SimpleTest.is(aResult.length, 4, "There are 4 items matching the 'hit' regexp"); + SimpleTest.is(aResult[0]._label, 'hit 2', "The first item to match is the one with key:2"); + SimpleTest.is(aResult[1]._label, 'hit 4', "The first item to match is the one with key:4"); + SimpleTest.is(aResult[2]._label, 'hit 7', "The first item to match is the one with key:7"); + SimpleTest.is(aResult[3]._label, 'hit 10', "The first item to match is the one with key:10"); + }) + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'setItem_test': function (someTestArgs) { + var deferredResult; + var result; + + result = {}; + deferredResult = new Clipperz.Async.Deferred("setItem_test", someTestArgs); + deferredResult.addCallback(MochiKit.Async.succeed, "Value 1"); + deferredResult.addCallback(Clipperz.Async.setItem, result, 'key1'); + deferredResult.addCallback(MochiKit.Async.succeed, "Value 2"); + deferredResult.addCallback(Clipperz.Async.setItem, result, 'key2'); + + deferredResult.addCallback(MochiKit.Base.itemgetter('key1')); + deferredResult.addTest("Value 1", "the value for the 'key1' does match"); + + deferredResult.addCallback(MochiKit.Async.succeed, result); + deferredResult.addCallback(MochiKit.Base.itemgetter('key2')); + deferredResult.addTest("Value 2", "the value for the 'key2' does match"); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'setItemOnObject_test': function (someTestArgs) { + var deferredResult; + var result; + + result = {}; + + deferredResult = new Clipperz.Async.Deferred("setItemOnObject_test", someTestArgs); + deferredResult.addCallback(MochiKit.Async.succeed, result); + deferredResult.addCallback(Clipperz.Async.setItemOnObject, 'key1', "Value 1"); + deferredResult.addCallback(Clipperz.Async.setItemOnObject, 'key2', "Value 2"); + + deferredResult.addCallback(MochiKit.Base.itemgetter('key1')); + deferredResult.addTest("Value 1", "the value for the 'key1' does match"); + + deferredResult.addCallback(MochiKit.Async.succeed, result); + deferredResult.addCallback(MochiKit.Base.itemgetter('key2')); + deferredResult.addTest("Value 2", "the value for the 'key2' does match"); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'setDeferredItemOnObject_test': function (someTestArgs) { + var deferredResult; + var result; + + result = {}; + + deferredResult = new Clipperz.Async.Deferred("setDeferredItemOnObject_test", someTestArgs); + deferredResult.addCallback(MochiKit.Async.succeed, result); + deferredResult.addCallback(Clipperz.Async.setDeferredItemOnObject, 'key1', MochiKit.Base.partial(MochiKit.Async.succeed, "Value 1")); + deferredResult.addCallback(Clipperz.Async.setDeferredItemOnObject, 'key2', MochiKit.Base.partial(MochiKit.Async.succeed, "Value 2")); + + deferredResult.addCallback(MochiKit.Base.itemgetter('key1')); + deferredResult.addTest("Value 1", "the value for the 'key1' does match"); + + deferredResult.addCallback(MochiKit.Async.succeed, result); + deferredResult.addCallback(MochiKit.Base.itemgetter('key2')); + deferredResult.addTest("Value 2", "the value for the 'key2' does match"); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'addIf_test': function (someTestArgs) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("addIf_test", someTestArgs); + + deferredResult.addCallback(MochiKit.Async.succeed, true); + deferredResult.addIf([ + MochiKit.Base.partial(SimpleTest.ok, true, "when a true value is passed, the 'then' branch is executed") + ], [ + MochiKit.Base.partial(SimpleTest.ok, false, "when a true value is passed, the 'else' branch should NOT be executed") + ]); + + deferredResult.addCallback(MochiKit.Async.succeed, false); + deferredResult.addIf([ + MochiKit.Base.partial(SimpleTest.ok, false, "when a false value is passed, the 'then' branch should NOT be executed") + ], [ + MochiKit.Base.partial(SimpleTest.ok, true, "when a false value is passed, the 'else' branch is executed") + ]); + + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'addMethod_test': function (someTestArgs) { + var deferredResult; + var testObjectInstance; + var testObjectInstance_2; + var label; + var testObjectInstanceGetter; + + label = "Test - Label"; + testObjectInstance = new testObject(label); + testObjectInstance_2 = new testObject(label + label); + testObjectInstance.setSibling(testObjectInstance_2); + + testObjectInstanceGetter = function () { + return testObjectInstance; + } + + deferredResult = new Clipperz.Async.Deferred("addMethod_test", someTestArgs); + deferredResult.addMethod(testObjectInstance, 'label'); + deferredResult.addTest(label, "the addMethod seems to work"); + + deferredResult.addMethod(testObjectInstanceGetter(), 'label'); + deferredResult.addTest(label, "the addMethod seems to work"); + + deferredResult.addMethod(testObjectInstance.sibling(), 'label'); + deferredResult.addTest(label+label, "the addMethod seems to work"); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'callbacksWithErrors_test': function (someTestArgs) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("callbacksWithErrors_test", someTestArgs); + deferredResult.addCallback(MochiKit.Base.partial(Clipperz.Async.callbacks, "callbacksWithErrors_test - callbacks", [ + function () { return 10; }, + function (aValue) { pippo = pluto + aValue; }, + function (aValue) { SimpleTest.ok(false, "this code should never be executed"); return aValue; } + ], {trace:someTestArgs})); + deferredResult.addCallback(SimpleTest.ok, false, "the inner code should raise an exception and exit through the error chain"); + deferredResult.addErrback(SimpleTest.ok, true, "the inner code should raise an exception and exit through the error chain"); + + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + + 'deferredVars_test': function (someTestArgs) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("deferredVars_test", someTestArgs); + deferredResult.addCallback(MochiKit.Async.succeed, "test string"); + deferredResult.setValue('testKey'); + deferredResult.addCallback(MochiKit.Async.succeed, "another string"); + deferredResult.getValue('testKey'); + deferredResult.addTest("test string", "The right string has been fetched"); + + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + 'syntaxFix': MochiKit.Base.noop +}; + + + +//############################################################################# + +SimpleTest.runDeferredTests("Clipperz.Async", tests, {trace:false}); |