286 lines
9.7 KiB
JavaScript
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();
|
||
|
|
});
|
||
|
|
});
|