terriajs
Version:
Geospatial data visualization platform.
118 lines (93 loc) • 3.92 kB
JavaScript
;
/*global require*/
var CompositeCatalogItem = require('../../lib/Models/CompositeCatalogItem');
var TerrainCatalogItem = require('../../lib/Models/TerrainCatalogItem');
var Terria = require('../../lib/Models/Terria');
var when = require('terriajs-cesium/Source/ThirdParty/when');
describe('TerrainCatalogItem', function() {
var terria;
var item;
beforeEach(function() {
terria = new Terria({
baseUrl: './'
});
item = new TerrainCatalogItem(terria);
});
it('sets terrainProvider on Cesium scene when enabled', function(done) {
var fakeTerrainProvider = {};
spyOn(item, '_createTerrainProvider').and.returnValue(fakeTerrainProvider);
terria.cesium = {
scene: {
terrainProvider: undefined
}
};
item.isEnabled = true;
when(item.load()).then(function() {
expect(terria.cesium.scene.terrainProvider).toBe(fakeTerrainProvider);
}).then(done).otherwise(done.fail);
});
it('restores previous terrainProvider when disabled', function(done) {
var fakeTerrainProvider = {};
spyOn(item, '_createTerrainProvider').and.returnValue(fakeTerrainProvider);
var originalTerrainProvider = {};
terria.cesium = {
scene: {
terrainProvider: originalTerrainProvider
}
};
item.isEnabled = true;
when(item.load()).then(function() {
expect(terria.cesium.scene.terrainProvider).toBe(fakeTerrainProvider);
item.isEnabled = false;
expect(terria.cesium.scene.terrainProvider).toBe(originalTerrainProvider);
}).then(done).otherwise(done.fail);
});
it('hides other terrainProvider catalog items when enabled', function(done) {
terria.cesium = {
scene: {
terrainProvider: undefined
}
};
var enabledItem = new TerrainCatalogItem(terria);
spyOn(enabledItem, '_createTerrainProvider').and.returnValue({});
enabledItem.isEnabled = true;
when(enabledItem.load()).then(function() {
spyOn(item, '_createTerrainProvider').and.returnValue({});
item.isEnabled = true;
return when(item.load()).then(function() {
expect(enabledItem.isShown).toBe(false);
});
}).then(done).otherwise(done.fail);
});
it('hides CompositeCatalogItem containing terrain when enabled', function(done) {
terria.cesium = {
scene: {
terrainProvider: undefined
}
};
var composite = new CompositeCatalogItem(terria);
var enabledItem = new TerrainCatalogItem(terria);
spyOn(enabledItem, '_createTerrainProvider').and.returnValue({});
composite.add(enabledItem);
composite.isEnabled = true;
when(composite.load()).then(function() {
spyOn(item, '_createTerrainProvider').and.returnValue({});
item.isEnabled = true;
return when(item.load()).then(function() {
expect(composite.isShown).toBe(false);
});
}).then(done).otherwise(done.fail);
});
it('throws when shown in 2D', function(done) {
terria.leaflet = {};
spyOn(item, '_createTerrainProvider').and.returnValue({});
spyOn(terria.error, 'raiseEvent');
item.isEnabled = true;
when(item.load()).then(function() {
expect(terria.error.raiseEvent).toHaveBeenCalled();
expect(item.isShown).toBe(false);
item.isShown = true;
expect(terria.error.raiseEvent.calls.count()).toBe(2);
}).then(done).otherwise(done.fail);
});
});