import { Class, HTMLWidget, SVGWidget } from "@hpcc-js/common";
import { expect } from "chai";
import "../../../../test-data/src/coreTest.css";
export function classDef(module: string, WidgetClass: { new(): T }) {
describe("#constructor()", function () {
it("new", function () {
const widget = new WidgetClass();
expect(widget).to.be.an.instanceof(WidgetClass);
});
it("classID", function () {
const widget = new WidgetClass();
const classID = widget.classID();
const constructorName = WidgetClass.prototype.constructor.name.split("$")[0]; // Webpack mangled name.
if (classID.indexOf(".") >= 0) {
expect(classID.indexOf(`${module}_`)).to.equal(0);
expect(classID.indexOf(`.${constructorName}`)).to.equal(classID.length - constructorName.length - 1);
} else {
expect(classID).to.equal(`${module}_${constructorName}`);
}
});
});
}
function createPlaceholder(widget: T, title: string, width: number = 640, height: number = 480, scale: number = 0.5) {
const div = document.createElement("DIV");
div.setAttribute("id", widget.classID());
div.setAttribute("class", `${widget.classID()} widgetTest`);
div.setAttribute("title", title);
div.style.width = `${width * scale}px`;
div.style.height = `${height * scale}px`;
div.style.transform = `scale(${scale}) `;
const placeholder: any = document.createElement("DIV");
placeholder.setAttribute("class", "placeholder");
placeholder.style.width = `${width}px`;
placeholder.style.height = `${height}px`;
div.appendChild(placeholder);
document.body.appendChild(div);
placeholder["__destroy"] = function () {
div.parentNode!.removeChild(div);
};
return placeholder;
}
function doRender(widget: T, width: number = 640, height: number = 480, scale: number = 0.5) {
scale = 1;
describe("#render()", function () {
let origPlaceholder: any;
it("Basic render", function (done) {
origPlaceholder = createPlaceholder(widget, `${widget.classID()}`, width, height, scale);
widget.target(origPlaceholder);
widget.render(() => {
done();
});
});
it("exit, enter, render", function (done) {
const placeholder = createPlaceholder(widget, `Relocate: ${widget.classID()}`, width, height, scale);
widget.target(null);
widget.target(placeholder);
widget.render(() => {
origPlaceholder.__destroy();
done();
});
});
});
}
export function render(widget: T, width: number = 640, height: number = 480, scale: number = 0.5) {
doRender(widget, width, height, scale);
}
export function renderIcon(widget: T) {
doRender(widget, 64, 64, 1);
}
export function renderSmall(widget: T) {
doRender(widget, 128, 128, 1);
}
export function renderMedium(widget: T) {
doRender(widget, 240, 240, 1);
}
export function renderShort(widget: T) {
doRender(widget, 240, 64, 1);
}
export function renderWide(widget: T) {
doRender(widget, 640, 240, 1);
}