DSDSWeb/static/js/Cesium-1.53/Specs/Widgets/SelectionIndicator/SelectionIndicatorViewModel...

100 lines
3.8 KiB
JavaScript

defineSuite([
'Widgets/SelectionIndicator/SelectionIndicatorViewModel',
'Core/Cartesian2',
'Core/Cartesian3',
'Specs/createScene'
], function(
SelectionIndicatorViewModel,
Cartesian2,
Cartesian3,
createScene) {
'use strict';
var scene;
var selectionIndicatorElement = document.createElement('div');
selectionIndicatorElement.style.width = '20px';
selectionIndicatorElement.style.height = '20px';
var container = document.createElement('div');
container.appendChild(selectionIndicatorElement);
beforeAll(function() {
scene = createScene();
});
afterAll(function() {
scene.destroyForSpecs();
});
it('constructor sets expected values', function() {
var viewModel = new SelectionIndicatorViewModel(scene, selectionIndicatorElement, container);
expect(viewModel.scene).toBe(scene);
expect(viewModel.selectionIndicatorElement).toBe(selectionIndicatorElement);
expect(viewModel.container).toBe(container);
expect(viewModel.computeScreenSpacePosition).toBeDefined();
});
it('throws if scene is undefined', function() {
expect(function() {
return new SelectionIndicatorViewModel(undefined);
}).toThrowDeveloperError();
});
it('throws if selectionIndicatorElement is undefined', function() {
expect(function() {
return new SelectionIndicatorViewModel(scene);
}).toThrowDeveloperError();
});
it('throws if container is undefined', function() {
expect(function() {
return new SelectionIndicatorViewModel(scene, selectionIndicatorElement);
}).toThrowDeveloperError();
});
it('can animate selection element', function() {
var viewModel = new SelectionIndicatorViewModel(scene, selectionIndicatorElement, container);
viewModel.animateAppear();
viewModel.animateDepart();
});
it('can use custom screen space positions', function() {
document.body.appendChild(container);
var viewModel = new SelectionIndicatorViewModel(scene, selectionIndicatorElement, container);
viewModel.showSelection = true;
viewModel.position = new Cartesian3(1.0, 2.0, 3.0);
viewModel.computeScreenSpacePosition = function(position, result) {
return Cartesian2.clone(position, result);
};
viewModel.update();
expect(viewModel._screenPositionX).toBe('-9px'); // Negative half the test size, plus viewModel.position.x (1)
expect(viewModel._screenPositionY).toBe('-8px'); // Negative half the test size, plus viewModel.position.y (2)
document.body.removeChild(container);
});
it('hides the indicator when position is unknown', function() {
var viewModel = new SelectionIndicatorViewModel(scene, selectionIndicatorElement, container);
expect(viewModel.isVisible).toBe(false);
viewModel.showSelection = true;
expect(viewModel.isVisible).toBe(false);
viewModel.position = new Cartesian3(1.0, 2.0, 3.0);
expect(viewModel.isVisible).toBe(true);
viewModel.showSelection = false;
expect(viewModel.isVisible).toBe(false);
});
it('can move the indicator off screen', function() {
document.body.appendChild(container);
var viewModel = new SelectionIndicatorViewModel(scene, selectionIndicatorElement, container);
viewModel.showSelection = true;
viewModel.position = new Cartesian3(1.0, 2.0, 3.0);
viewModel.computeScreenSpacePosition = function(position, result) {
return undefined;
};
viewModel.update();
expect(viewModel._screenPositionX).toBe('-1000px');
expect(viewModel._screenPositionY).toBe('-1000px');
document.body.removeChild(container);
});
}, 'WebGL');