You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
993 lines
30 KiB
JavaScript
993 lines
30 KiB
JavaScript
import { Ellipsoid } from "../../Source/Cesium.js";
|
|
import { GeographicTilingScheme } from "../../Source/Cesium.js";
|
|
import { Math as CesiumMath } from "../../Source/Cesium.js";
|
|
import { Rectangle } from "../../Source/Cesium.js";
|
|
import { Request } from "../../Source/Cesium.js";
|
|
import { RequestScheduler } from "../../Source/Cesium.js";
|
|
import { Resource } from "../../Source/Cesium.js";
|
|
import { WebMercatorProjection } from "../../Source/Cesium.js";
|
|
import { WebMercatorTilingScheme } from "../../Source/Cesium.js";
|
|
import { GetFeatureInfoFormat } from "../../Source/Cesium.js";
|
|
import { Imagery } from "../../Source/Cesium.js";
|
|
import { ImageryLayer } from "../../Source/Cesium.js";
|
|
import { ImageryProvider } from "../../Source/Cesium.js";
|
|
import { ImageryState } from "../../Source/Cesium.js";
|
|
import { UrlTemplateImageryProvider } from "../../Source/Cesium.js";
|
|
import pollToPromise from "../pollToPromise.js";
|
|
import { when } from "../../Source/Cesium.js";
|
|
|
|
describe("Scene/UrlTemplateImageryProvider", function () {
|
|
beforeEach(function () {
|
|
RequestScheduler.clearForSpecs();
|
|
});
|
|
|
|
afterEach(function () {
|
|
Resource._Implementations.createImage =
|
|
Resource._DefaultImplementations.createImage;
|
|
});
|
|
|
|
it("conforms to ImageryProvider interface", function () {
|
|
expect(UrlTemplateImageryProvider).toConformToInterface(ImageryProvider);
|
|
});
|
|
|
|
it("requires the url to be specified", function () {
|
|
function createWithoutUrl() {
|
|
return new UrlTemplateImageryProvider({});
|
|
}
|
|
expect(createWithoutUrl).toThrowDeveloperError();
|
|
});
|
|
|
|
it("resolves readyPromise", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "made/up/tms/server/",
|
|
});
|
|
|
|
return provider.readyPromise.then(function (result) {
|
|
expect(result).toBe(true);
|
|
expect(provider.ready).toBe(true);
|
|
});
|
|
});
|
|
|
|
it("resolves readyPromise with Resource", function () {
|
|
var resource = new Resource({
|
|
url: "made/up/tms/server/",
|
|
});
|
|
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: resource,
|
|
});
|
|
|
|
return provider.readyPromise.then(function (result) {
|
|
expect(result).toBe(true);
|
|
expect(provider.ready).toBe(true);
|
|
});
|
|
});
|
|
|
|
it("returns valid value for hasAlphaChannel", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "made/up/tms/server/",
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
expect(typeof provider.hasAlphaChannel).toBe("boolean");
|
|
});
|
|
});
|
|
|
|
it("requestImage returns a promise for an image and loads it for cross-origin use", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "made/up/tms/server/{Z}/{X}/{reverseY}",
|
|
});
|
|
|
|
expect(provider.url).toEqual("made/up/tms/server/{Z}/{X}/{reverseY}");
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
expect(provider.tileWidth).toEqual(256);
|
|
expect(provider.tileHeight).toEqual(256);
|
|
expect(provider.maximumLevel).toBeUndefined();
|
|
expect(provider.minimumLevel).toBe(0);
|
|
expect(provider.tilingScheme).toBeInstanceOf(WebMercatorTilingScheme);
|
|
expect(provider.rectangle).toEqual(
|
|
new WebMercatorTilingScheme().rectangle
|
|
);
|
|
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(0, 0, 0).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("when no credit is supplied, the provider has no logo", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "made/up/tms/server",
|
|
});
|
|
expect(provider.credit).toBeUndefined();
|
|
});
|
|
|
|
it("turns the supplied credit into a logo", function () {
|
|
var providerWithCredit = new UrlTemplateImageryProvider({
|
|
url: "made/up/gms/server",
|
|
credit: "Thanks to our awesome made up source of this imagery!",
|
|
});
|
|
expect(providerWithCredit.credit).toBeDefined();
|
|
});
|
|
|
|
it("rectangle passed to constructor does not affect tile numbering", function () {
|
|
var rectangle = new Rectangle(0.1, 0.2, 0.3, 0.4);
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "made/up/tms/server/{z}/{x}/{reverseY}",
|
|
rectangle: rectangle,
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
expect(provider.tileWidth).toEqual(256);
|
|
expect(provider.tileHeight).toEqual(256);
|
|
expect(provider.maximumLevel).toBeUndefined();
|
|
expect(provider.minimumLevel).toBe(0);
|
|
expect(provider.tilingScheme).toBeInstanceOf(WebMercatorTilingScheme);
|
|
expect(provider.rectangle).toEqualEpsilon(
|
|
rectangle,
|
|
CesiumMath.EPSILON14
|
|
);
|
|
expect(provider.tileDiscardPolicy).toBeUndefined();
|
|
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toContain("/0/0/0");
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(0, 0, 0).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("uses minimumLevel and maximumLevel passed to constructor", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "made/up/tms/server",
|
|
minimumLevel: 1,
|
|
maximumLevel: 5,
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
expect(provider.minimumLevel).toEqual(1);
|
|
expect(provider.maximumLevel).toEqual(5);
|
|
});
|
|
});
|
|
|
|
it("raises error event when image cannot be loaded", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "made/up/tms/server",
|
|
});
|
|
|
|
var layer = new ImageryLayer(provider);
|
|
|
|
var tries = 0;
|
|
provider.errorEvent.addEventListener(function (error) {
|
|
expect(error.timesRetried).toEqual(tries);
|
|
++tries;
|
|
if (tries < 3) {
|
|
error.retry = true;
|
|
}
|
|
setTimeout(function () {
|
|
RequestScheduler.update();
|
|
}, 1);
|
|
});
|
|
|
|
Resource._Implementations.createImage = function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
if (tries === 2) {
|
|
// Succeed after 2 tries
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
} else {
|
|
// fail
|
|
setTimeout(function () {
|
|
deferred.reject();
|
|
}, 1);
|
|
}
|
|
};
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
var imagery = new Imagery(layer, 0, 0, 0);
|
|
imagery.addReference();
|
|
layer._requestImagery(imagery);
|
|
RequestScheduler.update();
|
|
|
|
return pollToPromise(function () {
|
|
return imagery.state === ImageryState.RECEIVED;
|
|
}).then(function () {
|
|
expect(imagery.image).toBeImageOrImageBitmap();
|
|
expect(tries).toEqual(2);
|
|
imagery.releaseReference();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluation of pattern X Y reverseX reverseY Z reverseZ", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url:
|
|
"made/up/tms/server/{z}/{reverseZ}/{reverseY}/{y}/{reverseX}/{x}.PNG",
|
|
tilingScheme: new GeographicTilingScheme(),
|
|
maximumLevel: 6,
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqual("made/up/tms/server/2/3/2/1/4/3.PNG");
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluation of schema zero padding for X Y Z as 0000", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url:
|
|
"made/up/tms/server/{z}/{reverseZ}/{reverseY}/{y}/{reverseX}/{x}.PNG",
|
|
urlSchemeZeroPadding: {
|
|
"{x}": "0000",
|
|
"{y}": "0000",
|
|
"{z}": "0000",
|
|
},
|
|
tilingScheme: new GeographicTilingScheme(),
|
|
maximumLevel: 6,
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqual(
|
|
"made/up/tms/server/0002/3/2/0001/4/0003.PNG"
|
|
);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluation of schema zero padding for reverseX reverseY reverseZ as 0000", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url:
|
|
"made/up/tms/server/{z}/{reverseZ}/{reverseY}/{y}/{reverseX}/{x}.PNG",
|
|
urlSchemeZeroPadding: {
|
|
"{reverseX}": "0000",
|
|
"{reverseY}": "0000",
|
|
"{reverseZ}": "0000",
|
|
},
|
|
tilingScheme: new GeographicTilingScheme(),
|
|
maximumLevel: 6,
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqual(
|
|
"made/up/tms/server/2/0003/0002/1/0004/3.PNG"
|
|
);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluation of schema zero padding for x y z as 0000 and large x and y", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url:
|
|
"made/up/tms/server/{z}/{reverseZ}/{reverseY}/{y}/{reverseX}/{x}.PNG",
|
|
urlSchemeZeroPadding: {
|
|
"{x}": "0000",
|
|
"{y}": "0000",
|
|
"{z}": "0000",
|
|
},
|
|
tilingScheme: new GeographicTilingScheme(),
|
|
maximumLevel: 6,
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqual(
|
|
"made/up/tms/server/0005/0/21/0010/51/0012.PNG"
|
|
);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(12, 10, 5).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluates pattern northDegrees", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "{northDegrees}",
|
|
tilingScheme: new GeographicTilingScheme(),
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqualEpsilon(45.0, CesiumMath.EPSILON11);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluates pattern southDegrees", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "{southDegrees}",
|
|
tilingScheme: new GeographicTilingScheme(),
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqualEpsilon(0.0, CesiumMath.EPSILON11);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluates pattern eastDegrees", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "{eastDegrees}",
|
|
tilingScheme: new GeographicTilingScheme(),
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqualEpsilon(0.0, CesiumMath.EPSILON11);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluates pattern westDegrees", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "{westDegrees}",
|
|
tilingScheme: new GeographicTilingScheme(),
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqualEpsilon(-45.0, CesiumMath.EPSILON11);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluates pattern northProjected", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "{northProjected}",
|
|
tilingScheme: new WebMercatorTilingScheme(),
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqualEpsilon(
|
|
(Math.PI * Ellipsoid.WGS84.maximumRadius) / 2.0,
|
|
CesiumMath.EPSILON11
|
|
);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluates pattern southProjected", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "{southProjected}",
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqualEpsilon(
|
|
(Math.PI * Ellipsoid.WGS84.maximumRadius) / 2.0,
|
|
CesiumMath.EPSILON11
|
|
);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 0, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluates pattern eastProjected", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "{eastProjected}",
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqualEpsilon(
|
|
(-Math.PI * Ellipsoid.WGS84.maximumRadius) / 2.0,
|
|
CesiumMath.EPSILON11
|
|
);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(0, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluates pattern westProjected", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "{westProjected}",
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqualEpsilon(
|
|
(-Math.PI * Ellipsoid.WGS84.maximumRadius) / 2.0,
|
|
CesiumMath.EPSILON11
|
|
);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(1, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evalutes multiple coordinate patterns", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url:
|
|
"{westDegrees} {westProjected} {southProjected} {southDegrees} {eastProjected} {eastDegrees} {northDegrees} {northProjected}",
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqual(
|
|
"-90 " +
|
|
(-Math.PI * Ellipsoid.WGS84.maximumRadius) / 2.0 +
|
|
" " +
|
|
"0 " +
|
|
"0 " +
|
|
"0 " +
|
|
"0 " +
|
|
CesiumMath.toDegrees(
|
|
WebMercatorProjection.mercatorAngleToGeodeticLatitude(Math.PI / 2)
|
|
) +
|
|
" " +
|
|
(Math.PI * Ellipsoid.WGS84.maximumRadius) / 2.0
|
|
);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(1, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("evaluates pattern s", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "{s}",
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(["a", "b", "c"].indexOf(request.url)).toBeGreaterThanOrEqualTo(
|
|
0
|
|
);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("uses custom subdomain string", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "{s}",
|
|
subdomains: "123",
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(["1", "2", "3"].indexOf(request.url)).toBeGreaterThanOrEqualTo(
|
|
0
|
|
);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("uses custom subdomain array", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "{s}",
|
|
subdomains: ["foo", "bar"],
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(["foo", "bar"].indexOf(request.url)).toBeGreaterThanOrEqualTo(0);
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("uses custom tags", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "made/up/tms/server/{custom1}/{custom2}/{z}/{y}/{x}.PNG",
|
|
tilingScheme: new GeographicTilingScheme(),
|
|
maximumLevel: 6,
|
|
customTags: {
|
|
custom1: function () {
|
|
return "foo";
|
|
},
|
|
custom2: function () {
|
|
return "bar";
|
|
},
|
|
},
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
spyOn(Resource._Implementations, "createImage").and.callFake(function (
|
|
request,
|
|
crossOrigin,
|
|
deferred
|
|
) {
|
|
expect(request.url).toEqual("made/up/tms/server/foo/bar/2/1/3.PNG");
|
|
|
|
// Just return any old image.
|
|
Resource._DefaultImplementations.createImage(
|
|
new Request({ url: "Data/Images/Red16x16.png" }),
|
|
crossOrigin,
|
|
deferred
|
|
);
|
|
});
|
|
|
|
return provider.requestImage(3, 1, 2).then(function (image) {
|
|
expect(Resource._Implementations.createImage).toHaveBeenCalled();
|
|
expect(image).toBeImageOrImageBitmap();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("pickFeatures", function () {
|
|
it("returns undefined when enablePickFeatures is false", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "foo/bar",
|
|
pickFeaturesUrl: "foo/bar",
|
|
getFeatureInfoFormats: [
|
|
new GetFeatureInfoFormat("json", "application/json"),
|
|
new GetFeatureInfoFormat("xml", "text/xml"),
|
|
],
|
|
enablePickFeatures: false,
|
|
});
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
expect(provider.pickFeatures(0, 0, 0, 0.0, 0.0)).toBeUndefined();
|
|
});
|
|
});
|
|
|
|
it("does not return undefined when enablePickFeatures is subsequently set to true", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "foo/bar",
|
|
pickFeaturesUrl: "foo/bar",
|
|
getFeatureInfoFormats: [
|
|
new GetFeatureInfoFormat("json", "application/json"),
|
|
new GetFeatureInfoFormat("xml", "text/xml"),
|
|
],
|
|
enablePickFeatures: false,
|
|
});
|
|
|
|
provider.enablePickFeatures = true;
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
expect(provider.pickFeatures(0, 0, 0, 0.0, 0.0)).not.toBeUndefined();
|
|
});
|
|
});
|
|
|
|
it("returns undefined when enablePickFeatures is initialized as true and set to false", function () {
|
|
var provider = new UrlTemplateImageryProvider({
|
|
url: "foo/bar",
|
|
pickFeaturesUrl: "foo/bar",
|
|
getFeatureInfoFormats: [
|
|
new GetFeatureInfoFormat("json", "application/json"),
|
|
new GetFeatureInfoFormat("xml", "text/xml"),
|
|
],
|
|
enablePickFeatures: true,
|
|
});
|
|
|
|
provider.enablePickFeatures = false;
|
|
|
|
return pollToPromise(function () {
|
|
return provider.ready;
|
|
}).then(function () {
|
|
expect(provider.pickFeatures(0, 0, 0, 0.0, 0.0)).toBeUndefined();
|
|
});
|
|
});
|
|
});
|
|
|
|
it("throws if tileWidth called before provider is ready", function () {
|
|
var provider = new UrlTemplateImageryProvider(when.defer());
|
|
|
|
expect(function () {
|
|
return provider.tileWidth();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws if tileHeight called before provider is ready", function () {
|
|
var provider = new UrlTemplateImageryProvider(when.defer());
|
|
|
|
expect(function () {
|
|
return provider.tileHeight();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws if maximumLevel called before provider is ready", function () {
|
|
var provider = new UrlTemplateImageryProvider(when.defer());
|
|
|
|
expect(function () {
|
|
return provider.maximumLevel();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws if minimumLevel called before provider is ready", function () {
|
|
var provider = new UrlTemplateImageryProvider(when.defer());
|
|
|
|
expect(function () {
|
|
return provider.minimumLevel();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws if tilingScheme called before provider is ready", function () {
|
|
var provider = new UrlTemplateImageryProvider(when.defer());
|
|
|
|
expect(function () {
|
|
return provider.tilingScheme();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws if rectangle called before provider is ready", function () {
|
|
var provider = new UrlTemplateImageryProvider(when.defer());
|
|
|
|
expect(function () {
|
|
return provider.rectangle();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws if tileDiscardPolicy called before provider is ready", function () {
|
|
var provider = new UrlTemplateImageryProvider(when.defer());
|
|
|
|
expect(function () {
|
|
return provider.tileDiscardPolicy();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws if credit called before provider is ready", function () {
|
|
var provider = new UrlTemplateImageryProvider(when.defer());
|
|
|
|
expect(function () {
|
|
return provider.credit();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws if hasAlphaChannel called before provider is ready", function () {
|
|
var provider = new UrlTemplateImageryProvider(when.defer());
|
|
|
|
expect(function () {
|
|
return provider.hasAlphaChannel();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws if getTileCredits called before provider is ready", function () {
|
|
var provider = new UrlTemplateImageryProvider(when.defer());
|
|
|
|
expect(function () {
|
|
return provider.getTileCredits();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws if requestImage called before provider is ready", function () {
|
|
var provider = new UrlTemplateImageryProvider(when.defer());
|
|
|
|
expect(function () {
|
|
return provider.requestImage();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("throws if pickFeatures called before provider is ready", function () {
|
|
var provider = new UrlTemplateImageryProvider(when.defer());
|
|
|
|
expect(function () {
|
|
return provider.pickFeatures();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
});
|