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
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);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|