/*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 ] ); }); }); } );