123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- // Copyright 2012 The Closure Library Authors. All Rights Reserved.
- // Use of this source code is governed by the Apache License, Version 2.0.
- goog.provide('goog.result.combineTest');
- goog.setTestOnly('goog.result.combineTest');
- 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');
- 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();
- var 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();
- }
|