import * as React from "react";
import * as ReactDOM from "react-dom";
import DraggableExample from "./DraggableExample";
import { wait, mousedown, mouseup, mousemove } from "../TestHelper";
import * as sinon from "sinon";
describe("test Moveable(draggable)", () => {
beforeEach(() => {
document.documentElement.style.cssText = "position: relative;height: 100%; width: 100%;margin: 0; padding: 0;";
document.body.style.cssText = "position: relative;height: 100%; width: 100%;margin: 0;padding: 0;";
document.body.innerHTML = `
`;
});
afterEach(() => {
const container = document.querySelector(".container");
if (container) {
ReactDOM.unmountComponentAtNode(container);
}
});
it("test Drag", async () => {
let moveable!: DraggableExample;
// Given
const onDragStart = sinon.spy(e => {
e.set([50, 0]);
});
const onDrag = sinon.spy();
const onDragEnd = sinon.spy();
ReactDOM.render( {
if (e) {
moveable = e as any;
}
}}
onDragStart={onDragStart}
onDrag={onDrag}
onDragEnd={onDragEnd}
/>, document.querySelector(".container"));
await wait(300);
// When
// no drag
mousedown(document.querySelector(".c2")!, [0, 0]);
mouseup(document.querySelector(".c2")!, [0, 0]);
// drag
mousedown(document.querySelector(".c2")!, [0, 0]);
mousemove(document.querySelector(".c2")!, [50, 0]);
mousemove(document.querySelector(".c2")!, [100, 0]);
mouseup(document.querySelector(".c2")!, [100, 0]);
await wait(300);
// Then
expect(onDragStart.callCount).to.be.equals(2);
expect(onDrag.callCount).to.be.equals(2);
expect(onDragEnd.callCount).to.be.equals(2);
expect(onDragStart.args[0][0].target).to.be.equals(document.querySelector(".c2"));
expect(onDrag.args[0][0].target).to.be.equals(document.querySelector(".c2"));
expect(onDragEnd.args[0][0].target).to.be.equals(document.querySelector(".c2"));
expect(onDrag.args[0][0].dist[0]).to.be.deep.equals(25);
expect(onDrag.args[1][0].dist[0]).to.be.deep.equals(50);
expect(onDrag.args[0][0].delta[0]).to.be.deep.equals(25);
expect(onDrag.args[1][0].delta[0]).to.be.deep.equals(25);
expect(onDrag.args[0][0].translate[0]).to.be.deep.equals(75);
expect(onDrag.args[1][0].translate[0]).to.be.deep.equals(100);
});
it("test Cancel Drag", async () => {
let moveable!: DraggableExample;
// Given
const onDragStart = sinon.spy(e => {
return false;
});
const onDrag = sinon.spy();
const onDragEnd = sinon.spy();
ReactDOM.render( {
if (e) {
moveable = e as any;
}
}}
onDragStart={onDragStart}
onDrag={onDrag}
onDragEnd={onDragEnd}
/>, document.querySelector(".container"));
await wait(300);
// When
// no drag
mousedown(document.querySelector(".c2")!, [0, 0]);
mouseup(document.querySelector(".c2")!, [0, 0]);
// drag
mousedown(document.querySelector(".c2")!, [0, 0]);
mousemove(document.querySelector(".c2")!, [50, 0]);
mousemove(document.querySelector(".c2")!, [100, 0]);
mouseup(document.querySelector(".c2")!, [100, 0]);
await wait(300);
// Then
expect(onDragStart.callCount).to.be.equals(2);
expect(onDrag.callCount).to.be.equals(0);
expect(onDragEnd.callCount).to.be.equals(0);
});
});