50 lines
2.0 KiB
JavaScript
50 lines
2.0 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
|
|
import {
|
|
canOpenCanvasContextMenuTarget,
|
|
canStartCanvasRightDragZoomTarget,
|
|
isEditableInteractionTarget,
|
|
isSecondaryCanvasContextEvent,
|
|
} from '../src/canvasInteractionTargets.ts';
|
|
|
|
function makeTarget(activeSelectors = []) {
|
|
const selectorSet = new Set(activeSelectors);
|
|
return {
|
|
closest(selector) {
|
|
const parts = String(selector).split(',').map((part) => part.trim());
|
|
return parts.some((part) => selectorSet.has(part)) ? {} : null;
|
|
},
|
|
};
|
|
}
|
|
|
|
test('editable canvas targets stay editable', () => {
|
|
const inputTarget = makeTarget(['input']);
|
|
assert.equal(isEditableInteractionTarget(inputTarget), true);
|
|
assert.equal(canOpenCanvasContextMenuTarget(inputTarget), false);
|
|
assert.equal(canStartCanvasRightDragZoomTarget(inputTarget), false);
|
|
});
|
|
|
|
test('empty pane targets allow the custom canvas context menu', () => {
|
|
const paneTarget = makeTarget(['.react-flow__pane']);
|
|
assert.equal(canOpenCanvasContextMenuTarget(paneTarget), true);
|
|
assert.equal(canStartCanvasRightDragZoomTarget(paneTarget), true);
|
|
});
|
|
|
|
test('viewport-level targets also allow the custom canvas context menu', () => {
|
|
const viewportTarget = makeTarget(['.react-flow__viewport']);
|
|
assert.equal(canOpenCanvasContextMenuTarget(viewportTarget), true);
|
|
assert.equal(canStartCanvasRightDragZoomTarget(viewportTarget), true);
|
|
});
|
|
|
|
test('node and surface-view targets do not open the canvas context menu', () => {
|
|
assert.equal(canOpenCanvasContextMenuTarget(makeTarget(['.react-flow__node', '.react-flow__pane'])), false);
|
|
assert.equal(canOpenCanvasContextMenuTarget(makeTarget(['.surface-view-container', '.react-flow__pane'])), false);
|
|
});
|
|
|
|
test('secondary canvas context detection includes macOS ctrl-click', () => {
|
|
assert.equal(isSecondaryCanvasContextEvent({ button: 2, ctrlKey: false }), true);
|
|
assert.equal(isSecondaryCanvasContextEvent({ button: 0, ctrlKey: true }), true);
|
|
assert.equal(isSecondaryCanvasContextEvent({ button: 0, ctrlKey: false }), false);
|
|
});
|