100 lines
3.8 KiB
JavaScript
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');
|