import { loadImageFromTypedArray } from "../../Source/Cesium.js";
|
import { Resource } from "../../Source/Cesium.js";
|
import { when } from "../../Source/Cesium.js";
|
|
describe("Core/loadImageFromTypedArray", function () {
|
var supportsImageBitmapOptions;
|
|
beforeAll(function () {
|
return Resource.supportsImageBitmapOptions().then(function (result) {
|
supportsImageBitmapOptions = result;
|
});
|
});
|
|
it("can load an image", function () {
|
return Resource.fetchArrayBuffer("./Data/Images/Blue10x10.png").then(
|
function (arrayBuffer) {
|
var options = {
|
uint8Array: new Uint8Array(arrayBuffer),
|
format: "image/png",
|
};
|
|
return loadImageFromTypedArray(options).then(function (image) {
|
expect(image.width).toEqual(10);
|
expect(image.height).toEqual(10);
|
});
|
}
|
);
|
});
|
|
it("flips image only when flipY is true", function () {
|
if (!supportsImageBitmapOptions) {
|
return;
|
}
|
|
var options = {
|
uint8Array: new Uint8Array([67, 101, 115, 105, 117, 109]), // This is an invalid PNG.
|
format: "image/png",
|
flipY: true,
|
};
|
spyOn(window, "createImageBitmap").and.returnValue(when.resolve({}));
|
var blob = new Blob([options.uint8Array], {
|
type: options.format,
|
});
|
|
return Resource.supportsImageBitmapOptions().then(function (result) {
|
if (!result) {
|
return;
|
}
|
|
return loadImageFromTypedArray(options)
|
.then(function () {
|
expect(window.createImageBitmap).toHaveBeenCalledWith(blob, {
|
imageOrientation: "flipY",
|
premultiplyAlpha: "none",
|
colorSpaceConversion: "default",
|
});
|
|
window.createImageBitmap.calls.reset();
|
options.flipY = false;
|
return loadImageFromTypedArray(options);
|
})
|
.then(function () {
|
expect(window.createImageBitmap).toHaveBeenCalledWith(blob, {
|
imageOrientation: "none",
|
premultiplyAlpha: "none",
|
colorSpaceConversion: "default",
|
});
|
});
|
});
|
});
|
|
it("stores colorSpaceConversion correctly", function () {
|
if (!supportsImageBitmapOptions) {
|
return;
|
}
|
|
var options = {
|
uint8Array: new Uint8Array([67, 101, 115, 105, 117, 109]), // This is an invalid PNG.
|
format: "image/png",
|
flipY: false,
|
skipColorSpaceConversion: true,
|
};
|
spyOn(window, "createImageBitmap").and.returnValue(when.resolve({}));
|
var blob = new Blob([options.uint8Array], {
|
type: options.format,
|
});
|
|
return Resource.supportsImageBitmapOptions().then(function (result) {
|
if (!result) {
|
return;
|
}
|
|
return loadImageFromTypedArray(options)
|
.then(function () {
|
expect(window.createImageBitmap).toHaveBeenCalledWith(blob, {
|
imageOrientation: "none",
|
premultiplyAlpha: "none",
|
colorSpaceConversion: "none",
|
});
|
|
window.createImageBitmap.calls.reset();
|
options.skipColorSpaceConversion = false;
|
return loadImageFromTypedArray(options);
|
})
|
.then(function () {
|
expect(window.createImageBitmap).toHaveBeenCalledWith(blob, {
|
imageOrientation: "none",
|
premultiplyAlpha: "none",
|
colorSpaceConversion: "default",
|
});
|
});
|
});
|
});
|
|
it("can load an image when ImageBitmap is not supported", function () {
|
if (!supportsImageBitmapOptions) {
|
return;
|
}
|
|
spyOn(Resource, "supportsImageBitmapOptions").and.returnValue(
|
when.resolve(false)
|
);
|
spyOn(window, "createImageBitmap").and.callThrough();
|
return Resource.fetchArrayBuffer("./Data/Images/Blue10x10.png").then(
|
function (arrayBuffer) {
|
var options = {
|
uint8Array: new Uint8Array(arrayBuffer),
|
format: "image/png",
|
};
|
|
return loadImageFromTypedArray(options).then(function (image) {
|
expect(image.width).toEqual(10);
|
expect(image.height).toEqual(10);
|
expect(window.createImageBitmap).not.toHaveBeenCalled();
|
});
|
}
|
);
|
});
|
|
it("can not load an invalid image", function () {
|
var options = {
|
uint8Array: new Uint8Array([67, 101, 115, 105, 117, 109]), // This is an invalid PNG.
|
format: "image/png",
|
};
|
return loadImageFromTypedArray(options)
|
.then(function (image) {
|
fail("should not be called");
|
})
|
.otherwise(function () {});
|
});
|
|
it("Throws without array", function () {
|
expect(function () {
|
loadImageFromTypedArray({});
|
}).toThrowDeveloperError();
|
});
|
|
it("Throws without format", function () {
|
expect(function () {
|
loadImageFromTypedArray({
|
uint8Array: new Uint8Array(),
|
});
|
}).toThrowDeveloperError();
|
});
|
});
|