UNPKG

sku-pg

Version:

Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!

272 lines (211 loc) 8.18 kB
<!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.SimpleResult</title> <script src="../base.js"></script> <script> goog.require('goog.Timer'); goog.require('goog.result'); goog.require('goog.testing.MockClock'); goog.require('goog.testing.recordFunction'); goog.require('goog.testing.jsunit'); </script> </head> <body> <script> var result, mockClock, resultCallback; function setUpPage() { mockClock = new goog.testing.MockClock(); mockClock.install(); } function setUp() { mockClock.reset(); resultCallback = new goog.testing.recordFunction(); resultCallback1 = new goog.testing.recordFunction(); resultCallback2 = new goog.testing.recordFunction(); result = new goog.result.SimpleResult(); } function tearDown() { resultCallback = resultCallback1 = resultCallback2 = result = null; } function tearDownPage() { mockClock.uninstall(); goog.dispose(mockClock); } function testHandlersCalledOnSuccess() { result.wait(resultCallback1); result.wait(resultCallback2); assertEquals(goog.result.Result.State.PENDING, result.getState()); assertEquals(0, resultCallback1.getCallCount()); assertEquals(0, resultCallback2.getCallCount()); result.setValue(2); assertEquals(goog.result.Result.State.SUCCESS, result.getState()); assertEquals(2, result.getValue()); assertEquals(1, resultCallback1.getCallCount()); assertEquals(1, resultCallback2.getCallCount()); var res1 = resultCallback1.popLastCall().getArgument(0); assertObjectEquals(result, res1); var res2 = resultCallback2.popLastCall().getArgument(0); assertObjectEquals(result, res2); } function testCustomHandlerScope() { result.wait(resultCallback1); var scope = {}; result.wait(resultCallback2, scope); result.setValue(2); assertEquals(1, resultCallback1.getCallCount()); assertEquals(1, resultCallback2.getCallCount()); var this1 = resultCallback1.popLastCall().getThis(); assertObjectEquals(goog.global, this1); var this2 = resultCallback2.popLastCall().getThis(); assertObjectEquals(scope, this2); } function testHandlersCalledOnError() { result.wait(resultCallback1); result.wait(resultCallback2); assertEquals(goog.result.Result.State.PENDING, result.getState()); var error = "Network Error"; result.setError(error); assertEquals(goog.result.Result.State.ERROR, result.getState()); assertEquals(error, result.getError()); assertEquals(1, resultCallback1.getCallCount()); assertEquals(1, resultCallback2.getCallCount()); var res1 = resultCallback1.popLastCall().getArgument(0); assertObjectEquals(result, res1); var res2 = resultCallback2.popLastCall().getArgument(0); assertObjectEquals(result, res2); } function testAttachingHandlerOnSuccessfulResult() { result.setValue(2); assertEquals(goog.result.Result.State.SUCCESS, result.getState()); assertEquals(2, result.getValue()); // resultCallback should be called immediately on a resolved Result assertEquals(0, resultCallback.getCallCount()); result.wait(resultCallback); assertEquals(1, resultCallback.getCallCount()); var res = resultCallback.popLastCall().getArgument(0); assertEquals(result, res); } function testAttachingHandlerOnErrorResult() { var error = { code: -1, errorString: "Invalid JSON" }; result.setError(error); assertEquals(goog.result.Result.State.ERROR, result.getState()); assertEquals(error, result.getError()); // resultCallback should be called immediately on a resolved Result assertEquals(0, resultCallback.getCallCount()); result.wait(resultCallback); assertEquals(1, resultCallback.getCallCount()); var res = resultCallback.popLastCall().getArgument(0); assertEquals(result, res); } function testExceptionThrownOnMultipleSuccessfulResolutionAttempts() { result.setValue(1); assertEquals(goog.result.Result.State.SUCCESS, result.getState()); assertEquals(1, result.getValue()); // Try to set the value again var e = assertThrows(goog.bind(result.setValue, result, 3)); assertTrue(e instanceof goog.result.SimpleResult.StateError); } function testExceptionThrownOnMultipleErrorResolutionAttempts() { assertEquals(goog.result.Result.State.PENDING, result.getState()); result.setError(5); assertEquals(goog.result.Result.State.ERROR, result.getState()); assertEquals(5, result.getError()); // Try to set error again var e = assertThrows(goog.bind(result.setError, result, 4)); assertTrue(e instanceof goog.result.SimpleResult.StateError); } function testExceptionThrownOnSuccessThenErrorResolutionAttempt() { assertEquals(goog.result.Result.State.PENDING, result.getState()); result.setValue(1); assertEquals(goog.result.Result.State.SUCCESS, result.getState()); assertEquals(1, result.getValue()); // Try to set error after setting value var e = assertThrows(goog.bind(result.setError, result, 3)); assertTrue(e instanceof goog.result.SimpleResult.StateError); } function testExceptionThrownOnErrorThenSuccessResolutionAttempt() { assertEquals(goog.result.Result.State.PENDING, result.getState()); var error = "fail"; result.setError(error); assertEquals(goog.result.Result.State.ERROR, result.getState()); assertEquals(error, result.getError()); // Try to set value after setting error var e = assertThrows(goog.bind(result.setValue, result, 1)); assertTrue(e instanceof goog.result.SimpleResult.StateError); } function testSuccessfulAsyncResolution() { result.wait(resultCallback); assertEquals(goog.result.Result.State.PENDING, result.getState()); goog.Timer.callOnce(function() { result.setValue(1); }); mockClock.tick(); assertEquals(1, resultCallback.getCallCount()); var res = resultCallback.popLastCall().getArgument(0); assertEquals(goog.result.Result.State.SUCCESS, res.getState()); assertEquals(1, res.getValue()); } function testErrorAsyncResolution() { result.wait(resultCallback); assertEquals(goog.result.Result.State.PENDING, result.getState()); var error = 'Network failure'; goog.Timer.callOnce(function() { result.setError(error); }); mockClock.tick(); assertEquals(1, resultCallback.getCallCount()); var res = resultCallback.popLastCall().getArgument(0); assertEquals(goog.result.Result.State.ERROR, res.getState()); assertEquals(error, res.getError()); } function testCancelStateAndReturn() { assertFalse(result.isCanceled()); var canceled = result.cancel(); assertTrue(result.isCanceled()); assertEquals(goog.result.Result.State.ERROR, result.getState()); assertTrue(result.getError() instanceof goog.result.Result.CancelError); assertTrue(canceled); } function testErrorHandlersFireOnCancel() { result.wait(resultCallback); result.cancel(); assertEquals(1, resultCallback.getCallCount()); var lastCall = resultCallback.popLastCall(); var res = lastCall.getArgument(0); assertEquals(goog.result.Result.State.ERROR, res.getState()); assertTrue(res.getError() instanceof goog.result.Result.CancelError); } function testCancelAfterSetValue() { // cancel after setValue/setError => no-op result.wait(resultCallback); result.setValue(1); assertEquals(goog.result.Result.State.SUCCESS, result.getState()); assertEquals(1, result.getValue()); assertEquals(1, resultCallback.getCallCount()); result.cancel(); assertEquals(goog.result.Result.State.SUCCESS, result.getState()); assertEquals(1, result.getValue()); assertEquals(1, resultCallback.getCallCount()); } function testSetValueAfterCancel() { // setValue/setError after cancel => no-op result.wait(resultCallback); result.cancel(); assertTrue(result.isCanceled()); assertTrue(result.getError() instanceof goog.result.Result.CancelError); result.setValue(1); assertTrue(result.isCanceled()); assertTrue(result.getError() instanceof goog.result.Result.CancelError); result.setError(3); assertTrue(result.isCanceled()); assertTrue(result.getError() instanceof goog.result.Result.CancelError); } </script> </body> </html>