openmct/platform/features/plot/test/SubPlotSpec.js
Victor Woeltjen e6f1328d9d [Plot] Update specs
Update specs with minor changes related to using
telemetrySubscriber to populate plot with streaming
data, WTD-751 and WTD-784.
2015-02-02 15:44:36 -08:00

156 lines
5.6 KiB
JavaScript

/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/
/**
* MergeModelsSpec. Created by vwoeltje on 11/6/14.
*/
define(
["../src/SubPlot"],
function (SubPlot) {
"use strict";
describe("A sub-plot", function () {
var mockDomainObject,
mockPanZoomStack,
mockFormatter,
mockElement,
testDomainObjects,
testOrigin,
testDimensions,
subplot;
beforeEach(function () {
mockDomainObject = jasmine.createSpyObj(
"domainObject",
[ "getId", "getModel", "getCapability" ]
);
mockPanZoomStack = jasmine.createSpyObj(
"panZoomStack",
[
"getDepth",
"pushPanZoom",
"popPanZoom",
"setBasePanZoom",
"clearPanZoom",
"getPanZoom",
"getOrigin",
"getDimensions"
]
);
mockFormatter = jasmine.createSpyObj(
"formatter",
[ "formatDomainValue", "formatRangeValue" ]
);
mockElement = jasmine.createSpyObj(
"element",
[ "getBoundingClientRect" ]
);
testOrigin = [ 5, 10 ];
testDimensions = [ 3000, 1000 ];
testDomainObjects = [ mockDomainObject, mockDomainObject ];
mockPanZoomStack.getOrigin.andReturn(testOrigin);
mockPanZoomStack.getDimensions.andReturn(testDimensions);
mockPanZoomStack.getPanZoom.andReturn(
{ origin: testOrigin, dimensions: testDimensions }
);
mockElement.getBoundingClientRect.andReturn(
{ left: 10, top: 20, width: 100, height: 100 }
);
subplot = new SubPlot(
testDomainObjects,
mockPanZoomStack,
mockFormatter
);
});
it("provides a getter for its plotted objects", function () {
expect(subplot.getTelemetryObjects())
.toEqual(testDomainObjects);
});
it("exposes tick marks", function () {
// Just test availability; details are tested
// in PlotTickFormatter
expect(Array.isArray(subplot.getDomainTicks()))
.toBeTruthy();
expect(Array.isArray(subplot.getRangeTicks()))
.toBeTruthy();
});
it("allows hovering state to be tracked", function () {
expect(subplot.isHovering()).toBeFalsy();
expect(subplot.isHovering(true)).toBeTruthy();
expect(subplot.isHovering()).toBeTruthy();
expect(subplot.isHovering(false)).toBeFalsy();
expect(subplot.isHovering()).toBeFalsy();
});
it("provides hovering coordinates", function () {
// Should be empty when not hovering
expect(subplot.getHoverCoordinates())
.toBeUndefined();
// Start hovering
subplot.hover({ target: mockElement });
// Should now have coordinates to display
expect(subplot.getHoverCoordinates())
.toEqual(jasmine.any(String));
});
it("supports marquee zoom", function () {
expect(mockPanZoomStack.pushPanZoom).not.toHaveBeenCalled();
// Simulate a marquee zoom. Note that the mockElement
// is 100 by 100 and starts at 10,20
subplot.startMarquee({
target: mockElement,
clientX: 60,
clientY: 45
});
subplot.hover({
target: mockElement,
clientX: 75,
clientY: 85
});
subplot.endMarquee({
target: mockElement,
clientX: 80,
clientY: 95
});
// ... so the origin should be 50%,25% into current dimensions,
// and new dimensions should be 20%,50% thereof
expect(mockPanZoomStack.pushPanZoom).toHaveBeenCalledWith(
[
testOrigin[0] + testDimensions[0] * 0.50,
testOrigin[1] + testDimensions[1] * 0.25
],
[
testDimensions[0] * 0.20,
testDimensions[1] * 0.50
]
);
});
it("provides access to a drawable object", function () {
expect(typeof subplot.getDrawingObject()).toEqual('object');
});
it("allows a domain offset to be provided", function () {
// Domain object is needed to adjust canvas coordinates
// to avoid loss-of-precision associated with converting
// to 32 bit floats.
subplot.setDomainOffset(3);
subplot.update();
// Should have adjusted the origin accordingly
expect(subplot.getDrawingObject().origin[0])
.toEqual(2);
});
});
}
);