import {
|
BufferLoader,
|
Resource,
|
ResourceCache,
|
when,
|
} from "../../Source/Cesium.js";
|
|
describe("Scene/BufferLoader", function () {
|
var typedArray = new Uint8Array([1, 3, 7, 15, 31, 63, 127, 255]);
|
var arrayBuffer = typedArray.buffer;
|
var resource = new Resource({ url: "https://example.com/external.bin" });
|
|
afterEach(function () {
|
ResourceCache.clearForSpecs();
|
});
|
|
it("throws if neither options.typedArray nor options.resource are defined", function () {
|
expect(function () {
|
return new BufferLoader({
|
typedArray: undefined,
|
resource: undefined,
|
});
|
}).toThrowDeveloperError();
|
});
|
|
it("throws if both options.typedArray and options.resource are defined", function () {
|
expect(function () {
|
return new BufferLoader({
|
typedArray: typedArray,
|
resource: resource,
|
});
|
}).toThrowDeveloperError();
|
});
|
|
it("rejects promise if buffer cannot be fetched", function () {
|
var error = new Error("404 Not Found");
|
spyOn(Resource.prototype, "fetchArrayBuffer").and.returnValue(
|
when.reject(error)
|
);
|
|
var bufferLoader = new BufferLoader({
|
resource: resource,
|
});
|
|
bufferLoader.load();
|
|
return bufferLoader.promise
|
.then(function (bufferLoader) {
|
fail();
|
})
|
.otherwise(function (runtimeError) {
|
expect(runtimeError.message).toBe(
|
"Failed to load external buffer: https://example.com/external.bin\n404 Not Found"
|
);
|
});
|
});
|
|
it("loads buffer from typed array", function () {
|
var bufferLoader = new BufferLoader({
|
typedArray: typedArray,
|
});
|
bufferLoader.load();
|
|
return bufferLoader.promise.then(function (bufferLoader) {
|
expect(bufferLoader.typedArray).toBe(typedArray);
|
});
|
});
|
|
it("loads external buffer", function () {
|
var fetchBuffer = spyOn(
|
Resource.prototype,
|
"fetchArrayBuffer"
|
).and.returnValue(when.resolve(arrayBuffer));
|
|
var bufferLoader = new BufferLoader({
|
resource: resource,
|
});
|
|
bufferLoader.load();
|
|
return bufferLoader.promise.then(function (bufferLoader) {
|
expect(fetchBuffer).toHaveBeenCalled();
|
expect(bufferLoader.typedArray.buffer).toBe(arrayBuffer);
|
});
|
});
|
|
it("destroys buffer", function () {
|
spyOn(Resource.prototype, "fetchArrayBuffer").and.returnValue(
|
when.resolve(arrayBuffer)
|
);
|
|
var bufferLoader = new BufferLoader({
|
resource: resource,
|
});
|
|
expect(bufferLoader.typedArray).not.toBeDefined();
|
|
bufferLoader.load();
|
|
return bufferLoader.promise.then(function (bufferLoader) {
|
expect(bufferLoader.typedArray.buffer).toBe(arrayBuffer);
|
expect(bufferLoader.isDestroyed()).toBe(false);
|
|
bufferLoader.destroy();
|
expect(bufferLoader.typedArray).not.toBeDefined();
|
expect(bufferLoader.isDestroyed()).toBe(true);
|
});
|
});
|
|
function resolveAfterDestroy(reject) {
|
var deferredPromise = when.defer();
|
spyOn(Resource.prototype, "fetchArrayBuffer").and.returnValue(
|
deferredPromise.promise
|
);
|
|
var bufferLoader = new BufferLoader({
|
resource: resource,
|
});
|
|
expect(bufferLoader.typedArray).not.toBeDefined();
|
|
bufferLoader.load();
|
bufferLoader.destroy();
|
|
if (reject) {
|
deferredPromise.reject(new Error());
|
} else {
|
deferredPromise.resolve(arrayBuffer);
|
}
|
|
expect(bufferLoader.typedArray).not.toBeDefined();
|
expect(bufferLoader.isDestroyed()).toBe(true);
|
}
|
|
it("handles resolving uri after destroy", function () {
|
resolveAfterDestroy(false);
|
});
|
|
it("handles rejecting uri after destroy", function () {
|
resolveAfterDestroy(true);
|
});
|
});
|