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.

232 lines
6.8 KiB
JavaScript

import { Clock } from "../../Source/Cesium.js";
import { ClockStep } from "../../Source/Cesium.js";
import { JulianDate } from "../../Source/Cesium.js";
import { Request } from "../../Source/Cesium.js";
import { RequestScheduler } from "../../Source/Cesium.js";
import { RequestType } from "../../Source/Cesium.js";
import { TimeIntervalCollection } from "../../Source/Cesium.js";
import { TimeDynamicImagery } from "../../Source/Cesium.js";
import { when } from "../../Source/Cesium.js";
describe("Scene/TimeDynamicImagery", function () {
var clock = new Clock({
clockStep: ClockStep.TICK_DEPENDENT,
shouldAnimate: true,
});
var times = TimeIntervalCollection.fromIso8601({
iso8601: "2017-04-26/2017-04-30/P1D",
dataCallback: function (interval, index) {
return {
Time: JulianDate.toIso8601(interval.start),
};
},
});
beforeEach(function () {
RequestScheduler.clearForSpecs();
clock.currentTime = JulianDate.fromIso8601("2017-04-26");
});
it("clock is required", function () {
expect(function () {
return new TimeDynamicImagery({
times: times,
requestImageFunction: function () {},
reloadFunction: function () {},
});
}).toThrowDeveloperError();
});
it("times is required", function () {
expect(function () {
return new TimeDynamicImagery({
clock: clock,
requestImageFunction: function () {},
reloadFunction: function () {},
});
}).toThrowDeveloperError();
});
it("requestImageFunction is required", function () {
expect(function () {
return new TimeDynamicImagery({
clock: clock,
times: times,
reloadFunction: function () {},
});
}).toThrowDeveloperError();
});
it("reloadFunction is required", function () {
expect(function () {
return new TimeDynamicImagery({
clock: clock,
times: times,
requestImageFunction: function () {},
});
}).toThrowDeveloperError();
});
it("initialization", function () {
var options = {
clock: clock,
times: times,
requestImageFunction: function () {},
reloadFunction: function () {},
};
var timeDynamicImagery = new TimeDynamicImagery(options);
expect(timeDynamicImagery._tileCache).toEqual({});
expect(timeDynamicImagery._tilesRequestedForInterval).toEqual([]);
expect(timeDynamicImagery._clock).toBe(options.clock);
expect(timeDynamicImagery._times).toBe(options.times);
expect(timeDynamicImagery._requestImageFunction).toBe(
options.requestImageFunction
);
expect(timeDynamicImagery._reloadFunction).toBe(options.reloadFunction);
expect(timeDynamicImagery._currentIntervalIndex).toEqual(0);
});
it("changing clock causes reload", function () {
var options = {
clock: clock,
times: times,
requestImageFunction: function () {},
reloadFunction: jasmine.createSpy(),
};
var timeDynamicImagery = new TimeDynamicImagery(options);
timeDynamicImagery.clock = new Clock();
expect(options.reloadFunction).toHaveBeenCalled();
});
it("changing times causes reload", function () {
var options = {
clock: clock,
times: times,
requestImageFunction: function () {},
reloadFunction: jasmine.createSpy(),
};
var timeDynamicImagery = new TimeDynamicImagery(options);
timeDynamicImagery.times = new TimeIntervalCollection();
expect(options.reloadFunction).toHaveBeenCalled();
});
it("clock.tick() causes reload", function () {
var options = {
clock: clock,
times: times,
requestImageFunction: jasmine.createSpy(),
reloadFunction: jasmine.createSpy(),
};
var timeDynamicImagery = new TimeDynamicImagery(options);
var request = new Request();
timeDynamicImagery.checkApproachingInterval(0, 1, 2, request);
clock.currentTime = JulianDate.fromIso8601("2017-04-26T23:59:59Z");
clock.tick();
expect(options.requestImageFunction).not.toHaveBeenCalled();
expect(options.reloadFunction).toHaveBeenCalled();
});
it("clock.tick() causes preload", function () {
var options = {
clock: clock,
times: times,
requestImageFunction: jasmine.createSpy().and.returnValue(when()),
reloadFunction: jasmine.createSpy(),
};
var timeDynamicImagery = new TimeDynamicImagery(options);
options.reloadFunction.calls.reset(); // Constructor calls reload
var request = new Request({
throttle: false,
throttleByServer: true,
type: RequestType.IMAGERY,
});
timeDynamicImagery.checkApproachingInterval(0, 1, 2, request);
clock.currentTime = JulianDate.fromIso8601("2017-04-26T23:59:56Z");
clock.tick();
expect(options.requestImageFunction).toHaveBeenCalledWith(
0,
1,
2,
request,
times.get(1)
);
expect(timeDynamicImagery._tileCache[1]["0-1-2"]).toBeDefined();
expect(options.reloadFunction).not.toHaveBeenCalled();
});
it("checkApproachingInterval causes preload", function () {
var options = {
clock: clock,
times: times,
requestImageFunction: jasmine.createSpy().and.returnValue(when()),
reloadFunction: jasmine.createSpy(),
};
var timeDynamicImagery = new TimeDynamicImagery(options);
options.reloadFunction.calls.reset(); // Constructor calls reload
var request = new Request({
throttle: false,
throttleByServer: true,
type: RequestType.IMAGERY,
});
clock.currentTime = JulianDate.fromIso8601("2017-04-26T23:59:56Z");
timeDynamicImagery.checkApproachingInterval(0, 1, 2, request);
expect(options.requestImageFunction).toHaveBeenCalledWith(
0,
1,
2,
request,
times.get(1)
);
expect(timeDynamicImagery._tileCache[1]["0-1-2"]).toBeDefined();
expect(options.reloadFunction).not.toHaveBeenCalled();
});
it("checkApproachingInterval limits number of requests", function () {
var options = {
clock: clock,
times: times,
requestImageFunction: jasmine.createSpy().and.returnValue(when()),
reloadFunction: jasmine.createSpy(),
};
var timeDynamicImagery = new TimeDynamicImagery(options);
var request = new Request({
throttle: true,
throttleByServer: true,
type: RequestType.IMAGERY,
});
var count = 0;
for (var level = 0; level < 15; ++level) {
for (var x = 0; x < level + 1; ++x) {
for (var y = 0; y < level + 1; ++y) {
timeDynamicImagery.checkApproachingInterval(x, y, level, request);
++count;
if (count === 512) {
count = 256;
}
expect(timeDynamicImagery._tilesRequestedForInterval.length).toEqual(
count
);
expect(
timeDynamicImagery._tilesRequestedForInterval[count - 1].key
).toEqual(x + "-" + y + "-" + level);
}
}
}
});
});