| <!DOCTYPE html> |
| <html> |
| <!-- |
| Copyright 2012 The Closure Library Authors. All Rights Reserved. |
| |
| Use of this source code is governed by the Apache License, Version 2.0. |
| See the COPYING file for details. |
| --> |
| <head> |
| <title>Closure Unit Tests - goog.result.combine</title> |
| <script src="../base.js"></script> |
| <script> |
| |
| goog.require('goog.Timer'); |
| goog.require('goog.array'); |
| goog.require('goog.result'); |
| goog.require('goog.testing.MockClock'); |
| goog.require('goog.testing.jsunit'); |
| goog.require('goog.testing.recordFunction'); |
| |
| </script> |
| </head> |
| <body> |
| <script> |
| |
| var result1, result2, result3, result4, resultCallback; |
| var combinedResult, successCombinedResult, mockClock; |
| |
| function setUpPage() { |
| mockClock = new goog.testing.MockClock(); |
| mockClock.install(); |
| } |
| |
| function tearDownPage() { |
| goog.dispose(mockClock); |
| } |
| |
| function setUp() { |
| mockClock.reset(); |
| result1 = new goog.result.SimpleResult(); |
| result2 = new goog.result.SimpleResult(); |
| result3 = new goog.result.SimpleResult(); |
| result4 = new goog.result.SimpleResult(); |
| |
| combinedResult = goog.result.combine(result1, result2, result3, result4); |
| |
| successCombinedResult = |
| goog.result.combineOnSuccess(result1, result2, result3, result4); |
| |
| resultCallback = goog.testing.recordFunction(); |
| } |
| |
| function tearDown() { |
| result1 = result2 = result3 = result4 = resultCallback = null; |
| combinedResult = successCombinedResult = null; |
| } |
| |
| function testSynchronousCombine() { |
| resolveAllGivenResultsToSuccess(); |
| |
| newCombinedResult = goog.result.combine(result1, result2, result3, result4); |
| |
| goog.result.wait(newCombinedResult, resultCallback); |
| |
| assertSuccessCall(newCombinedResult, resultCallback); |
| } |
| |
| function testCombineWhenAllResultsSuccess() { |
| goog.result.wait(combinedResult, resultCallback); |
| |
| resolveAllGivenResultsToSuccess(); |
| |
| assertSuccessCall(combinedResult, resultCallback); |
| } |
| |
| function testAsyncCombineWhenAllResultsSuccess() { |
| goog.result.wait(combinedResult, resultCallback); |
| |
| goog.Timer.callOnce(function() { resolveAllGivenResultsToSuccess(); }); |
| mockClock.tick(); |
| |
| assertSuccessCall(combinedResult, resultCallback); |
| } |
| |
| function testCombineWhenAllResultsFail() { |
| goog.result.wait(combinedResult, resultCallback); |
| |
| resolveAllGivenResultsToError(); |
| |
| assertSuccessCall(combinedResult, resultCallback); |
| } |
| |
| function testAsyncCombineWhenAllResultsFail() { |
| goog.result.wait(combinedResult, resultCallback); |
| |
| goog.Timer.callOnce(function() { resolveAllGivenResultsToError(); }); |
| mockClock.tick(); |
| |
| assertSuccessCall(combinedResult, resultCallback); |
| } |
| |
| function testCombineWhenSomeResultsSuccess() { |
| goog.result.wait(combinedResult, resultCallback); |
| |
| resolveSomeGivenResultsToSuccess(); |
| |
| assertSuccessCall(combinedResult, resultCallback); |
| } |
| |
| function testAsyncCombineWhenSomeResultsSuccess() { |
| goog.result.wait(combinedResult, resultCallback); |
| |
| goog.Timer.callOnce(function() { resolveSomeGivenResultsToSuccess(); }); |
| mockClock.tick(); |
| |
| assertSuccessCall(combinedResult, resultCallback); |
| } |
| |
| function testCombineOnSuccessWhenAllResultsSuccess() { |
| goog.result.wait(successCombinedResult, resultCallback); |
| |
| resolveAllGivenResultsToSuccess(); |
| |
| assertSuccessCall(successCombinedResult, resultCallback); |
| } |
| |
| function testAsyncCombineOnSuccessWhenAllResultsSuccess() { |
| goog.result.wait(successCombinedResult, resultCallback); |
| |
| goog.Timer.callOnce(function() { resolveAllGivenResultsToSuccess(); }); |
| mockClock.tick(); |
| |
| assertSuccessCall(successCombinedResult, resultCallback); |
| } |
| |
| function testCombineOnSuccessWhenAllResultsFail() { |
| goog.result.wait(successCombinedResult, resultCallback); |
| |
| resolveAllGivenResultsToError(); |
| |
| assertErrorCall(successCombinedResult, resultCallback); |
| } |
| |
| function testAsyncCombineOnSuccessWhenAllResultsFail() { |
| goog.result.wait(successCombinedResult, resultCallback); |
| |
| goog.Timer.callOnce(function() { resolveAllGivenResultsToError(); }); |
| mockClock.tick(); |
| |
| assertErrorCall(successCombinedResult, resultCallback); |
| } |
| |
| function testCombineOnSuccessWhenSomeResultsSuccess() { |
| goog.result.wait(successCombinedResult, resultCallback); |
| |
| resolveSomeGivenResultsToSuccess(); |
| |
| assertErrorCall(successCombinedResult, resultCallback); |
| } |
| |
| function testAsyncCombineOnSuccessWhenSomeResultsSuccess() { |
| goog.result.wait(successCombinedResult, resultCallback); |
| |
| goog.Timer.callOnce(function() { resolveSomeGivenResultsToSuccess(); }); |
| mockClock.tick(); |
| |
| assertErrorCall(successCombinedResult, resultCallback); |
| } |
| |
| function testCancelParentResults() { |
| goog.result.wait(combinedResult, resultCallback); |
| |
| goog.result.cancelParentResults(combinedResult); |
| |
| assertArgumentContainsGivenResults(combinedResult.getValue()) |
| goog.array.forEach([result1, result2, result3, result4], |
| function(result) { |
| assertTrue(result.isCanceled()); |
| }); |
| } |
| |
| function assertSuccessCall(combinedResult, resultCallback) { |
| assertEquals(goog.result.Result.State.SUCCESS, combinedResult.getState()); |
| assertEquals(1, resultCallback.getCallCount()); |
| |
| var result = resultCallback.popLastCall().getArgument(0); |
| assertEquals(combinedResult, result); |
| assertArgumentContainsGivenResults(result.getValue()); |
| } |
| |
| function assertErrorCall(combinedResult, resultCallback) { |
| assertEquals(goog.result.Result.State.ERROR, |
| combinedResult.getState()); |
| assertEquals(1, resultCallback.getCallCount()); |
| |
| var result = resultCallback.popLastCall().getArgument(0); |
| assertEquals(combinedResult, result); |
| assertArgumentContainsGivenResults(combinedResult.getError()); |
| } |
| |
| function assertArgumentContainsGivenResults(resultsArray) { |
| assertEquals(4, resultsArray.length); |
| |
| goog.array.forEach([result1, result2, result3, result4], function(res) { |
| assertTrue(goog.array.contains(resultsArray, res)); |
| }); |
| } |
| |
| function resolveAllGivenResultsToSuccess() { |
| goog.array.forEach([result1, result2, result3, result4], function(res) { |
| res.setValue(1); |
| }); |
| } |
| |
| function resolveAllGivenResultsToError() { |
| goog.array.forEach([result1, result2, result3, result4], function(res) { |
| res.setError(); |
| }); |
| } |
| |
| function resolveSomeGivenResultsToSuccess() { |
| goog.array.forEach([result2, result3, result4], function(res) { |
| res.setValue(1); |
| }); |
| result1.setError(); |
| } |
| </script> |
| </body> |
| </html> |