DSDSServer2024/build/build.20240805/static/js/Cesium-1.53/Specs/Widgets/BaseLayerPicker/BaseLayerPickerViewModelSpe...

286 lines
9.7 KiB
JavaScript

defineSuite([
'Widgets/BaseLayerPicker/BaseLayerPickerViewModel',
'Core/EllipsoidTerrainProvider',
'Scene/ImageryLayerCollection',
'Widgets/BaseLayerPicker/ProviderViewModel'
], function(
BaseLayerPickerViewModel,
EllipsoidTerrainProvider,
ImageryLayerCollection,
ProviderViewModel) {
'use strict';
function MockGlobe() {
this.imageryLayers = new ImageryLayerCollection();
this.terrainProvider = new EllipsoidTerrainProvider();
}
var testProvider = {
isReady : function() {
return false;
}
};
var testProvider2 = {
isReady : function() {
return false;
}
};
var testProvider3 = {
isReady : function() {
return false;
}
};
var testProviderViewModel = new ProviderViewModel({
name : 'name',
tooltip : 'tooltip',
iconUrl : 'url',
creationFunction : function() {
return testProvider;
}
});
var testProviderViewModel2 = new ProviderViewModel({
name : 'name2',
tooltip : 'tooltip2',
iconUrl : 'url2',
creationFunction : function() {
return [testProvider, testProvider2];
}
});
var testProviderViewModel3 = new ProviderViewModel({
name : 'name3',
tooltip : 'tooltip3',
iconUrl : 'url3',
creationFunction : function() {
return testProvider3;
}
});
it('constructor sets expected values', function() {
var imageryViewModels = [];
var terrainViewModels = [];
var globe = new MockGlobe();
var viewModel = new BaseLayerPickerViewModel({
globe : globe,
imageryProviderViewModels : imageryViewModels,
terrainProviderViewModels : terrainViewModels
});
expect(viewModel.globe).toBe(globe);
expect(viewModel.imageryProviderViewModels.length).toBe(0);
expect(viewModel.terrainProviderViewModels.length).toBe(0);
});
it('separates providers into categories', function() {
var imageryProviders = [
new ProviderViewModel({
name : 'name',
tooltip : 'tooltip',
iconUrl : 'url',
category: 'cat1',
creationFunction : function() {
return testProvider;
}
}),
new ProviderViewModel({
name : 'name',
tooltip : 'tooltip',
iconUrl : 'url',
category: 'cat1',
creationFunction : function() {
return testProvider;
}
}),
new ProviderViewModel({
name : 'name',
tooltip : 'tooltip',
iconUrl : 'url',
category: 'cat2',
creationFunction : function() {
return testProvider;
}
})
];
var terrainProviders = [
new ProviderViewModel({
name : 'name',
tooltip : 'tooltip',
iconUrl : 'url',
category: 'cat1',
creationFunction : function() {
return testProvider;
}
}),
new ProviderViewModel({
name : 'name',
tooltip : 'tooltip',
iconUrl : 'url',
category: 'cat2',
creationFunction : function() {
return testProvider;
}
}),
new ProviderViewModel({
name : 'name',
tooltip : 'tooltip',
iconUrl : 'url',
category: 'cat2',
creationFunction : function() {
return testProvider;
}
})
];
var viewModel = new BaseLayerPickerViewModel({
globe : new MockGlobe(),
imageryProviderViewModels : imageryProviders,
terrainProviderViewModels : terrainProviders
});
expect(viewModel._imageryProviders).toBeDefined();
expect(viewModel._imageryProviders().length).toBe(2);
expect(viewModel._imageryProviders()[0].providers.length).toBe(2);
expect(viewModel._imageryProviders()[0].name).toBe('cat1');
expect(viewModel._imageryProviders()[1].providers.length).toBe(1);
expect(viewModel._imageryProviders()[1].name).toBe('cat2');
expect(viewModel._terrainProviders ).toBeDefined();
expect(viewModel._terrainProviders().length).toBe(2);
expect(viewModel._terrainProviders()[0].providers.length).toBe(1);
expect(viewModel._terrainProviders()[0].name).toBe('cat1');
expect(viewModel._terrainProviders()[1].providers.length).toBe(2);
expect(viewModel._terrainProviders()[1].name).toBe('cat2');
});
it('selecting imagery closes the dropDown', function() {
var imageryViewModels = [testProviderViewModel];
var globe = new MockGlobe();
var viewModel = new BaseLayerPickerViewModel({
globe : globe,
imageryProviderViewModels : imageryViewModels
});
viewModel.dropDownVisible = true;
viewModel.selectedImagery = testProviderViewModel;
expect(viewModel.dropDownVisible).toEqual(false);
});
it('selecting terrain closes the dropDown', function() {
var imageryViewModels = [testProviderViewModel];
var globe = new MockGlobe();
var viewModel = new BaseLayerPickerViewModel({
globe : globe,
imageryProviderViewModels : imageryViewModels
});
viewModel.dropDownVisible = true;
viewModel.selectedTerrain = testProviderViewModel;
expect(viewModel.dropDownVisible).toEqual(false);
});
it('tooltip, buttonImageUrl, and selectedImagery all return expected values', function() {
var imageryViewModels = [testProviderViewModel];
var terrainViewModels = [testProviderViewModel3];
var globe = new MockGlobe();
var viewModel = new BaseLayerPickerViewModel({
globe : globe,
imageryProviderViewModels : imageryViewModels,
terrainProviderViewModels : terrainViewModels
});
viewModel.selectedImagery = testProviderViewModel;
expect(viewModel.buttonTooltip).toEqual(testProviderViewModel.name + '\n' + testProviderViewModel3.name);
viewModel.selectedImagery = undefined;
expect(viewModel.buttonTooltip).toEqual(testProviderViewModel3.name);
viewModel.selectedImagery = testProviderViewModel;
viewModel.selectedTerrain = undefined;
expect(viewModel.buttonTooltip).toEqual(testProviderViewModel.name);
expect(viewModel.buttonImageUrl).toEqual(testProviderViewModel.iconUrl);
});
it('selectedImagery actually sets base layer', function() {
var imageryViewModels = [testProviderViewModel];
var globe = new MockGlobe();
var imageryLayers = globe.imageryLayers;
var viewModel = new BaseLayerPickerViewModel({
globe : globe,
imageryProviderViewModels : imageryViewModels
});
expect(imageryLayers.length).toEqual(1);
viewModel.selectedImagery = testProviderViewModel;
expect(imageryLayers.length).toEqual(1);
expect(imageryLayers.get(0).imageryProvider).toBe(testProvider);
viewModel.selectedImagery = testProviderViewModel2;
expect(imageryLayers.length).toEqual(2);
expect(imageryLayers.get(0).imageryProvider).toBe(testProvider);
expect(imageryLayers.get(1).imageryProvider).toBe(testProvider2);
});
it('selectedTerrain actually sets terrainPRovider', function() {
var terrainProviderViewModels = [testProviderViewModel, testProviderViewModel3];
var globe = new MockGlobe();
var viewModel = new BaseLayerPickerViewModel({
globe : globe,
terrainProviderViewModels : terrainProviderViewModels
});
viewModel.selectedTerrain = testProviderViewModel3;
expect(globe.terrainProvider).toBe(testProvider3);
});
it('settings selectedImagery only removes layers added by view model', function() {
var imageryViewModels = [testProviderViewModel];
var globe = new MockGlobe();
var imageryLayers = globe.imageryLayers;
var viewModel = new BaseLayerPickerViewModel({
globe : globe,
imageryProviderViewModels : imageryViewModels
});
expect(imageryLayers.length).toEqual(1);
viewModel.selectedImagery = testProviderViewModel2;
expect(imageryLayers.length).toEqual(2);
expect(imageryLayers.get(0).imageryProvider).toBe(testProvider);
expect(imageryLayers.get(1).imageryProvider).toBe(testProvider2);
imageryLayers.addImageryProvider(testProvider3, 1);
imageryLayers.remove(imageryLayers.get(0));
viewModel.selectedImagery = undefined;
expect(imageryLayers.length).toEqual(1);
expect(imageryLayers.get(0).imageryProvider).toBe(testProvider3);
});
it('dropDownVisible and toggleDropDown work', function() {
var viewModel = new BaseLayerPickerViewModel({
globe : new MockGlobe()
});
expect(viewModel.dropDownVisible).toEqual(false);
viewModel.toggleDropDown();
expect(viewModel.dropDownVisible).toEqual(true);
viewModel.dropDownVisible = false;
expect(viewModel.dropDownVisible).toEqual(false);
});
it('constructor throws with no globe', function() {
expect(function() {
return new BaseLayerPickerViewModel({});
}).toThrowDeveloperError();
});
});