DSDSWeb/static/js/Cesium-1.53/Specs/Core/GoogleEarthEnterpriseMetada...

248 lines
9.4 KiB
JavaScript
Raw Normal View History

2024-07-11 18:02:47 +08:00
defineSuite([
'Core/GoogleEarthEnterpriseMetadata',
'Core/decodeGoogleEarthEnterpriseData',
'Core/DefaultProxy',
'Core/defaultValue',
'Core/GoogleEarthEnterpriseTileInformation',
'Core/Math',
'Core/Request',
'Core/Resource',
'ThirdParty/when'
], function(
GoogleEarthEnterpriseMetadata,
decodeGoogleEarthEnterpriseData,
DefaultProxy,
defaultValue,
GoogleEarthEnterpriseTileInformation,
CesiumMath,
Request,
Resource,
when) {
'use strict';
it('tileXYToQuadKey', function() {
expect(GoogleEarthEnterpriseMetadata.tileXYToQuadKey(1, 0, 0)).toEqual('2');
expect(GoogleEarthEnterpriseMetadata.tileXYToQuadKey(1, 2, 1)).toEqual('02');
expect(GoogleEarthEnterpriseMetadata.tileXYToQuadKey(3, 5, 2)).toEqual('021');
expect(GoogleEarthEnterpriseMetadata.tileXYToQuadKey(4, 7, 2)).toEqual('100');
});
it('quadKeyToTileXY', function() {
expect(GoogleEarthEnterpriseMetadata.quadKeyToTileXY('2')).toEqual({
x : 1,
y : 0,
level : 0
});
expect(GoogleEarthEnterpriseMetadata.quadKeyToTileXY('02')).toEqual({
x : 1,
y : 2,
level : 1
});
expect(GoogleEarthEnterpriseMetadata.quadKeyToTileXY('021')).toEqual({
x : 3,
y : 5,
level : 2
});
expect(GoogleEarthEnterpriseMetadata.quadKeyToTileXY('100')).toEqual({
x : 4,
y : 7,
level : 2
});
});
it('decode', function() {
CesiumMath.setRandomNumberSeed(123123);
var key = new Uint8Array(1025);
var data = new Uint8Array(1025);
for (var i = 0; i < 1025; ++i) {
key[i] = Math.floor(CesiumMath.nextRandomNumber() * 256);
data[i] = Math.floor(CesiumMath.nextRandomNumber() * 256);
}
var keyBuffer = key.buffer.slice(0, 1024); // Key length should be divisible by 4
var dataBuffer = data.buffer.slice();
var a = new Uint8Array(dataBuffer);
decodeGoogleEarthEnterpriseData(keyBuffer, dataBuffer);
expect(a).not.toEqual(data);
// For the algorithm encode/decode are the same
decodeGoogleEarthEnterpriseData(keyBuffer, dataBuffer);
expect(a).toEqual(data);
});
it('decode requires key' , function() {
var data = new Uint8Array(3);
expect(function() {
decodeGoogleEarthEnterpriseData(undefined, data.buffer);
}).toThrowDeveloperError();
});
it('decode requires data' , function() {
var key = new Uint8Array(4);
expect(function() {
decodeGoogleEarthEnterpriseData(key.buffer);
}).toThrowDeveloperError();
});
it('decode throws if key length isn\'t greater than 0 and a multiple 4' , function() {
var key;
var data = new Uint8Array(3);
key = new Uint8Array(0);
expect(function() {
decodeGoogleEarthEnterpriseData(key.buffer, data.buffer);
}).toThrowRuntimeError();
key = new Uint8Array(1);
expect(function() {
decodeGoogleEarthEnterpriseData(key.buffer, data.buffer);
}).toThrowRuntimeError();
key = new Uint8Array(2);
expect(function() {
decodeGoogleEarthEnterpriseData(key.buffer, data.buffer);
}).toThrowRuntimeError();
key = new Uint8Array(3);
expect(function() {
decodeGoogleEarthEnterpriseData(key.buffer, data.buffer);
}).toThrowRuntimeError();
});
it('populateSubtree', function() {
var quad = '0123';
var index = 0;
spyOn(GoogleEarthEnterpriseMetadata.prototype, 'getQuadTreePacket').and.callFake(function(quadKey, version, request) {
quadKey = defaultValue(quadKey, '') + index.toString();
this._tileInfo[quadKey] = new GoogleEarthEnterpriseTileInformation(0xFF, 1, 1, 1);
index = (index + 1) % 4;
return when();
});
var metadata = new GoogleEarthEnterpriseMetadata({
url : 'http://test.server'
});
var request = new Request({
throttle : true
});
return metadata.readyPromise
.then(function() {
var tileXY = GoogleEarthEnterpriseMetadata.quadKeyToTileXY(quad);
return metadata.populateSubtree(tileXY.x, tileXY.y, tileXY.level, request);
})
.then(function() {
expect(GoogleEarthEnterpriseMetadata.prototype.getQuadTreePacket.calls.count()).toEqual(4);
expect(GoogleEarthEnterpriseMetadata.prototype.getQuadTreePacket).toHaveBeenCalledWith('', 1);
expect(GoogleEarthEnterpriseMetadata.prototype.getQuadTreePacket).toHaveBeenCalledWith('0', 1, request);
expect(GoogleEarthEnterpriseMetadata.prototype.getQuadTreePacket).toHaveBeenCalledWith('01', 1, request);
expect(GoogleEarthEnterpriseMetadata.prototype.getQuadTreePacket).toHaveBeenCalledWith('012', 1, request);
var tileInfo = metadata._tileInfo;
expect(tileInfo['0']).toBeDefined();
expect(tileInfo['01']).toBeDefined();
expect(tileInfo['012']).toBeDefined();
expect(tileInfo['0123']).toBeDefined();
});
});
it('resolves readyPromise', function() {
var baseurl = 'http://fake.fake.invalid/';
var req = 0;
spyOn(Resource._Implementations, 'loadWithXhr').and.callFake(function(url, responseType, method, data, headers, deferred, overrideMimeType) {
expect(responseType).toEqual('arraybuffer');
if (req === 0) {
expect(url).toEqual(baseurl + 'dbRoot.v5?output=proto');
deferred.reject(); // Reject dbRoot request and use defaults
} else {
expect(url).toEqual(baseurl + 'flatfile?q2-0-q.1');
Resource._DefaultImplementations.loadWithXhr('Data/GoogleEarthEnterprise/gee.metadata', responseType, method, data, headers, deferred);
}
++req;
});
var provider = new GoogleEarthEnterpriseMetadata({
url : baseurl
});
return provider.readyPromise.then(function(result) {
expect(result).toBe(true);
expect(provider.imageryPresent).toBe(true);
expect(provider.protoImagery).toBeUndefined();
expect(provider.terrainPresent).toBe(true);
expect(provider.negativeAltitudeThreshold).toBe(CesiumMath.EPSILON12);
expect(provider.negativeAltitudeExponentBias).toBe(32);
expect(provider.providers).toEqual({});
var tileInfo = provider._tileInfo['0'];
expect(tileInfo).toBeDefined();
expect(tileInfo._bits).toEqual(0x40);
expect(tileInfo.cnodeVersion).toEqual(2);
expect(tileInfo.imageryVersion).toEqual(1);
expect(tileInfo.terrainVersion).toEqual(1);
expect(tileInfo.ancestorHasTerrain).toEqual(false);
expect(tileInfo.terrainState).toBeUndefined();
});
});
it('resolves readyPromise with Resource', function() {
var baseurl = 'http://fake.fake.invalid/';
var resource = new Resource({
url : baseurl
});
var req = 0;
spyOn(Resource._Implementations, 'loadWithXhr').and.callFake(function(url, responseType, method, data, headers, deferred, overrideMimeType) {
expect(responseType).toEqual('arraybuffer');
if (req === 0) {
expect(url).toEqual(baseurl + 'dbRoot.v5?output=proto');
deferred.reject(); // Reject dbRoot request and use defaults
} else {
expect(url).toEqual(baseurl + 'flatfile?q2-0-q.1');
Resource._DefaultImplementations.loadWithXhr('Data/GoogleEarthEnterprise/gee.metadata', responseType, method, data, headers, deferred);
}
++req;
});
var provider = new GoogleEarthEnterpriseMetadata(resource);
return provider.readyPromise.then(function(result) {
expect(result).toBe(true);
expect(provider.imageryPresent).toBe(true);
expect(provider.protoImagery).toBeUndefined();
expect(provider.terrainPresent).toBe(true);
expect(provider.negativeAltitudeThreshold).toBe(CesiumMath.EPSILON12);
expect(provider.negativeAltitudeExponentBias).toBe(32);
expect(provider.providers).toEqual({});
var tileInfo = provider._tileInfo['0'];
expect(tileInfo).toBeDefined();
expect(tileInfo._bits).toEqual(0x40);
expect(tileInfo.cnodeVersion).toEqual(2);
expect(tileInfo.imageryVersion).toEqual(1);
expect(tileInfo.terrainVersion).toEqual(1);
expect(tileInfo.ancestorHasTerrain).toEqual(false);
expect(tileInfo.terrainState).toBeUndefined();
});
});
it('rejects readyPromise on error', function() {
var url = 'host.invalid/';
var provider = new GoogleEarthEnterpriseMetadata({
url : url
});
return provider.readyPromise.then(function() {
fail('should not resolve');
}).otherwise(function(e) {
expect(e.message).toContain(url);
});
});
});