q-class

q-class baseThing { constructor(prefix) { this.prefix = prefix; } function baseLabel() { return this.prefix + ":" + this.id; } } q-class myClass extends baseThing { slot { myslot } myClass(prefix, suffix) { super(prefix); this.suffix = suffix; this.readyValue = this.id + ":" + suffix; } function label() { return this.baseLabel() + ":" + this.suffix; } } myClass myObject("pre", "done") { id: "visual-qclass-instance" myslot { div { text { slotted child rendered } } } } div#result { text { waiting } onready { var rendered = document.querySelector("myclass#visual-qclass-instance"); var objectOk = typeof myObject === "object" && myObject.readyValue === "visual-qclass-instance:done" && myObject.label() === "pre:visual-qclass-instance:done" && myObject.qdom() && myObject.element() === rendered && myObject.slots().length === 1; var domOk = rendered && rendered.textContent.indexOf("slotted child rendered") !== -1; var fresh = typeof myClass === "function" ? new myClass("x", "y") : null; var ctorOk = fresh && fresh.prefix === "x" && fresh.suffix === "y"; var ok = objectOk && domOk && ctorOk; this.className = ok ? "pass" : "fail"; this.textContent = ok ? "q-class-ok" : "q-class-fail object=" + objectOk + " dom=" + domOk + " ctor=" + ctorOk; document.body.setAttribute("data-qclass-status", ok ? "pass" : "fail"); } }