@pie-lib/plot 4.0.13 → 4.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-draggable.test.js","names":["_react","require","_react2","_interopRequireDefault","_gridDraggable","_utils","_d3Selection","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","jest","mock","pointer","fn","mockReturnValue","mockDraggableCoreProps","DraggableCore","props","children","mockStartEvent","overrides","undefined","clientX","clientY","target","addEventListener","removeEventListener","getDelta","xyFn","out","n","invert","getGraphProps","scale","x","y","snap","domain","min","max","step","range","size","width","height","getRootNode","ownerSVGElement","getBoundingClientRect","left","top","right","bottom","describe","defaultOptions","defaultProps","beforeEach","anchorPoint","bounds","fromDelta","graphProps","it","Comp","gridDraggable","createElement","_render","render","container","expect","firstChild","toBeInTheDocument","_render2","grid","toEqual","onDragStart","onStart","toHaveBeenCalled","onDrag","options","deltaX","deltaY","toHaveBeenCalledWith","not","mockClear","onDragStop","onStop","stopPropagation","onClick","propsWithGraphProps"],"sources":["../../src/__tests__/grid-draggable.test.jsx"],"sourcesContent":["import { render } from '@testing-library/react';\nimport React from 'react';\nimport { gridDraggable } from '../grid-draggable';\nimport { getDelta } from '../utils';\nimport { pointer } from 'd3-selection';\n\njest.mock('d3-selection', () => ({\n pointer: jest.fn().mockReturnValue([0, 0]),\n}));\n\nlet mockDraggableCoreProps;\njest.mock('../draggable', () => ({\n DraggableCore: (props) => {\n // Store the props so tests can call the handlers\n mockDraggableCoreProps = props;\n return props.children;\n },\n}));\n\n// Reusable mock start event with a target that supports addEventListener/removeEventListener\nconst mockStartEvent = (overrides = {}) => ({\n clientX: 0,\n clientY: 0,\n target: { addEventListener: jest.fn(), removeEventListener: jest.fn() },\n ...overrides,\n});\n\njest.mock('../utils', () => ({\n getDelta: jest.fn(),\n}));\n\nconst xyFn = () => {\n const out = jest.fn((n) => n);\n out.invert = jest.fn((n) => n);\n return out;\n};\n\nconst getGraphProps = () => ({\n scale: {\n x: xyFn(),\n y: xyFn(),\n },\n snap: {\n x: xyFn(),\n y: xyFn(),\n },\n domain: {\n min: 0,\n max: 1,\n step: 1,\n },\n range: {\n min: 0,\n max: 1,\n step: 1,\n },\n size: {\n width: 500,\n height: 500,\n },\n getRootNode: () => ({\n ownerSVGElement: null,\n getBoundingClientRect: () => ({\n left: 0,\n top: 0,\n right: 100,\n bottom: 100,\n }),\n }),\n});\n\ndescribe('gridDraggable', () => {\n let defaultOptions;\n let defaultProps;\n\n beforeEach(() => {\n mockDraggableCoreProps = null;\n defaultOptions = {\n anchorPoint: jest.fn().mockReturnValue({ x: 0, y: 0 }),\n bounds: jest.fn().mockReturnValue({ left: 0, top: 0, bottom: 0, right: 0 }),\n fromDelta: jest.fn(),\n };\n\n defaultProps = {\n graphProps: getGraphProps(),\n };\n });\n\n it('renders regular component', () => {\n const Comp = gridDraggable(defaultOptions)(() => <div>Test</div>);\n const { container } = render(<Comp {...defaultProps} />);\n expect(container.firstChild).toBeInTheDocument();\n });\n\n it('renders with decimal domain and range', () => {\n const props = {\n ...defaultProps,\n graphProps: {\n ...getGraphProps(),\n domain: {\n min: -1.5,\n max: 1.6,\n step: 0.3,\n },\n range: {\n min: -2,\n max: 3,\n step: 0.2,\n },\n },\n };\n const Comp = gridDraggable(defaultOptions)(() => <div>Test</div>);\n const { container } = render(<Comp {...props} />);\n expect(container.firstChild).toBeInTheDocument();\n });\n\n describe('logic', () => {\n describe('grid calculation', () => {\n it('passes correct grid to DraggableCore based on domain and range step', () => {\n const Comp = gridDraggable(defaultOptions)(() => <div>Test</div>);\n render(<Comp {...defaultProps} />);\n\n // Grid is calculated as: scale.x(domain.step) - scale.x(0)\n // With our mock xyFn that returns n, this is: step - 0 = step\n expect(mockDraggableCoreProps.grid).toEqual([1, 1]);\n });\n\n it('calculates grid with decimal steps', () => {\n const props = {\n ...defaultProps,\n graphProps: {\n ...getGraphProps(),\n domain: { min: -1.5, max: 1.6, step: 0.3 },\n range: { min: -2, max: 3, step: 0.2 },\n },\n };\n const Comp = gridDraggable(defaultOptions)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n expect(mockDraggableCoreProps.grid).toEqual([0.3, 0.2]);\n });\n });\n\n describe('onStart', () => {\n it('calls onDragStart handler when drag starts', () => {\n const onDragStart = jest.fn();\n const props = { ...defaultProps, onDragStart };\n const Comp = gridDraggable(defaultOptions)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n // Simulate drag start\n mockDraggableCoreProps.onStart(mockStartEvent({ clientX: 100, clientY: 100 }));\n\n expect(onDragStart).toHaveBeenCalled();\n });\n });\n\n describe('onDrag', () => {\n it('calls onDrag callback with result from fromDelta', () => {\n const onDrag = jest.fn();\n const fromDelta = jest.fn().mockReturnValue('delta-result');\n const bounds = jest.fn().mockReturnValue({ left: -100, top: -100, bottom: 100, right: 100 });\n const options = { ...defaultOptions, fromDelta, bounds };\n const props = { ...defaultProps, onDrag };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n // Set up drag start state\n mockDraggableCoreProps.onStart(mockStartEvent());\n\n // Simulate drag\n mockDraggableCoreProps.onDrag({}, { deltaX: 10, deltaY: 10 });\n\n expect(fromDelta).toHaveBeenCalled();\n expect(onDrag).toHaveBeenCalledWith('delta-result');\n });\n\n it('does not call onDrag when no onDrag handler is provided', () => {\n const fromDelta = jest.fn();\n const options = { ...defaultOptions, fromDelta };\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...defaultProps} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n mockDraggableCoreProps.onDrag({}, { deltaX: 10, deltaY: 10 });\n\n expect(fromDelta).not.toHaveBeenCalled();\n });\n\n describe('bounds checking', () => {\n it('does not call onDrag when dragging left beyond left bound', () => {\n const onDrag = jest.fn();\n const bounds = jest.fn().mockReturnValue({ left: 0, top: 0, bottom: 0, right: 0 });\n const fromDelta = jest.fn().mockReturnValue('result');\n const options = { ...defaultOptions, bounds, fromDelta };\n const props = { ...defaultProps, onDrag };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n // deltaX < 0 and deltaX < scaled bounds.left (0), so -10 < 0 triggers early return\n mockDraggableCoreProps.onDrag({}, { deltaX: -10, deltaY: 0 });\n\n expect(onDrag).not.toHaveBeenCalled();\n });\n\n it('does not call onDrag when dragging right beyond right bound', () => {\n const onDrag = jest.fn();\n const bounds = jest.fn().mockReturnValue({ left: 0, top: 0, bottom: 0, right: 0 });\n const fromDelta = jest.fn().mockReturnValue('result');\n const options = { ...defaultOptions, bounds, fromDelta };\n const props = { ...defaultProps, onDrag };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n // deltaX > 0 and deltaX > scaled bounds.right (0), so 10 > 0 triggers early return\n mockDraggableCoreProps.onDrag({}, { deltaX: 10, deltaY: 0 });\n\n expect(onDrag).not.toHaveBeenCalled();\n });\n\n it('does not call onDrag when dragging up beyond top bound', () => {\n const onDrag = jest.fn();\n const bounds = jest.fn().mockReturnValue({ left: -100, top: 0, bottom: 0, right: 100 });\n const fromDelta = jest.fn().mockReturnValue('result');\n const options = { ...defaultOptions, bounds, fromDelta };\n const props = { ...defaultProps, onDrag };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n // deltaY < 0 and deltaY < scaled bounds.top (0), so -10 < 0 triggers early return\n mockDraggableCoreProps.onDrag({}, { deltaX: 0, deltaY: -10 });\n\n expect(onDrag).not.toHaveBeenCalled();\n });\n\n it('does not call onDrag when dragging down beyond bottom bound', () => {\n const onDrag = jest.fn();\n const bounds = jest.fn().mockReturnValue({ left: -100, top: -100, bottom: 0, right: 100 });\n const fromDelta = jest.fn().mockReturnValue('result');\n const options = { ...defaultOptions, bounds, fromDelta };\n const props = { ...defaultProps, onDrag };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n // deltaY > 0 and deltaY > scaled bounds.bottom (0), so 10 > 0 triggers early return\n mockDraggableCoreProps.onDrag({}, { deltaX: 0, deltaY: 10 });\n\n expect(onDrag).not.toHaveBeenCalled();\n });\n\n it('calls onDrag when dragging within bounds', () => {\n const onDrag = jest.fn();\n const bounds = jest.fn().mockReturnValue({ left: -100, top: -100, bottom: 100, right: 100 });\n const fromDelta = jest.fn().mockReturnValue('result');\n const options = { ...defaultOptions, bounds, fromDelta };\n const props = { ...defaultProps, onDrag };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n // All bound checks pass: deltaX (-10) is NOT < bounds.left (-100) and NOT > bounds.right (100)\n // Similarly for deltaY\n mockDraggableCoreProps.onDrag({}, { deltaX: -10, deltaY: 10 });\n\n expect(onDrag).toHaveBeenCalled();\n });\n });\n\n describe('skipDragOutsideOfBounds', () => {\n it('skips drag when moving left and x is below domain.min', () => {\n const onDrag = jest.fn();\n const graphProps = {\n ...getGraphProps(),\n domain: { min: -5, max: 5, step: 1 },\n range: { min: -5, max: 5, step: 1 },\n };\n graphProps.scale.x.invert = jest.fn().mockReturnValue(-6); // Below min\n\n const props = { ...defaultProps, graphProps, onDrag };\n const bounds = jest.fn().mockReturnValue({ left: 100, top: 100, bottom: 100, right: 100 });\n const options = { ...defaultOptions, bounds };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n mockDraggableCoreProps.onDrag({}, { deltaX: 1, deltaY: 0 });\n\n expect(onDrag).not.toHaveBeenCalled();\n });\n\n it('skips drag when moving right and x is above domain.max', () => {\n const onDrag = jest.fn();\n const graphProps = {\n ...getGraphProps(),\n domain: { min: -5, max: 5, step: 1 },\n range: { min: -5, max: 5, step: 1 },\n };\n graphProps.scale.x.invert = jest.fn().mockReturnValue(6); // Above max\n\n const props = { ...defaultProps, graphProps, onDrag };\n const bounds = jest.fn().mockReturnValue({ left: 100, top: 100, bottom: 100, right: 100 });\n const options = { ...defaultOptions, bounds };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n mockDraggableCoreProps.onDrag({}, { deltaX: -1, deltaY: 0 });\n\n expect(onDrag).not.toHaveBeenCalled();\n });\n\n it('skips drag when moving up and y is above range.max', () => {\n const onDrag = jest.fn();\n const graphProps = {\n ...getGraphProps(),\n domain: { min: -5, max: 5, step: 1 },\n range: { min: -5, max: 5, step: 1 },\n };\n graphProps.scale.y.invert = jest.fn().mockReturnValue(6); // Above max\n\n const props = { ...defaultProps, graphProps, onDrag };\n const bounds = jest.fn().mockReturnValue({ left: 100, top: 100, bottom: 100, right: 100 });\n const options = { ...defaultOptions, bounds };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n mockDraggableCoreProps.onDrag({}, { deltaX: 0, deltaY: 1 });\n\n expect(onDrag).not.toHaveBeenCalled();\n });\n\n it('skips drag when moving down and y is below range.min', () => {\n const onDrag = jest.fn();\n const graphProps = {\n ...getGraphProps(),\n domain: { min: -5, max: 5, step: 1 },\n range: { min: -5, max: 5, step: 1 },\n };\n graphProps.scale.y.invert = jest.fn().mockReturnValue(-6); // Below min\n\n const props = { ...defaultProps, graphProps, onDrag };\n const bounds = jest.fn().mockReturnValue({ left: 100, top: 100, bottom: 100, right: 100 });\n const options = { ...defaultOptions, bounds };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n mockDraggableCoreProps.onDrag({}, { deltaX: 0, deltaY: -1 });\n\n expect(onDrag).not.toHaveBeenCalled();\n });\n\n it('allows drag when within domain and range', () => {\n const onDrag = jest.fn();\n const graphProps = {\n ...getGraphProps(),\n domain: { min: -5, max: 5, step: 1 },\n range: { min: -5, max: 5, step: 1 },\n };\n graphProps.scale.x.invert = jest.fn().mockReturnValue(3); // Within bounds\n graphProps.scale.y.invert = jest.fn().mockReturnValue(2); // Within bounds\n\n const props = { ...defaultProps, graphProps, onDrag };\n const bounds = jest.fn().mockReturnValue({ left: -100, top: -100, bottom: 100, right: 100 });\n const options = { ...defaultOptions, bounds };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n mockDraggableCoreProps.onDrag({}, { deltaX: 1, deltaY: -1 });\n\n expect(onDrag).toHaveBeenCalled();\n });\n });\n });\n\n describe('getDelta and applyDelta', () => {\n it('calls utils.getDelta when processing drag', () => {\n getDelta.mockClear();\n const onDrag = jest.fn();\n const props = { ...defaultProps, onDrag };\n const bounds = jest.fn().mockReturnValue({ left: -100, top: -100, bottom: 100, right: 100 });\n const options = { ...defaultOptions, bounds };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n mockDraggableCoreProps.onDrag({}, { deltaX: 10, deltaY: 10 });\n\n expect(getDelta).toHaveBeenCalled();\n });\n\n it('calls fromDelta with result from getDelta', () => {\n const fromDelta = jest.fn();\n getDelta.mockReturnValue({ x: 5, y: 5 });\n const bounds = jest.fn().mockReturnValue({ left: -100, top: -100, bottom: 100, right: 100 });\n const options = { ...defaultOptions, fromDelta, bounds };\n const props = { ...defaultProps, onDrag: jest.fn() };\n\n const Comp = gridDraggable(options)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n mockDraggableCoreProps.onStart(mockStartEvent());\n mockDraggableCoreProps.onDrag({}, { deltaX: 10, deltaY: 10 });\n\n expect(fromDelta).toHaveBeenCalled();\n });\n });\n\n describe('onStop', () => {\n it('calls onDragStop when drag stops', () => {\n const onDragStop = jest.fn();\n const props = { ...defaultProps, onDragStop };\n\n const Comp = gridDraggable(defaultOptions)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n // Start to set up state\n mockDraggableCoreProps.onStart(mockStartEvent());\n\n // Stop with large movement (not tiny)\n mockDraggableCoreProps.onStop({ clientX: 100, clientY: 100, stopPropagation: jest.fn() }, {});\n\n expect(onDragStop).toHaveBeenCalled();\n });\n\n it('calls onClick instead of onDragStop when movement is tiny', () => {\n const onClick = jest.fn();\n const onDragStop = jest.fn();\n const props = { ...defaultProps, onClick, onDragStop };\n\n pointer.mockReturnValue([0, 0]);\n\n const Comp = gridDraggable(defaultOptions)(() => <div>Test</div>);\n render(<Comp {...props} />);\n\n // Start and stop at almost the same position (tiny movement)\n // Grid is 1x1, tiny threshold is grid/10 = 0.1\n mockDraggableCoreProps.onStart(mockStartEvent());\n mockDraggableCoreProps.onStop({ clientX: 0.05, clientY: 0.05, target: {}, stopPropagation: jest.fn() }, {});\n\n expect(onClick).toHaveBeenCalledWith({ x: 0, y: 0 });\n });\n\n it('calls onClick with snapped coordinates', () => {\n const onClick = jest.fn();\n const props = { ...defaultProps, onClick };\n const graphProps = getGraphProps();\n graphProps.scale.x.invert = jest.fn().mockReturnValue(1.7);\n graphProps.scale.y.invert = jest.fn().mockReturnValue(2.3);\n graphProps.snap.x = jest.fn().mockReturnValue(2);\n graphProps.snap.y = jest.fn().mockReturnValue(2);\n\n pointer.mockReturnValue([1.7, 2.3]);\n\n const propsWithGraphProps = { ...props, graphProps };\n const Comp = gridDraggable(defaultOptions)(() => <div>Test</div>);\n render(<Comp {...propsWithGraphProps} />);\n\n // Start and stop at almost the same position (tiny movement)\n mockDraggableCoreProps.onStart(mockStartEvent());\n mockDraggableCoreProps.onStop({ clientX: 0.05, clientY: 0.05, target: {}, stopPropagation: jest.fn() }, {});\n\n expect(graphProps.snap.x).toHaveBeenCalledWith(1.7);\n expect(graphProps.snap.y).toHaveBeenCalledWith(2.3);\n expect(onClick).toHaveBeenCalledWith({ x: 2, y: 2 });\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
+ var _react = require("@testing-library/react");
6
+ var _react2 = _interopRequireDefault(require("react"));
7
+ var _root = require("../root");
8
+ var _d3Selection = require("d3-selection");
9
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
+ jest.mock('d3-selection', function () {
12
+ return {
13
+ select: jest.fn(),
14
+ pointer: jest.fn()
15
+ };
16
+ });
17
+ var scaleMock = function scaleMock() {
18
+ var fn = jest.fn(function (n) {
19
+ return n;
20
+ });
21
+ fn.invert = jest.fn(function (n) {
22
+ return n;
23
+ });
24
+ return fn;
25
+ };
26
+ var graphProps = function graphProps() {
27
+ return {
28
+ scale: {
29
+ x: scaleMock(),
30
+ y: scaleMock()
31
+ },
32
+ snap: {
33
+ x: jest.fn(function (n) {
34
+ return n;
35
+ }),
36
+ y: jest.fn(function (n) {
37
+ return n;
38
+ })
39
+ },
40
+ domain: {
41
+ min: 0,
42
+ max: 1,
43
+ step: 1
44
+ },
45
+ range: {
46
+ min: 0,
47
+ max: 1,
48
+ step: 1
49
+ },
50
+ size: {
51
+ width: 400,
52
+ height: 400
53
+ }
54
+ };
55
+ };
56
+ describe('root', function () {
57
+ var mockOn;
58
+ var defaultProps;
59
+ beforeEach(function () {
60
+ mockOn = jest.fn();
61
+ _d3Selection.select.mockReturnValue({
62
+ on: mockOn
63
+ });
64
+ _d3Selection.pointer.mockReturnValue([0, 0]);
65
+ defaultProps = {
66
+ classes: {},
67
+ graphProps: graphProps()
68
+ };
69
+ });
70
+ afterEach(function () {
71
+ (0, _react.cleanup)();
72
+ jest.clearAllMocks();
73
+ });
74
+ it('renders with children', function () {
75
+ var _render = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, defaultProps, "hi")),
76
+ container = _render.container,
77
+ getByText = _render.getByText;
78
+ expect(container.firstChild).toBeInTheDocument();
79
+ expect(getByText('hi')).toBeInTheDocument();
80
+ });
81
+ describe('logic', function () {
82
+ describe('mousemove', function () {
83
+ describe('mount/unmount', function () {
84
+ it('adds mousemove listener on componentDidMount', function () {
85
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, defaultProps, "hi"));
86
+
87
+ // Verify that select was called with the g element
88
+ expect(_d3Selection.select).toHaveBeenCalled();
89
+
90
+ // Verify that on() was called with 'mousemove' and a function
91
+ expect(mockOn).toHaveBeenCalledWith('mousemove', expect.any(Function));
92
+ });
93
+ it('removes mousemove listener on componentWillUnmount', function () {
94
+ var _render2 = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, defaultProps, "hi")),
95
+ unmount = _render2.unmount;
96
+
97
+ // Clear previous calls to isolate unmount behavior
98
+ mockOn.mockClear();
99
+ _d3Selection.select.mockClear();
100
+ unmount();
101
+
102
+ // Verify that select was called during unmount
103
+ expect(_d3Selection.select).toHaveBeenCalled();
104
+
105
+ // Verify that on() was called with 'mousemove' and null to remove the listener
106
+ expect(mockOn).toHaveBeenCalledWith('mousemove', null);
107
+ });
108
+ });
109
+ describe('mouseMove function', function () {
110
+ it('calls pointer with correct arguments', function () {
111
+ var onMouseMove = jest.fn();
112
+ var gp = graphProps();
113
+ var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
114
+ onMouseMove: onMouseMove,
115
+ graphProps: gp
116
+ });
117
+ var mockNode = document.createElement('div');
118
+ var mockEvent = {
119
+ clientX: 10,
120
+ clientY: 20
121
+ };
122
+ var mockSelection = {
123
+ _groups: [[mockNode]],
124
+ node: function node() {
125
+ return mockNode;
126
+ }
127
+ };
128
+
129
+ // Mock select to return our mockSelection
130
+ _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
131
+ on: function on(event, handler) {
132
+ mockOn(event, handler);
133
+ // When 'mousemove' is registered, immediately test it
134
+ if (event === 'mousemove' && handler) {
135
+ _d3Selection.pointer.mockReturnValue([10, 20]);
136
+ // Handler is bound with mockSelection as first arg, so call with event
137
+ handler(mockEvent);
138
+ }
139
+ }
140
+ }));
141
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
142
+
143
+ // Verify pointer was called with the event and correct node
144
+ expect(_d3Selection.pointer).toHaveBeenCalledWith(mockEvent, mockNode);
145
+ });
146
+ it('calls scale.x.invert and scale.y.invert', function () {
147
+ var onMouseMove = jest.fn();
148
+ var gp = graphProps();
149
+ var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
150
+ onMouseMove: onMouseMove,
151
+ graphProps: gp
152
+ });
153
+ var mockNode = document.createElement('div');
154
+ var mockEvent = {
155
+ clientX: 15,
156
+ clientY: 25
157
+ };
158
+ var mockSelection = {
159
+ _groups: [[mockNode]],
160
+ node: function node() {
161
+ return mockNode;
162
+ }
163
+ };
164
+ _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
165
+ on: function on(event, handler) {
166
+ mockOn(event, handler);
167
+ if (event === 'mousemove' && handler) {
168
+ _d3Selection.pointer.mockReturnValue([15, 25]);
169
+ handler(mockEvent);
170
+ }
171
+ }
172
+ }));
173
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
174
+ expect(gp.scale.x.invert).toHaveBeenCalledWith(15);
175
+ expect(gp.scale.y.invert).toHaveBeenCalledWith(25);
176
+ });
177
+ it('calls snap.x and snap.y with inverted coordinates', function () {
178
+ var onMouseMove = jest.fn();
179
+ var gp = graphProps();
180
+ gp.scale.x.invert = jest.fn().mockReturnValue(5);
181
+ gp.scale.y.invert = jest.fn().mockReturnValue(10);
182
+ var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
183
+ onMouseMove: onMouseMove,
184
+ graphProps: gp
185
+ });
186
+ var mockNode = document.createElement('div');
187
+ var mockEvent = {
188
+ clientX: 100,
189
+ clientY: 200
190
+ };
191
+ var mockSelection = {
192
+ _groups: [[mockNode]],
193
+ node: function node() {
194
+ return mockNode;
195
+ }
196
+ };
197
+ _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
198
+ on: function on(event, handler) {
199
+ mockOn(event, handler);
200
+ if (event === 'mousemove' && handler) {
201
+ _d3Selection.pointer.mockReturnValue([100, 200]);
202
+ handler();
203
+ }
204
+ }
205
+ }));
206
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
207
+ expect(gp.snap.x).toHaveBeenCalledWith(5);
208
+ expect(gp.snap.y).toHaveBeenCalledWith(10);
209
+ });
210
+ it('calls onMouseMove handler with snapped coordinates', function () {
211
+ var onMouseMove = jest.fn();
212
+ var gp = graphProps();
213
+ gp.scale.x.invert = jest.fn().mockReturnValue(7);
214
+ gp.scale.y.invert = jest.fn().mockReturnValue(14);
215
+ gp.snap.x = jest.fn().mockReturnValue(10);
216
+ gp.snap.y = jest.fn().mockReturnValue(15);
217
+ var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
218
+ onMouseMove: onMouseMove,
219
+ graphProps: gp
220
+ });
221
+ var mockNode = document.createElement('div');
222
+ var mockEvent = {
223
+ clientX: 100,
224
+ clientY: 200
225
+ };
226
+ var mockSelection = {
227
+ _groups: [[mockNode]],
228
+ node: function node() {
229
+ return mockNode;
230
+ }
231
+ };
232
+ _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
233
+ on: function on(event, handler) {
234
+ mockOn(event, handler);
235
+ if (event === 'mousemove' && handler) {
236
+ _d3Selection.pointer.mockReturnValue([100, 200]);
237
+ handler(mockEvent);
238
+ }
239
+ }
240
+ }));
241
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
242
+ expect(onMouseMove).toHaveBeenCalledWith({
243
+ x: 10,
244
+ y: 15
245
+ });
246
+ });
247
+ it('does not call onMouseMove when handler is not provided', function () {
248
+ var gp = graphProps();
249
+ var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
250
+ graphProps: gp
251
+ });
252
+ var mockNode = document.createElement('div');
253
+ var mockEvent = {
254
+ clientX: 100,
255
+ clientY: 200
256
+ };
257
+ var mockSelection = {
258
+ _groups: [[mockNode]],
259
+ node: function node() {
260
+ return mockNode;
261
+ }
262
+ };
263
+ _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
264
+ on: function on(event, handler) {
265
+ mockOn(event, handler);
266
+ if (event === 'mousemove' && handler) {
267
+ _d3Selection.pointer.mockReturnValue([100, 200]);
268
+ // Should not throw error when onMouseMove is not provided
269
+ expect(function () {
270
+ return handler(mockEvent);
271
+ }).not.toThrow();
272
+ }
273
+ }
274
+ }));
275
+ (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
276
+
277
+ // Verify scale methods were not called (early return in mouseMove)
278
+ expect(gp.scale.x.invert).not.toHaveBeenCalled();
279
+ expect(gp.scale.y.invert).not.toHaveBeenCalled();
280
+ });
281
+ });
282
+ });
283
+ });
284
+ });
285
+ //# sourceMappingURL=root.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root.test.js","names":["_react","require","_react2","_interopRequireDefault","_root","_d3Selection","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","jest","mock","select","fn","pointer","scaleMock","n","invert","graphProps","scale","x","y","snap","domain","min","max","step","range","size","width","height","describe","mockOn","defaultProps","beforeEach","mockReturnValue","on","classes","afterEach","cleanup","clearAllMocks","it","_render","render","createElement","Root","container","getByText","expect","firstChild","toBeInTheDocument","toHaveBeenCalled","toHaveBeenCalledWith","any","Function","_render2","unmount","mockClear","onMouseMove","gp","props","mockNode","document","mockEvent","clientX","clientY","mockSelection","_groups","node","event","handler","not","toThrow"],"sources":["../../src/__tests__/root.test.jsx"],"sourcesContent":["import { cleanup, render } from '@testing-library/react';\nimport React from 'react';\nimport { Root } from '../root';\nimport { pointer, select } from 'd3-selection';\n\njest.mock('d3-selection', () => ({\n select: jest.fn(),\n pointer: jest.fn(),\n}));\n\nconst scaleMock = () => {\n const fn = jest.fn((n) => n);\n fn.invert = jest.fn((n) => n);\n return fn;\n};\n\nconst graphProps = () => ({\n scale: {\n x: scaleMock(),\n y: scaleMock(),\n },\n snap: {\n x: jest.fn((n) => n),\n y: jest.fn((n) => n),\n },\n domain: {\n min: 0,\n max: 1,\n step: 1,\n },\n range: {\n min: 0,\n max: 1,\n step: 1,\n },\n size: {\n width: 400,\n height: 400,\n },\n});\n\ndescribe('root', () => {\n let mockOn;\n let defaultProps;\n\n beforeEach(() => {\n mockOn = jest.fn();\n select.mockReturnValue({\n on: mockOn,\n });\n pointer.mockReturnValue([0, 0]);\n\n defaultProps = {\n classes: {},\n graphProps: graphProps(),\n };\n });\n\n afterEach(() => {\n cleanup();\n jest.clearAllMocks();\n });\n\n it('renders with children', () => {\n const { container, getByText } = render(<Root {...defaultProps}>hi</Root>);\n expect(container.firstChild).toBeInTheDocument();\n expect(getByText('hi')).toBeInTheDocument();\n });\n\n describe('logic', () => {\n describe('mousemove', () => {\n describe('mount/unmount', () => {\n it('adds mousemove listener on componentDidMount', () => {\n render(<Root {...defaultProps}>hi</Root>);\n\n // Verify that select was called with the g element\n expect(select).toHaveBeenCalled();\n\n // Verify that on() was called with 'mousemove' and a function\n expect(mockOn).toHaveBeenCalledWith('mousemove', expect.any(Function));\n });\n\n it('removes mousemove listener on componentWillUnmount', () => {\n const { unmount } = render(<Root {...defaultProps}>hi</Root>);\n\n // Clear previous calls to isolate unmount behavior\n mockOn.mockClear();\n select.mockClear();\n\n unmount();\n\n // Verify that select was called during unmount\n expect(select).toHaveBeenCalled();\n\n // Verify that on() was called with 'mousemove' and null to remove the listener\n expect(mockOn).toHaveBeenCalledWith('mousemove', null);\n });\n });\n\n describe('mouseMove function', () => {\n it('calls pointer with correct arguments', () => {\n const onMouseMove = jest.fn();\n const gp = graphProps();\n const props = {\n ...defaultProps,\n onMouseMove,\n graphProps: gp,\n };\n\n const mockNode = document.createElement('div');\n const mockEvent = { clientX: 10, clientY: 20 };\n const mockSelection = {\n _groups: [[mockNode]],\n node: () => mockNode,\n };\n\n // Mock select to return our mockSelection\n select.mockReturnValue({\n ...mockSelection,\n on: (event, handler) => {\n mockOn(event, handler);\n // When 'mousemove' is registered, immediately test it\n if (event === 'mousemove' && handler) {\n pointer.mockReturnValue([10, 20]);\n // Handler is bound with mockSelection as first arg, so call with event\n handler(mockEvent);\n }\n },\n });\n\n render(<Root {...props}>hi</Root>);\n\n // Verify pointer was called with the event and correct node\n expect(pointer).toHaveBeenCalledWith(mockEvent, mockNode);\n });\n\n it('calls scale.x.invert and scale.y.invert', () => {\n const onMouseMove = jest.fn();\n const gp = graphProps();\n const props = {\n ...defaultProps,\n onMouseMove,\n graphProps: gp,\n };\n\n const mockNode = document.createElement('div');\n const mockEvent = { clientX: 15, clientY: 25 };\n const mockSelection = {\n _groups: [[mockNode]],\n node: () => mockNode,\n };\n\n select.mockReturnValue({\n ...mockSelection,\n on: (event, handler) => {\n mockOn(event, handler);\n if (event === 'mousemove' && handler) {\n pointer.mockReturnValue([15, 25]);\n handler(mockEvent);\n }\n },\n });\n\n render(<Root {...props}>hi</Root>);\n\n expect(gp.scale.x.invert).toHaveBeenCalledWith(15);\n expect(gp.scale.y.invert).toHaveBeenCalledWith(25);\n });\n\n it('calls snap.x and snap.y with inverted coordinates', () => {\n const onMouseMove = jest.fn();\n const gp = graphProps();\n gp.scale.x.invert = jest.fn().mockReturnValue(5);\n gp.scale.y.invert = jest.fn().mockReturnValue(10);\n const props = {\n ...defaultProps,\n onMouseMove,\n graphProps: gp,\n };\n\n const mockNode = document.createElement('div');\n const mockEvent = { clientX: 100, clientY: 200 };\n const mockSelection = {\n _groups: [[mockNode]],\n node: () => mockNode,\n };\n\n select.mockReturnValue({\n ...mockSelection,\n on: (event, handler) => {\n mockOn(event, handler);\n if (event === 'mousemove' && handler) {\n pointer.mockReturnValue([100, 200]);\n handler();\n }\n },\n });\n\n render(<Root {...props}>hi</Root>);\n\n expect(gp.snap.x).toHaveBeenCalledWith(5);\n expect(gp.snap.y).toHaveBeenCalledWith(10);\n });\n\n it('calls onMouseMove handler with snapped coordinates', () => {\n const onMouseMove = jest.fn();\n const gp = graphProps();\n gp.scale.x.invert = jest.fn().mockReturnValue(7);\n gp.scale.y.invert = jest.fn().mockReturnValue(14);\n gp.snap.x = jest.fn().mockReturnValue(10);\n gp.snap.y = jest.fn().mockReturnValue(15);\n\n const props = {\n ...defaultProps,\n onMouseMove,\n graphProps: gp,\n };\n\n const mockNode = document.createElement('div');\n const mockEvent = { clientX: 100, clientY: 200 };\n const mockSelection = {\n _groups: [[mockNode]],\n node: () => mockNode,\n };\n\n select.mockReturnValue({\n ...mockSelection,\n on: (event, handler) => {\n mockOn(event, handler);\n if (event === 'mousemove' && handler) {\n pointer.mockReturnValue([100, 200]);\n handler(mockEvent);\n }\n },\n });\n\n render(<Root {...props}>hi</Root>);\n\n expect(onMouseMove).toHaveBeenCalledWith({ x: 10, y: 15 });\n });\n\n it('does not call onMouseMove when handler is not provided', () => {\n const gp = graphProps();\n const props = {\n ...defaultProps,\n graphProps: gp,\n };\n\n const mockNode = document.createElement('div');\n const mockEvent = { clientX: 100, clientY: 200 };\n const mockSelection = {\n _groups: [[mockNode]],\n node: () => mockNode,\n };\n\n select.mockReturnValue({\n ...mockSelection,\n on: (event, handler) => {\n mockOn(event, handler);\n if (event === 'mousemove' && handler) {\n pointer.mockReturnValue([100, 200]);\n // Should not throw error when onMouseMove is not provided\n expect(() => handler(mockEvent)).not.toThrow();\n }\n },\n });\n\n render(<Root {...props}>hi</Root>);\n\n // Verify scale methods were not called (early return in mouseMove)\n expect(gp.scale.x.invert).not.toHaveBeenCalled();\n expect(gp.scale.y.invert).not.toHaveBeenCalled();\n });\n });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
5
+ var _trig = require("../trig");
6
+ var _utils = require("../utils");
7
+ var _debug = _interopRequireDefault(require("debug"));
8
+ var _templateObject, _templateObject2, _templateObject3;
9
+ var log = (0, _debug["default"])('pie-lib:plot:trig:test');
10
+ var vs = function vs(v) {
11
+ if (!v) {
12
+ return '';
13
+ }
14
+ if (Number.isFinite(v.x) && Number.isFinite(v.y)) {
15
+ return "[".concat(v.x, ",").concat(v.y, "]");
16
+ }
17
+ return JSON.stringify(v);
18
+ };
19
+ var p = function p(strings) {
20
+ for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
21
+ values[_key - 1] = arguments[_key];
22
+ }
23
+ return strings.reduce(function (acc, s, index) {
24
+ return "".concat(acc).concat(s).concat(vs(values[index]));
25
+ }, '');
26
+ };
27
+ describe('trig', function () {
28
+ describe('angle', function () {
29
+ var assertAngle = function assertAngle(a, b, expected) {
30
+ it(p(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["", ", ", " => ", ""])), a, b, (0, _trig.toDegrees)(expected)), function () {
31
+ var result = (0, _trig.angle)(a, b);
32
+ expect(result).toBeCloseTo(expected);
33
+ });
34
+ };
35
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _trig.toRadians)(45));
36
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(0, 1), (0, _trig.toRadians)(90));
37
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _trig.toRadians)(135));
38
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 0), (0, _trig.toRadians)(180));
39
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _trig.toRadians)(225));
40
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(0, -1), (0, _trig.toRadians)(270));
41
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, -1), (0, _trig.toRadians)(315));
42
+ assertAngle((0, _utils.xy)(1, 1), (0, _utils.xy)(0, 0), (0, _trig.toRadians)(225));
43
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _trig.toRadians)(45));
44
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), (0, _trig.toRadians)(26.565));
45
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(3, 1), (0, _trig.toRadians)(18.434));
46
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(4, 1), (0, _trig.toRadians)(14.036));
47
+ assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(5, 1), (0, _trig.toRadians)(11.309));
48
+ });
49
+ describe('acuteXAngle', function () {
50
+ var assertAcute = function assertAcute(input, expected) {
51
+ it("".concat((0, _trig.toDegrees)(input), " => ").concat((0, _trig.toDegrees)(expected)), function () {
52
+ var result = (0, _trig.acuteXAngle)(input);
53
+ log("result: ".concat((0, _trig.toDegrees)(result)));
54
+ expect(result).toBeCloseTo(expected);
55
+ });
56
+ };
57
+ assertAcute((0, _trig.toRadians)(45), (0, _trig.toRadians)(45));
58
+ assertAcute((0, _trig.toRadians)(100), (0, _trig.toRadians)(80));
59
+ assertAcute((0, _trig.toRadians)(190), (0, _trig.toRadians)(10));
60
+ assertAcute((0, _trig.toRadians)(350), (0, _trig.toRadians)(10));
61
+ });
62
+ describe('acuteYAngle', function () {
63
+ var assertAcute = function assertAcute(input, expected) {
64
+ it("".concat((0, _trig.toDegrees)(input), " => ").concat((0, _trig.toDegrees)(expected)), function () {
65
+ var result = (0, _trig.acuteYAngle)(input);
66
+ log("result: ".concat((0, _trig.toDegrees)(result)));
67
+ expect(result).toBeCloseTo(expected);
68
+ });
69
+ };
70
+ assertAcute((0, _trig.toRadians)(45), (0, _trig.toRadians)(45));
71
+ assertAcute((0, _trig.toRadians)(100), (0, _trig.toRadians)(10));
72
+ assertAcute((0, _trig.toRadians)(190), (0, _trig.toRadians)(80));
73
+ assertAcute((0, _trig.toRadians)(350), (0, _trig.toRadians)(80));
74
+ });
75
+ describe('edges', function () {
76
+ var assertEdges = function assertEdges(domain, range) {
77
+ return function (from, to, expected) {
78
+ it(p(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["", ", ", " + ", " -> ", " => ", "", ""])), domain, range, from, to, expected[0], expected[1]), function () {
79
+ var result = (0, _trig.edges)(domain, range)(from, to);
80
+ expect(result[0].x).toBeCloseTo(expected[0].x);
81
+ expect(result[0].y).toBeCloseTo(expected[0].y);
82
+ expect(result[1].x).toBeCloseTo(expected[1].x);
83
+ expect(result[1].y).toBeCloseTo(expected[1].y);
84
+ });
85
+ };
86
+ };
87
+ var one = assertEdges({
88
+ min: -4,
89
+ max: 4
90
+ }, {
91
+ min: -4,
92
+ max: 4
93
+ });
94
+ one((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), [(0, _utils.xy)(4, 4), (0, _utils.xy)(-4, -4)]);
95
+ one((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), [(0, _utils.xy)(4, 2), (0, _utils.xy)(-4, -2)]);
96
+ one((0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2), [(0, _utils.xy)(4, 4), (0, _utils.xy)(-4, -4)]);
97
+ one((0, _utils.xy)(1, 0), (0, _utils.xy)(2, 0), [(0, _utils.xy)(4, 0), (0, _utils.xy)(-4, 0)]);
98
+ one((0, _utils.xy)(1, 0), (0, _utils.xy)(-2, 0), [(0, _utils.xy)(-4, 0), (0, _utils.xy)(4, 0)]);
99
+
100
+ /**
101
+ * domain {min: -5, max: 5, padding: 0, step: 1, labelStep: 1}labelStep: 1max: 5min: -5padding: 0step: 1__proto__: Object range: {min: -5, max: 5, padding: 0, step: 1, labelStep: 1} a: {x: -5, y: 0} b: {x: -5, y: 2} edges: Point {x: -5, y: 5} Point {x: -5, y: 2}
102
+ */
103
+ var lineIssue = assertEdges({
104
+ min: -5,
105
+ max: 5
106
+ }, {
107
+ min: -5,
108
+ max: 5
109
+ });
110
+ lineIssue((0, _utils.xy)(-5, -0), (0, _utils.xy)(-5, 2), [(0, _utils.xy)(-5, 5), (0, _utils.xy)(-5, -5)]);
111
+ });
112
+ describe('diffEdge', function () {
113
+ var assertDiffEdge = function assertDiffEdge(bounds, from, to, expected) {
114
+ it(p(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["<", "> ", " -> ", " => ", ""])), bounds, from, to, expected), function () {
115
+ var result = (0, _trig.diffEdge)(bounds, from, to);
116
+ expect(result.x).toBeCloseTo(expected.x);
117
+ expect(result.y).toBeCloseTo(expected.y);
118
+ });
119
+ };
120
+ var twoTwo = assertDiffEdge.bind(null, (0, _utils.xy)(2, 2));
121
+ twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2));
122
+ twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 2), (0, _utils.xy)(1, 2));
123
+ twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 2), (0, _utils.xy)(2, 2));
124
+ twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 2), (0, _utils.xy)(2, 2));
125
+ twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-2, 2));
126
+ twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, -2));
127
+ var fourFour = assertDiffEdge.bind(null, (0, _utils.xy)(4, 4));
128
+ fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _utils.xy)(4, 4));
129
+ fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 2), (0, _utils.xy)(2, 4));
130
+ fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), (0, _utils.xy)(4, 2));
131
+ fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-4, 4));
132
+ fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-4, 4));
133
+ assertDiffEdge((0, _utils.xy)(-4, -4), (0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-4, -4));
134
+ assertDiffEdge((0, _utils.xy)(4, 4), (0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2), (0, _utils.xy)(4, 4));
135
+ assertDiffEdge((0, _utils.xy)(4, 4), (0, _utils.xy)(2, 2), (0, _utils.xy)(3, 3), (0, _utils.xy)(4, 4));
136
+ assertDiffEdge((0, _utils.xy)(-4, -4), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, -2), (0, _utils.xy)(-4, -4));
137
+ assertDiffEdge((0, _utils.xy)(-4, 4), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, 0), (0, _utils.xy)(-4, 2));
138
+ var lineIssue = assertDiffEdge.bind(null, (0, _utils.xy)(-5, -5));
139
+ lineIssue((0, _utils.xy)(-5, 2), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, -5));
140
+ //Top Right
141
+ assertDiffEdge((0, _utils.xy)(5, 5), (0, _utils.xy)(0, 5), (0, _utils.xy)(2, 5), (0, _utils.xy)(5, 5));
142
+ assertDiffEdge((0, _utils.xy)(5, 5), (0, _utils.xy)(5, 0), (0, _utils.xy)(5, 1), (0, _utils.xy)(5, 5));
143
+
144
+ // //Bottom Right
145
+ assertDiffEdge((0, _utils.xy)(5, -5), (0, _utils.xy)(5, 0), (0, _utils.xy)(5, -0.1), (0, _utils.xy)(5, -5));
146
+ assertDiffEdge((0, _utils.xy)(5, -5), (0, _utils.xy)(0, -5), (0, _utils.xy)(1, -5), (0, _utils.xy)(5, -5));
147
+
148
+ //Top Left
149
+ assertDiffEdge((0, _utils.xy)(-5, 5), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, 0.1), (0, _utils.xy)(-5, 5));
150
+ assertDiffEdge((0, _utils.xy)(-5, 5), (0, _utils.xy)(0, 5), (0, _utils.xy)(-1, 5), (0, _utils.xy)(-5, 5));
151
+
152
+ //Bottom Left
153
+ assertDiffEdge((0, _utils.xy)(-5, -5), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, -0.1), (0, _utils.xy)(-5, -5));
154
+ assertDiffEdge((0, _utils.xy)(-5, -5), (0, _utils.xy)(0, -5), (0, _utils.xy)(-1, -5), (0, _utils.xy)(-5, -5));
155
+ });
156
+ describe('getOpposingSide', function () {
157
+ var assertOpposingSide = function assertOpposingSide(hyp, angle, expected) {
158
+ it("".concat(hyp, ", ").concat(angle, " = ").concat(expected), function () {
159
+ var radians = (0, _trig.toRadians)(angle);
160
+ var result = (0, _trig.getOpposingSide)(hyp, radians);
161
+ expect(result).toBeCloseTo(expected);
162
+ });
163
+ };
164
+ assertOpposingSide(1, 45, 0.707);
165
+ assertOpposingSide(1.25, 45, 0.88);
166
+ });
167
+ });
168
+ //# sourceMappingURL=trig.test.js.map