230 lines
6.1 KiB
HTML
230 lines
6.1 KiB
HTML
<!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>
|