import { when } from "../../Source/Cesium.js";
|
|
describe("ThirdParty/when", function () {
|
// 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);
|
});
|
});
|
});
|