import { EllipsoidTerrainProvider } from "../../../Source/Cesium.js";
|
import { ImageryLayerCollection } from "../../../Source/Cesium.js";
|
import { BaseLayerPickerViewModel } from "../../../Source/Cesium.js";
|
import { ProviderViewModel } from "../../../Source/Cesium.js";
|
|
describe("Widgets/BaseLayerPicker/BaseLayerPickerViewModel", function () {
|
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();
|
});
|
});
|