vue3-dnd
Version:
Drag and Drop for Vue Composition API
76 lines (75 loc) • 2.85 kB
JavaScript
import { createDragDropManager } from "dnd-core";
import { render, cleanup } from "@testing-library/vue";
import { useDndContextInjector } from "../DndContext";
import DndProvider from "../DndProvider";
import { TestBackend } from "react-dnd-test-backend";
import { defineComponent, h } from "vue-demi";
import { describe, afterEach, it, expect } from "vitest";
describe("DndProvider", function() {
afterEach(cleanup);
it("reuses DragDropManager provided to it", function() {
var capturedManager;
var manager = createDragDropManager(TestBackend, {}, {});
var ChildComponent = defineComponent(function() {
capturedManager = useDndContextInjector();
return function() {
return null;
};
});
var TestComponent = defineComponent(function() {
return function() {
return h(DndProvider, {
manager: manager
}, {
default: function() {
return h(ChildComponent);
}
});
};
});
render(TestComponent);
expect(capturedManager).toBe(manager);
});
/*
* Since @testing-library/vue still calls unmount during uninstallation and determines element.parentNode, although
* our use case is correct, an error will be reported.
* */ it.skip("stores DragDropManager in global context and cleans up on unmount", function() {
var capturedManager;
var ChildComponent = defineComponent(function() {
capturedManager = useDndContextInjector();
return function() {
return null;
};
});
var TestProvider = defineComponent(function() {
return function() {
return h(DndProvider, {
backend: TestBackend
}, {
default: function() {
return h(ChildComponent);
}
});
};
});
var mountProvider = function() {
return render(TestProvider);
};
var globalInstance = function() {
return global[Symbol.for("__VUE_DND_CONTEXT_INSTANCE__")];
};
// Single mount & unmount works
var root = mountProvider();
expect(globalInstance()).toEqual(capturedManager);
root.unmount();
expect(globalInstance()).toEqual(null);
// Two mounted components do a refcount
var rootA = mountProvider();
var rootB = mountProvider();
expect(globalInstance()).toEqual(capturedManager);
rootA.unmount();
expect(globalInstance()).toEqual(capturedManager);
rootB.unmount();
expect(globalInstance()).toEqual(null);
});
});