127 lines
2.8 KiB
JavaScript

var assert = require("assert");
var expect = require("chai").expect;
var markoComponents = require("marko/components");
var getComponentsFromMeta = require("./components-from-meta");
function BrowserHelpers() {
this.logOutput = [];
this.rendered = [];
this.instances = [];
}
BrowserHelpers.prototype = {
triggerEvent: function (el, type) {
var ev = document.createEvent("Event");
ev.initEvent(type, true, true);
el.dispatchEvent(ev);
},
triggerCustomEvent: function (el, type, detail) {
var ev = new CustomEvent(type, { detail: detail });
el.dispatchEvent(ev);
},
triggerMouseEvent: function (el, type) {
var ev = document.createEvent("MouseEvent");
ev.initMouseEvent(
type,
true /* bubble */,
true /* cancelable */,
window,
null,
0,
0,
0,
0 /* coordinates */,
false,
false,
false,
false /* modifier keys */,
0 /*left*/,
null,
);
el.dispatchEvent(ev);
},
triggerClick: function (el) {
this.triggerMouseEvent(el, "click");
},
triggerMouseMove: function (el) {
this.triggerMouseEvent(el, "mousemove");
},
mount: function (templatePath, input) {
var $global = input && input.$global;
var template = require(templatePath);
template = template.default || template;
var renderResult = template.renderSync(input).appendTo(this.targetEl);
var instance;
try {
instance = renderResult.getComponent();
} catch (e) {
if (e.toString().indexOf("No component") === -1) {
throw e;
}
}
if (instance) {
this.instances.push(instance);
}
this.rendered.push({
template: this.cleanPath(templatePath),
components: getComponentsFromMeta(template),
input: input,
$global: $global,
});
return instance;
},
log: function (data) {
this.logOutput.push(data);
},
getComponentForEl: function (el) {
return markoComponents.getComponentForEl(el);
},
get targetEl() {
return document.getElementById("testsTarget");
},
nodeListToArray: function (nodes) {
var nodeArray = new Array(nodes.length);
for (var i = 0; i < nodes.length; i++) {
nodeArray[i] = nodes[i];
}
return nodeArray;
},
checkChildrenMatch: function (children1, children2) {
expect(children1.length).to.equal(children2.length);
for (var i = 0; i < children1.length; i++) {
var child1 = children1[i];
var child2 = children2[i];
assert.ok(
child1 === child2,
"Children at index " +
i +
" do not match. child 1: " +
child1 +
" child 2: " +
child2,
);
}
},
cleanPath: function (path) {
return path.replace(/\.\d+\.in-context$/, "");
},
};
module.exports = BrowserHelpers;