DSDSServer2024/build/build.20240805/static/js/Cesium-1.53/Specs/ThirdParty/whenSpec.js

296 lines
7.8 KiB
JavaScript
Raw Normal View History

defineSuite([
'ThirdParty/when'
], function(
when) {
'use strict';
// These tests are from my original attempt to write my own promise implementation.
// When I switched to cujojs/when, I figured I may as well leave these here since
// they all still work. - SKH
var capturedValue;
var capturedError;
var promise;
var resolver;
function captureValue(value) {
capturedValue = value;
}
function captureError(error) {
capturedError = error;
}
beforeEach(function() {
var deferred = when.defer();
promise = deferred.promise;
resolver = deferred.resolver;
capturedValue = undefined;
capturedError = undefined;
});
it('does not call callbacks immediately', function() {
promise.then(captureValue, captureError);
expect(capturedValue).toBeUndefined();
expect(capturedError).toBeUndefined();
});
it('calls success when resolved before then is called', function() {
var value = 1;
resolver.resolve(value);
promise.then(captureValue, captureError);
expect(capturedValue).toEqual(value);
expect(capturedError).toBeUndefined();
});
it('calls success when resolved after then is called', function() {
var value = 1;
promise.then(captureValue, captureError);
resolver.resolve(value);
expect(capturedValue).toEqual(value);
expect(capturedError).toBeUndefined();
});
it('calls success when failure is omitted', function() {
var value = 1;
promise.then(captureValue);
resolver.resolve(value);
expect(capturedValue).toEqual(value);
expect(capturedError).toBeUndefined();
});
it('calls failure when rejected before then is called', function() {
var error = 'error';
resolver.reject(error);
promise.then(captureValue, captureError);
expect(capturedValue).toBeUndefined();
expect(capturedError).toEqual(error);
});
it('calls failure when rejected after then is called', function() {
var error = 'error';
promise.then(captureValue, captureError);
resolver.reject(error);
expect(capturedValue).toBeUndefined();
expect(capturedError).toEqual(error);
});
it('calls failure when success is omitted', function() {
var error = 'error';
promise.then(undefined, captureError);
resolver.reject(error);
expect(capturedValue).toBeUndefined();
expect(capturedError).toEqual(error);
});
it('chains success', function() {
promise.then(function(val) {
return val + 1;
}).then(captureValue);
resolver.resolve(1);
expect(capturedValue).toEqual(2);
});
it('chains failure', function() {
promise.then(undefined, function(e) {
return when.reject('important' + e);
}).then(captureValue, captureError);
resolver.reject('error');
expect(capturedError).toEqual('importanterror');
});
// previous versions of when.js would throw when resolving or rejecting multiple times.
it('ignores when resolving or rejecting after resolving', function() {
resolver.resolve(1);
resolver.resolve(5);
resolver.reject('e');
});
it('ignores when resolving or rejecting after rejecting', function() {
resolver.reject('2');
resolver.resolve(5);
resolver.reject('e');
});
it('can handle resolving to another promise that resolves', function() {
var resolveNext;
var promiseResolved = false;
promise.then(function(value) {
promiseResolved = true;
var next = when.defer();
resolveNext = function(v) {
next.resolve(v);
};
return next.promise;
}).then(captureValue);
resolver.resolve(5);
expect(promiseResolved).toEqual(true);
expect(capturedValue).toBeUndefined();
resolveNext(6);
expect(capturedValue).toEqual(6);
});
it('can handle resolving to another promise that rejects', function() {
var rejectNext;
var promiseResolved = false;
promise.then(function(value) {
promiseResolved = true;
var next = when.defer();
rejectNext = function(e) {
next.reject(e);
};
return next.promise;
}).then(captureValue, captureError);
resolver.resolve(5);
expect(promiseResolved).toEqual(true);
expect(capturedValue).toBeUndefined();
rejectNext('error');
expect(capturedValue).toBeUndefined();
expect(capturedError).toEqual('error');
});
it('can handle rejecting to another promise that resolves', function() {
var resolveNext;
var promiseResolved = false;
var promiseRejected = false;
promise.then(function(value) {
promiseResolved = true;
}, function(error) {
promiseRejected = true;
var next = when.defer();
resolveNext = function(v) {
next.resolve(v);
};
return next.promise;
}).then(captureValue, captureError);
resolver.reject('e');
expect(promiseResolved).toEqual(false);
expect(promiseRejected).toEqual(true);
expect(capturedValue).toBeUndefined();
resolveNext(6);
expect(capturedValue).toEqual(6);
expect(capturedError).toBeUndefined();
});
it('can handle rejecting to another promise that rejects', function() {
var rejectNext;
var promiseResolved = false;
var promiseRejected = false;
promise.then(function(value) {
promiseResolved = true;
}, function(error) {
promiseRejected = true;
var next = when.defer();
rejectNext = function(e) {
next.reject(e);
};
return next.promise;
}).then(captureValue, captureError);
resolver.reject('e');
expect(promiseResolved).toEqual(false);
expect(promiseRejected).toEqual(true);
expect(capturedValue).toBeUndefined();
rejectNext('error');
expect(capturedValue).toBeUndefined();
expect(capturedError).toEqual('error');
});
it('can pass through resolving', function() {
promise.then(undefined, function(error) {
return 'error';
}).then(captureValue, captureError);
resolver.resolve(5);
expect(capturedValue).toEqual(5);
expect(capturedError).toBeUndefined();
});
it('can pass through rejecting', function() {
promise.then(function(value) {
return value + 5;
}).then(captureValue, captureError);
resolver.reject('error');
expect(capturedValue).toBeUndefined();
expect(capturedError).toEqual('error');
});
describe('when', function() {
it('works with values', function() {
var value = 1;
when(value, captureValue, captureError);
expect(capturedValue).toEqual(value);
expect(capturedError).toBeUndefined();
});
it('works with promises that resolve', function() {
var value = 1;
when(promise, captureValue, captureError);
resolver.resolve(value);
expect(capturedValue).toEqual(value);
expect(capturedError).toBeUndefined();
});
it('works with deferreds that reject', function() {
var error = 'error';
when(promise, captureValue, captureError);
resolver.reject(error);
expect(capturedValue).toBeUndefined();
expect(capturedError).toEqual(error);
});
});
});