vue3-dnd
Version:
Drag and Drop for Vue Composition API
73 lines (72 loc) • 2.97 kB
JavaScript
import { DropTargetMonitorImpl } from "../DropTargetMonitorImpl";
import { createDragDropManager } from "dnd-core";
import { TestBackend } from "react-dnd-test-backend";
import { describe, it, vi, expect } from "vitest";
describe("The DropTargetMonitorImpl", function() {
it("can be constructed", function() {
var manager = createDragDropManager(TestBackend);
var monitor = new DropTargetMonitorImpl(manager);
expect(monitor).toBeDefined();
});
it("uses the monitor for canDrop", function() {
var canDropOnTarget = vi.fn();
var manager = createDragDropManager(TestBackend);
manager.getMonitor().canDropOnTarget = canDropOnTarget;
var monitor = new DropTargetMonitorImpl(manager);
expect(monitor.canDrop()).toEqual(false);
expect(canDropOnTarget.mock.calls).toHaveLength(0);
monitor.receiveHandlerId("123");
monitor.canDrop();
expect(canDropOnTarget.mock.calls).toHaveLength(1);
expect(canDropOnTarget.mock.calls[0]).toEqual([
"123"
]);
});
it("throws if canDrop is used in a loop", function() {
var manager = createDragDropManager(TestBackend);
var monitor = new DropTargetMonitorImpl(manager);
manager.getMonitor().canDropOnTarget = function() {
return monitor.canDrop();
};
monitor.receiveHandlerId("123");
expect(function() {
return monitor.canDrop();
}).toThrow("You may not call monitor.canDrop() inside your canDrop() implementation. Read more: http://react-dnd.github.io/react-dnd/docs/api/drop-target-monitor");
});
it("uses the monitor for isOver", function() {
var isOver = vi.fn();
var manager = createDragDropManager(TestBackend);
manager.getMonitor().isOverTarget = isOver;
var monitor = new DropTargetMonitorImpl(manager);
expect(monitor.isOver()).toEqual(false);
expect(isOver.mock.calls).toHaveLength(0);
monitor.receiveHandlerId("123");
monitor.isOver();
expect(isOver.mock.calls).toHaveLength(1);
expect(isOver.mock.calls[0]).toEqual([
"123",
undefined
]);
});
it("thunks to monitor methods", function() {
var manager = createDragDropManager(TestBackend);
var monitor = new DropTargetMonitorImpl(manager);
var THUNK_METHODS = [
"getItemType",
"getItem",
"getDropResult",
"didDrop",
"getInitialClientOffset",
"getInitialSourceClientOffset",
"getSourceClientOffset",
"getClientOffset",
"getDifferenceFromInitialOffset",
];
THUNK_METHODS.forEach(function(method) {
var mock = vi.fn();
manager.getMonitor()[method] = mock;
monitor[method]();
expect(mock.mock.calls).toHaveLength(1);
});
});
});