154 lines
4.2 KiB
HTML
154 lines
4.2 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.transform</title>
|
|
<script src="../base.js"></script>
|
|
<script>
|
|
|
|
goog.require('goog.Timer');
|
|
goog.require('goog.result.SimpleResult');
|
|
goog.require('goog.result');
|
|
goog.require('goog.testing.MockClock');
|
|
goog.require('goog.testing.jsunit');
|
|
goog.require('goog.testing.recordFunction');
|
|
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
|
|
var result, resultCallback, multiplyResult, mockClock;
|
|
|
|
function setUpPage() {
|
|
mockClock = new goog.testing.MockClock();
|
|
mockClock.install();
|
|
}
|
|
|
|
function setUp() {
|
|
mockClock.reset();
|
|
result = new goog.result.SimpleResult();
|
|
resultCallback = new goog.testing.recordFunction();
|
|
multiplyResult = goog.testing.recordFunction(function(value) {
|
|
return value * 2;
|
|
});
|
|
}
|
|
|
|
function tearDown() {
|
|
result = multiplyResult = null;
|
|
}
|
|
|
|
function tearDownPage() {
|
|
mockClock.uninstall();
|
|
goog.dispose(mockClock);
|
|
}
|
|
|
|
function testTransformWhenResultSuccess() {
|
|
var transformedResult = goog.result.transform(result, multiplyResult);
|
|
goog.result.wait(transformedResult, resultCallback);
|
|
|
|
assertEquals(goog.result.Result.State.PENDING, result.getState());
|
|
result.setValue(1);
|
|
assertTransformerCall(multiplyResult, 1);
|
|
assertSuccessCall(resultCallback, transformedResult, 2);
|
|
}
|
|
|
|
function testTransformWhenResultSuccessAsync() {
|
|
var transformedResult = goog.result.transform(result, multiplyResult);
|
|
goog.result.wait(transformedResult, resultCallback);
|
|
|
|
goog.Timer.callOnce(function() {
|
|
result.setValue(1);
|
|
});
|
|
|
|
assertEquals(goog.result.Result.State.PENDING, result.getState());
|
|
mockClock.tick();
|
|
assertTransformerCall(multiplyResult, 1);
|
|
assertSuccessCall(resultCallback, transformedResult, 2);
|
|
}
|
|
|
|
function testTransformWhenResultError() {
|
|
var transformedResult = goog.result.transform(result, multiplyResult);
|
|
goog.result.wait(transformedResult, resultCallback);
|
|
|
|
assertEquals(goog.result.Result.State.PENDING, result.getState());
|
|
result.setError(4);
|
|
assertNoCall(multiplyResult);
|
|
assertErrorCall(resultCallback, transformedResult, 4);
|
|
}
|
|
|
|
function testTransformWhenResultErrorAsync() {
|
|
var transformedResult = goog.result.transform(result, multiplyResult);
|
|
|
|
goog.result.wait(transformedResult, resultCallback);
|
|
|
|
goog.Timer.callOnce(function() {
|
|
result.setError(5);
|
|
});
|
|
|
|
assertEquals(goog.result.Result.State.PENDING, result.getState());
|
|
mockClock.tick();
|
|
assertNoCall(multiplyResult);
|
|
assertErrorCall(resultCallback, transformedResult, 5);
|
|
}
|
|
|
|
function testCancelParentResults() {
|
|
var transformedResult = goog.result.transform(result, multiplyResult);
|
|
goog.result.wait(transformedResult, resultCallback);
|
|
|
|
goog.result.cancelParentResults(transformedResult);
|
|
|
|
assertTrue(result.isCanceled());
|
|
result.setValue(1);
|
|
assertNoCall(multiplyResult);
|
|
}
|
|
|
|
function testDoubleTransformCancel() {
|
|
var step1Result = goog.result.transform(result, multiplyResult);
|
|
var step2Result = goog.result.transform(step1Result, multiplyResult);
|
|
|
|
goog.result.cancelParentResults(step2Result);
|
|
|
|
assertFalse(result.isCanceled());
|
|
assertTrue(step1Result.isCanceled());
|
|
assertTrue(step2Result.isCanceled());
|
|
}
|
|
|
|
function assertSuccessCall(recordFunction, result, value) {
|
|
assertEquals(1, recordFunction.getCallCount());
|
|
|
|
var res = recordFunction.popLastCall().getArgument(0);
|
|
assertEquals(result, res);
|
|
assertEquals(goog.result.Result.State.SUCCESS, res.getState());
|
|
assertEquals(value, res.getValue());
|
|
}
|
|
|
|
function assertErrorCall(recordFunction, result, value) {
|
|
assertEquals(1, recordFunction.getCallCount());
|
|
|
|
var res = recordFunction.popLastCall().getArgument(0);
|
|
assertEquals(result, res);
|
|
assertEquals(goog.result.Result.State.ERROR, res.getState());
|
|
assertEquals(value, res.getError());
|
|
}
|
|
|
|
function assertNoCall(recordFunction) {
|
|
assertEquals(0, recordFunction.getCallCount());
|
|
}
|
|
|
|
function assertTransformerCall(recordFunction, value) {
|
|
assertEquals(1, recordFunction.getCallCount());
|
|
|
|
var argValue = recordFunction.popLastCall().getArgument(0);
|
|
assertEquals(value, argValue);
|
|
}
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|