@magnit-ce/code-tests 0.0.10 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/code-tests.cjs +243 -156
- package/dist/code-tests.d.cts +10 -5
- package/dist/code-tests.d.ts +10 -5
- package/dist/code-tests.js +242 -152
- package/dist/code-tests.min.js +77 -33
- package/package.json +1 -1
package/dist/code-tests.min.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var w=`:host
|
|
2
2
|
{
|
|
3
3
|
/*** gray ***/
|
|
4
4
|
--uchu-light-gray-raw: 95.57% 0.003 286.35;
|
|
@@ -104,18 +104,6 @@ var S=`:host
|
|
|
104
104
|
padding: var(--small-spacer);
|
|
105
105
|
font-family: var(--font-text);
|
|
106
106
|
}
|
|
107
|
-
@media (prefers-color-scheme: dark)
|
|
108
|
-
{
|
|
109
|
-
:host
|
|
110
|
-
{
|
|
111
|
-
--text-surface: var(--uchu-yang);
|
|
112
|
-
--text-result: var(--uchu-yang);
|
|
113
|
-
|
|
114
|
-
--surface-0: var(--uchu-yin);
|
|
115
|
-
--surface-test: oklch(25.11% 0.006 258.36);
|
|
116
|
-
--surface-test-summary: oklch(35.02% 0.005 236.66);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
107
|
|
|
120
108
|
#header
|
|
121
109
|
{
|
|
@@ -140,10 +128,24 @@ var S=`:host
|
|
|
140
128
|
display: none;
|
|
141
129
|
}
|
|
142
130
|
:host(.has-before-hook) #before-all-details
|
|
143
|
-
,:host(.has-
|
|
131
|
+
,:host(.has-after-hook) #after-all-details
|
|
144
132
|
{
|
|
145
133
|
display: initial;
|
|
146
134
|
}
|
|
135
|
+
:host(.has-required-before-hook) #required-before-any-details
|
|
136
|
+
,:host(.has-required-after-hook) #required-after-any-details
|
|
137
|
+
{
|
|
138
|
+
display: initial;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
#required-before-any-summary
|
|
142
|
+
,#required-after-any-summary
|
|
143
|
+
{
|
|
144
|
+
background: var(--surface-process);
|
|
145
|
+
color: var(--text-process);
|
|
146
|
+
border: solid 1px var(--text-process);
|
|
147
|
+
grid-template-columns: auto auto 1fr;
|
|
148
|
+
}
|
|
147
149
|
|
|
148
150
|
#tests
|
|
149
151
|
{
|
|
@@ -179,18 +181,19 @@ summary::before
|
|
|
179
181
|
|
|
180
182
|
:host(.running) .run[data-all]
|
|
181
183
|
{
|
|
182
|
-
|
|
183
|
-
|
|
184
|
+
color: var(--text-surface);
|
|
185
|
+
background-color: oklch(89.68% 0.002 197.12);
|
|
186
|
+
border-color: oklch(63.12% 0.004 219.55);
|
|
184
187
|
}
|
|
185
188
|
:host(.running) .run[data-all]:hover
|
|
186
189
|
{
|
|
187
|
-
background-color:
|
|
188
|
-
border-color:
|
|
190
|
+
background-color: oklch(95.57% 0.003 286.35);
|
|
191
|
+
border-color: oklch(63.12% 0.004 219.55);
|
|
189
192
|
}
|
|
190
193
|
:host(.running) .run[data-all]:active
|
|
191
194
|
{
|
|
192
|
-
background-color:
|
|
193
|
-
border-color:
|
|
195
|
+
background-color: oklch(63.12% 0.004 219.55);
|
|
196
|
+
border-color: oklch(53.12% 0.004 219.55);
|
|
194
197
|
}
|
|
195
198
|
:host(.running) .run[data-all]::before
|
|
196
199
|
{
|
|
@@ -372,12 +375,39 @@ pre
|
|
|
372
375
|
}
|
|
373
376
|
|
|
374
377
|
|
|
378
|
+
@media (prefers-color-scheme: dark)
|
|
379
|
+
{
|
|
380
|
+
:host
|
|
381
|
+
{
|
|
382
|
+
--text-surface: var(--uchu-yang);
|
|
383
|
+
--text-result: var(--uchu-yang);
|
|
384
|
+
|
|
385
|
+
--surface-0: var(--uchu-yin);
|
|
386
|
+
--surface-test: oklch(25.11% 0.006 258.36);
|
|
387
|
+
--surface-test-summary: oklch(35.02% 0.005 236.66);
|
|
388
|
+
}
|
|
389
|
+
:host(.running) .run[data-all]
|
|
390
|
+
{
|
|
391
|
+
background-color: oklch(35.02% 0.005 236.66);
|
|
392
|
+
border-color: oklch(35.02% 0.005 236.66);
|
|
393
|
+
}
|
|
394
|
+
:host(.running) .run[data-all]:hover
|
|
395
|
+
{
|
|
396
|
+
background-color: oklch(63.12% 0.004 219.55);
|
|
397
|
+
border-color:oklch(63.12% 0.004 219.55);
|
|
398
|
+
}
|
|
399
|
+
:host(.running) .run[data-all]:active
|
|
400
|
+
{
|
|
401
|
+
background-color: oklch(25.11% 0.006 258.36);
|
|
402
|
+
border-color: oklch(25.11% 0.006 258.36);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
375
405
|
|
|
376
406
|
@keyframes spin
|
|
377
407
|
{
|
|
378
408
|
from { transform: rotate(0deg); }
|
|
379
409
|
to { transform: rotate(360deg); }
|
|
380
|
-
}`;var
|
|
410
|
+
}`;var x=`<slot name="header">
|
|
381
411
|
<header id="header">
|
|
382
412
|
<span id="title"><slot name="title"><span id="title-text">Tests</span></slot></span>
|
|
383
413
|
<slot name="play-button">
|
|
@@ -390,6 +420,13 @@ pre
|
|
|
390
420
|
<slot name="details"></slot>
|
|
391
421
|
</header>
|
|
392
422
|
</slot>
|
|
423
|
+
<details id="required-before-any-details" class="hook">
|
|
424
|
+
<summary id="required-before-any-summary">
|
|
425
|
+
<span id="required-before-any-result-icon" class="result-icon"></span>
|
|
426
|
+
<span id="required-before-any-description" class="description">Results from Required Before Any Hook</span>
|
|
427
|
+
</summary>
|
|
428
|
+
<div id="required-before-any-results" class="results"></div>
|
|
429
|
+
</details>
|
|
393
430
|
<details id="before-all-details" class="hook">
|
|
394
431
|
<summary id="before-all-summary">
|
|
395
432
|
<span id="before-all-result-icon" class="result-icon"></span>
|
|
@@ -405,6 +442,13 @@ pre
|
|
|
405
442
|
</summary>
|
|
406
443
|
<div id="after-all-results" class="results"></div>
|
|
407
444
|
</details>
|
|
445
|
+
<details id="required-after-any-details" class="hook">
|
|
446
|
+
<summary id="required-after-any-summary">
|
|
447
|
+
<span id="required-after-any-result-icon" class="result-icon"></span>
|
|
448
|
+
<span id="required-after-any-description" class="description">Results from Required After Any Hook</span>
|
|
449
|
+
</summary>
|
|
450
|
+
<div id="required-after-any-results" class="results"></div>
|
|
451
|
+
</details>
|
|
408
452
|
|
|
409
453
|
<template id="prompt-template">
|
|
410
454
|
<div class="prompt" part="prompt">
|
|
@@ -417,15 +461,15 @@ pre
|
|
|
417
461
|
<button class="prompt-button reject" type="button">Reject</button>
|
|
418
462
|
</div>
|
|
419
463
|
</div>
|
|
420
|
-
</template>`;var
|
|
421
|
-
Expected: ${
|
|
422
|
-
Result: ${e}`)}async toContainText(t){let s=await this}async toHaveAttribute(t){let s=await this;if(!(s instanceof HTMLElement))throw new Error("Unable to check for attribute on non-HTMLElement target");if(s.getAttribute(t))throw new Error("Taret does not have attribute")}},v=Symbol("beforeAll"),y=Symbol("beforeEach"),k=Symbol("afterAll"),w=Symbol("afterEach"),L=class d{static timeoutMS=500;static#e;static#h;static expect(t){return new T(async(e,r)=>{if(t instanceof Promise){let n=await t;e(n);return}e(t)})}static expectSync(t){return new T(async(e,r)=>{if(t instanceof Promise){let n=await t;e(n);return}e(t)})}static expectBefore(t){return new T(async(e,r)=>{if(t instanceof Promise){let n=await t;e(n);return}e(t)})}static async prompt(t,s,e,r){return new Promise((n,o)=>{let a=t.findElement("prompt-template"),l=d.createElementFromTemplate(a);l.querySelector(".label").textContent=e;let c=h=>{let f=h.composedPath();if(f.find(i=>i instanceof HTMLButtonElement&&i.classList.contains("accept"))!=null){let i=r?.onAccept?.()??!0;l.removeEventListener("click",c),n(i);return}if(f.find(i=>i instanceof HTMLButtonElement&&i.classList.contains("reject"))!=null){let i=r?.onReject?.()??!1;l.removeEventListener("click",c),n(i);return}};l.addEventListener("click",c),r?.acceptLabel!=null&&(l.querySelector(".accept").textContent=r.acceptLabel),r?.rejectLabel!=null&&(l.querySelector(".reject").textContent=r.rejectLabel);let u=s instanceof HTMLDetailsElement?s:s.querySelector(".test-details");u!=null&&(u.open=!0),s.querySelector(".result")?.append(l)})}static createElementFromTemplate(t,s){let e=t instanceof HTMLTemplateElement?t:document.querySelector(t);if(e==null)throw new Error(`Unable to find template element from selector: ${t}`);let r=e.content.cloneNode(!0).querySelector("*");if(r==null)throw new Error("Unable to find first child of template element");return s?.append(r),r}};function I(d){return L.expect(d)}function U(d,t,s,e){return L.prompt(d,t,s,e)}var $=":not(slot,defs,g,rect,path,circle,ellipse,line,polygon,text,tspan,use,svg image,svg title,desc,template,template *)";function P(d){let t=[...d.querySelectorAll(`${$}[id]`)];for(let e=0;e<t.length;e++)t[e].part.add(t[e].id);let s=[...d.querySelectorAll(`${$}[class]`)];for(let e=0;e<s.length;e++)s[e].part.add(...s[e].classList)}var z=(n=>(n.BeforeAll="beforeall",n.AfterAll="afterall",n.BeforeTest="beforetest",n.AfterTest="aftertest",n.Cancel="cancel",n))(z||{}),H=Symbol("No Test Defined"),D=new CSSStyleSheet;D.replaceSync(S);var B="code-tests",R=class extends HTMLElement{componentParts=new Map;getElement(t){if(this.componentParts.get(t)==null){let s=this.findElement(t);s!=null&&this.componentParts.set(t,s)}return this.componentParts.get(t)}findElement(t){return this.shadowRoot.getElementById(t)}#e=new Map;#h={[v]:C(),[y]:C(),[w]:C(),[k]:C()};#s=!0;constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=F,this.shadowRoot.adoptedStyleSheets.push(D),this.#u=this.#f.bind(this)}connectedCallback(){if(P(this.shadowRoot),this.addEventListener("click",this.#u),this.getAttribute("auto")=="false")return;let t=this.getAttribute("src")??this.getAttribute("test")??this.getAttribute("tests")??this.getAttribute("run")??this.getAttribute("path");t!=null&&this.loadTests(t)}disconnectedCallback(){this.removeEventListener("click",this.#u)}#u;#f(t){let s=t.composedPath().find(o=>o instanceof HTMLButtonElement&&o.classList.contains("run"));if(s==null)return;let e=s.closest("li");if(e==null){if(s.hasAttribute("data-all")==!0)if(this.classList.contains("running")){if(this.classList.contains("canceled"))return;this.cancel()}else this.runTests();return}let r=e.dataset.testId;if(r==null)return;let n=this.#r.get(r);n!=null&&(this.#t=!1,this.classList.remove("canceled"),this.part.remove("canceled"),this.#d(r,n))}#m(){return this.getAttribute("src")??this.getAttribute("test")??this.getAttribute("tests")??this.getAttribute("run")??this.getAttribute("path")}async loadTests(t){let s=t??this.#m();if(s!=null)try{this.getElement("tests").innerHTML="",this.#r.clear(),this.classList.remove("has-before-hook"),this.classList.remove("has-after-hook");let e=window.location.href.lastIndexOf("/"),n=window.location.href.substring(e).indexOf(".")!=-1==!0?window.location.href.substring(0,e+1):window.location.href,o=n+s.substring(0,s.lastIndexOf("/")+1),a=n+s,l=await(await fetch(a)).text();l=l.replaceAll(/['"`](((\.\/)|(\.\.\/))+(.*))['"`]/g,`'${o}$1'`);let c=new File([l],s.substring(s.lastIndexOf("/")),{type:"text/javascript"}),h=await import(URL.createObjectURL(c)),f=h.tests??h.default;if(f==null)throw new Error(`Unable to find tests definition in file at path: ${s}`);let E=f[v];if(E!=null){if(this.#e.get(v)==null){let p=new Map;p.set(E,new Set),this.#e.set(v,p)}this.classList.add("has-before-hook")}let b=f[y];if(b!=null&&this.#e.get(y)==null){let p=new Map;p.set(b,new Set),this.#e.set(y,p)}let i=f[k];if(i!=null){if(this.#e.get(k)==null){let p=new Map;p.set(i,new Set),this.#e.set(k,p)}this.classList.add("has-after-hook")}let A=f[w];if(A!=null&&this.#e.get(w)==null){let p=new Map;p.set(A,new Set),this.#e.set(w,p)}for(let[x,p]of Object.entries(f)){let M=this.#b(x,p);if(E!=null){let m=this.#e.get(v);if(m!=null){let g=m.get(E);g?.add(M)}}if(b!=null){let m=this.#e.get(y);if(m!=null){let g=m.get(b);g?.add(M)}}if(i!=null){let m=this.#e.get(k);if(m!=null){let g=m.get(i);g?.add(M)}}if(A!=null){let m=this.#e.get(w);if(m!=null){let g=m.get(A);g?.add(M)}}}}catch(e){this.#c("An error occurred while loading the tasks:",e)}}#t=!1;cancel(){this.#t=!0,this.classList.add("canceled"),this.part.add("canceled"),this.dispatchEvent(new CustomEvent("cancel",{bubbles:!0,composed:!0}))}async runTests(){this.dispatchEvent(new CustomEvent("beforeall",{bubbles:!0,composed:!0})),this.#s=!0,this.classList.add("running"),this.#t=!1,this.classList.remove("canceled"),this.part.remove("canceled"),this.toggleAttribute("success",!1);let t=this.findElement("play-button-label");t!=null&&(t.textContent="Cancel"),this.#g();let s=this.hasAttribute("in-order"),e=this.#e.get(v);if(e!=null){let o;try{let a=this.getElement("before-all-details");a.classList.add("running"),a.part.add("running");for(let[l,c]of e){if(this.#t==!0)throw new Error("Test has been cancelled");o=await l(this,a),this.#o(o,!0,"before")}a.part.remove("running"),a.classList.remove("running")}catch(a){this.#o(o,!1,"before",a),console.error(a),this.#s=!1,this.classList.remove("running"),this.part.remove("running"),t!=null&&(t.textContent="Run Tests"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}}if(s==!1){let o=[];for(let[a,l]of this.#r)o.push(this.#d(a,l));await Promise.all(o)}else for(let[o,a]of this.#r){if(this.#s==!1)break;await this.#d(o,a)}if(this.#s==!1){this.classList.remove("running"),this.part.remove("running"),t!=null&&(t.textContent="Run Tests"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}let r=this.#e.get(k);if(r!=null){let o;try{let a=this.getElement("after-all-details");a.classList.add("running"),a.part.add("running");for(let[l,c]of r){if(this.#t==!0)throw new Error("Test has been cancelled");o=await l(this,a),this.#o(o,!0,"after")}a.part.remove("running"),a.classList.remove("running")}catch(a){this.#o(o,!1,"after",a),console.error(a),this.#s=!1,this.classList.remove("running"),this.part.remove("running"),t!=null&&(t.textContent="Run Tests"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}}let n=this.shadowRoot.querySelectorAll('[success="false"]');this.setAttribute("success",n.length==0?"true":"false"),this.classList.remove("running"),this.part.remove("running"),t!=null&&(t.textContent="Run Tests"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}))}#g(){for(let[e,r]of this.#r){let n=this.getElement("tests").querySelector(`[data-test-id="${e}"]`);if(n==null){this.#c(`Unable to find test element for test: ${e}`);return}n.toggleAttribute("success",!1),n.classList.remove("success","fail"),n.part.remove("success","fail")}let t=this.getElement("before-all-details");t.toggleAttribute("success",!1),t.classList.remove("success","fail"),t.part.remove("success","fail");let s=this.getElement("after-all-details");s.toggleAttribute("success",!1),s.classList.remove("success","fail"),s.part.remove("success","fail")}async#d(t,s){let e=this.getElement("tests").querySelector(`[data-test-id="${t}"]`);if(e==null){this.#c(`Unable to find test element for test: ${t}`);return}e.toggleAttribute("success",!1),e.classList.add("running"),e.part.add("running"),e.classList.remove("success","fail"),e.part.remove("success","fail");let r=e.querySelector(".result-icon");r?.classList.remove("success","fail"),r?.part.remove("success","fail"),r?.classList.add("running"),r?.part.add("running");let n=e.querySelector(".error-message");n!=null&&(n.textContent="");let o=e.querySelector("details");o!=null&&(o.open=!1);let a=H,l,c=H,u;try{if(this.dispatchEvent(new CustomEvent("beforetest",{bubbles:!0,cancelable:!0,composed:!0,detail:{testElement:e}}))==!1||this.#t==!0)throw new Error("Test has been cancelled");let f=this.#e.get(y);if(f!=null){for(let[b,i]of f)if(i.has(t)){a=await b(this,e);break}}if(this.#t==!0)throw new Error("Test has been cancelled");if(l=await s(this,e),this.#t==!0)throw new Error("Test has been cancelled");let E=this.#e.get(w);if(E!=null){for(let[b,i]of E)if(i.has(t)){c=await b(this,e);break}}u="before",a!=H&&this.#a(e,a,!0,void 0,u),u=void 0,this.#a(e,l,!0,void 0,u),u="after",c!=H&&this.#a(e,c,!0,void 0,u)}catch(h){this.#a(e,l,!1,h,u),console.error(h),this.#s=!1}finally{e?.classList.remove("running"),e?.part.remove("running"),r?.classList.remove("running"),r?.part.remove("running"),this.dispatchEvent(new CustomEvent("aftertest",{bubbles:!0,cancelable:!0,composed:!0,detail:{testElement:e}}))}}#a(t,s,e,r,n){if(s instanceof HTMLElement)this.#l(t,s,e,n);else if(s==null){let a=n==null?"Passed":"Hook Ran Successfully",l=this.#n(e==!0?`${a}`:`Failed${r!=null?`:
|
|
423
|
-
${
|
|
424
|
-
${
|
|
425
|
-
Expected:${
|
|
426
|
-
Result:${
|
|
427
|
-
${
|
|
428
|
-
${
|
|
429
|
-
Expected:${
|
|
430
|
-
Result:${
|
|
431
|
-
${
|
|
464
|
+
</template>`;var b=class extends Promise{async toBeDefined(e){if(await this==null)throw new Error(`${e??"Value"} is undefined`)}async toBe(e,r=!1){let t=await this;if((r==!0?t===e:t==e)==!1)throw new Error(` Value is not equal.
|
|
465
|
+
Expected: ${e}
|
|
466
|
+
Result: ${t}`)}async toContainText(e){let r=await this}async toHaveAttribute(e){let r=await this;if(!(r instanceof HTMLElement))throw new Error("Unable to check for attribute on non-HTMLElement target");if(r.getAttribute(e))throw new Error("Taret does not have attribute")}},y=class f{static timeoutMS=500;static#e;static#r;static expect(e){return new b(async(t,s)=>{if(e instanceof Promise){let n=await e;t(n);return}t(e)})}static expectSync(e){return new b(async(t,s)=>{if(e instanceof Promise){let n=await e;t(n);return}t(e)})}static expectBefore(e){return new b(async(t,s)=>{if(e instanceof Promise){let n=await e;t(n);return}t(e)})}static async prompt(e,r,t,s){return new Promise((n,l)=>{let i=e.findElement("prompt-template"),o=f.createElementFromTemplate(i);o.querySelector(".label").textContent=t;let a=u=>{let c=u.composedPath();if(c.find(h=>h instanceof HTMLButtonElement&&h.classList.contains("accept"))!=null){let h=s?.onAccept?.()??!0;o.removeEventListener("click",a),n(h);return}if(c.find(h=>h instanceof HTMLButtonElement&&h.classList.contains("reject"))!=null){let h=s?.onReject?.()??!1;o.removeEventListener("click",a),n(h);return}};o.addEventListener("click",a),s?.acceptLabel!=null&&(o.querySelector(".accept").textContent=s.acceptLabel),s?.rejectLabel!=null&&(o.querySelector(".reject").textContent=s.rejectLabel);let p=r instanceof HTMLDetailsElement?r:r.querySelector(".test-details");p!=null&&(p.open=!0),r.querySelector(".result")?.append(o)})}static createElementFromTemplate(e,r){let t=e instanceof HTMLTemplateElement?e:document.querySelector(e);if(t==null)throw new Error(`Unable to find template element from selector: ${e}`);let s=t.content.cloneNode(!0).querySelector("*");if(s==null)throw new Error("Unable to find first child of template element");return r?.append(s),s}};function S(f){return y.expect(f)}function $(f,e,r,t){return y.prompt(f,e,r,t)}var A=":not(slot,defs,g,rect,path,circle,ellipse,line,polygon,text,tspan,use,svg image,svg title,desc,template,template *)";function L(f){let e=[...f.querySelectorAll(`${A}[id]`)];for(let t=0;t<e.length;t++)e[t].part.add(e[t].id);let r=[...f.querySelectorAll(`${A}[class]`)];for(let t=0;t<r.length;t++)r[t].part.add(...r[t].classList)}var P=(l=>(l.BeforeAll="beforeall",l.AfterAll="afterall",l.BeforeEach="beforeeach",l.AfterEach="aftereach",l.RequiredBeforeAny="requiredbeforeany",l.RequiredAfterAny="requiredafterany",l))(P||{}),F=(n=>(n.BeforeAll="beforeall",n.AfterAll="afterall",n.BeforeTest="beforetest",n.AfterTest="aftertest",n.Cancel="cancel",n))(F||{}),v=Symbol("No Test Defined"),H=new CSSStyleSheet;H.replaceSync(w);var C="code-tests",k=class extends HTMLElement{componentParts=new Map;getElement(e){if(this.componentParts.get(e)==null){let r=this.findElement(e);r!=null&&this.componentParts.set(e,r)}return this.componentParts.get(e)}findElement(e){return this.shadowRoot.getElementById(e)}#e={};#r=!0;constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=x,this.shadowRoot.adoptedStyleSheets.push(H),this.#c=this.#h.bind(this)}connectedCallback(){if(L(this.shadowRoot),this.addEventListener("click",this.#c),this.getAttribute("auto")=="false")return;let e=this.#d();e!=null&&this.loadTests(e)}disconnectedCallback(){this.removeEventListener("click",this.#c)}#c;#h(e){let r=e.composedPath().find(l=>l instanceof HTMLButtonElement&&l.classList.contains("run"));if(r==null)return;let t=r.closest("li");if(t==null){if(r.hasAttribute("data-all")==!0)if(this.classList.contains("running")){if(this.classList.contains("canceled"))return;this.cancel()}else this.runTests();return}let s=t.dataset.testId;if(s==null)return;let n=this.#s.get(s);n!=null&&(this.isCanceled=!1,this.classList.remove("canceled"),this.part.remove("canceled"),this.#u(s,n))}#d(){return this.getAttribute("src")??this.getAttribute("test")??this.getAttribute("tests")??this.getAttribute("run")??this.getAttribute("path")}async loadTests(e){let r=e??this.#d();if(r!=null)try{this.getElement("tests").innerHTML="",this.#s.clear(),this.classList.remove("has-before-hook"),this.classList.remove("has-after-hook");let t=window.location.href.lastIndexOf("/"),n=window.location.href.substring(t).indexOf(".")!=-1==!0?window.location.href.substring(0,t+1):window.location.href,l=n+r.substring(0,r.lastIndexOf("/")+1),i=n+r,o=await(await fetch(i)).text();o=o.replaceAll(/['"`](((\.\/)|(\.\.\/))+(.*))['"`]/g,`'${l}$1'`);let a=new File([o],r.substring(r.lastIndexOf("/")),{type:"text/javascript"}),u=await import(URL.createObjectURL(a)),c=u.tests??u.default;if(c==null)throw new Error(`Unable to find tests definition in file at path: ${r}`);let m=c.beforeall;m!=null&&(this.#e.beforeall=m,delete c.beforeall,this.classList.add("has-before-hook")),c.afterall!=null&&(this.#e.afterall=m,delete c.afterall,this.classList.add("has-after-hook")),c.beforeeach!=null&&(this.#e.beforeeach=m,delete c.beforeeach),c.aftereach!=null&&(this.#e.aftereach=m,delete c.aftereach);let d=c.requiredbeforeany;d!=null&&(this.#e.requiredbeforeany=d,delete c.requiredbeforeany,this.classList.add("has-required-before-hook"),this.part.add("has-required-before-hook"));let T=c.requiredafterany;T!=null&&(this.#e.requiredafterany=T,delete c.requiredafterany,this.classList.add("has-required-after-hook"),this.part.add("has-required-after-hook"));for(let[q,R]of Object.entries(c))this.#m(q,R)}catch(t){this.#i("An error occurred while loading the tasks:",t)}}isCanceled=!1;cancel(){this.isCanceled=!0,this.classList.add("canceled"),this.part.add("canceled"),this.dispatchEvent(new CustomEvent("cancel",{bubbles:!0,composed:!0}))}async runTests(){this.dispatchEvent(new CustomEvent("beforeall",{bubbles:!0,composed:!0})),this.#r=!0,this.classList.add("running"),this.isCanceled=!1,this.classList.remove("canceled"),this.part.remove("canceled"),this.toggleAttribute("success",!1);let e=this.findElement("play-button-label");e!=null&&(e.textContent="Cancel"),this.#f();let r=this.hasAttribute("in-order"),t=this.#e.requiredbeforeany;if(t!=null){let o;try{let a=this.getElement("required-before-any-details");if(a.classList.add("running"),a.part.add("running"),this.isCanceled==!0)throw new Error("Test has been cancelled");o=await t(this,a),this.#t(o,!0,"before",!0),a.part.remove("running"),a.classList.remove("running")}catch(a){this.#t(o,!1,"before",!0,a),console.error(a),this.#r=!1,this.classList.remove("running"),this.part.remove("running"),e!=null&&(e.textContent="Run Tests"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}}let s=this.#e.beforeall;if(s!=null){let o;try{let a=this.getElement("before-all-details");if(a.classList.add("running"),a.part.add("running"),this.isCanceled==!0)throw new Error("Test has been cancelled");o=await s(this,a),this.#t(o,!0,"before",!1),a.part.remove("running"),a.classList.remove("running")}catch(a){this.#t(o,!1,"before",!1,a),console.error(a),this.#r=!1,this.classList.remove("running"),this.part.remove("running"),e!=null&&(e.textContent="Run Tests"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}}if(r==!1){let o=[];for(let[a,p]of this.#s)o.push(this.#u(a,p));await Promise.all(o)}else for(let[o,a]of this.#s){if(this.#r==!1)break;await this.#u(o,a,!1)}if(this.#r==!1){this.classList.remove("running"),this.part.remove("running"),e!=null&&(e.textContent="Run Tests"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}let n=this.#e.afterall;if(n!=null){let o;try{let a=this.getElement("after-all-details");if(a.classList.add("running"),a.part.add("running"),this.isCanceled==!0)throw new Error("Test has been cancelled");o=await n(this,a),this.#t(o,!0,"after",!1),a.part.remove("running"),a.classList.remove("running")}catch(a){this.#t(o,!1,"after",!1,a),console.error(a);let p=this.#e.requiredafterany;if(p!=null){let u;try{let c=this.getElement("required-after-any-details");if(c.classList.add("running"),c.part.add("running"),this.isCanceled==!0)throw new Error("Test has been cancelled");u=await p(this,c),this.#t(u,!0,"after",!0),c.part.remove("running"),c.classList.remove("running")}catch(c){this.#t(u,!1,"after",!0,c),console.error(c)}}this.#r=!1,this.classList.remove("running"),this.part.remove("running"),e!=null&&(e.textContent="Run Tests"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}}let l=this.#e.requiredafterany;if(l!=null){let o;try{let a=this.getElement("required-after-any-details");if(a.classList.add("running"),a.part.add("running"),this.isCanceled==!0)throw new Error("Test has been cancelled");o=await l(this,a),this.#t(o,!0,"after",!0),a.part.remove("running"),a.classList.remove("running")}catch(a){this.#t(o,!1,"after",!0,a),console.error(a),this.#r=!1}}let i=this.shadowRoot.querySelectorAll('[success="false"]');this.setAttribute("success",i.length==0?"true":"false"),this.classList.remove("running"),this.part.remove("running"),e!=null&&(e.textContent="Run Tests"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}))}#f(){for(let[t,s]of this.#s){let n=this.getElement("tests").querySelector(`[data-test-id="${t}"]`);if(n==null){this.#i(`Unable to find test element for test: ${t}`);return}n.toggleAttribute("success",!1),n.classList.remove("success","fail"),n.part.remove("success","fail")}let e=this.getElement("before-all-details");e.toggleAttribute("success",!1),e.classList.remove("success","fail"),e.part.remove("success","fail");let r=this.getElement("after-all-details");r.toggleAttribute("success",!1),r.classList.remove("success","fail"),r.part.remove("success","fail")}async#u(e,r,t=!0){let s=this.getElement("tests").querySelector(`[data-test-id="${e}"]`);if(s==null){this.#i(`Unable to find test element for test: ${e}`);return}s.toggleAttribute("success",!1),s.classList.add("running"),s.part.add("running"),s.classList.remove("success","fail"),s.part.remove("success","fail");let n=s.querySelector(".result-icon");n?.classList.remove("success","fail"),n?.part.remove("success","fail"),n?.classList.add("running"),n?.part.add("running");let l=s.querySelector(".error-message");l!=null&&(l.textContent="");let i=s.querySelector("details");i!=null&&(i.open=!1);let o=v,a,p=v,u;try{let c=this.dispatchEvent(new CustomEvent("beforetest",{bubbles:!0,cancelable:!0,composed:!0,detail:{testElement:s}}));if(t==!0){let h=this.#e.requiredbeforeany;if(h!=null){let g;try{let d=this.getElement("required-before-any-details");if(d.classList.add("running"),d.part.add("running"),this.isCanceled==!0)throw new Error("Test has been cancelled");g=await h(this,d),this.#t(g,!0,"before",!0),d.part.remove("running"),d.classList.remove("running")}catch(d){this.#t(g,!0,"before",!0,d),console.error(d),this.#r=!1;return}}}if(this.#r==!1)throw new Error("Tests have been disabled from continuing to run.");if(c==!1||this.isCanceled==!0)throw new Error("Test has been cancelled");let m=this.#e.beforeeach;if(m!=null&&(o=await m(this,s)),this.isCanceled==!0)throw new Error("Test has been cancelled");if(a=await r(this,s),this.isCanceled==!0)throw new Error("Test has been cancelled");let E=this.#e.aftereach;if(E!=null&&(p=await E(this,s)),t==!0){let h=this.#e.requiredafterany;if(h!=null){let g;try{let d=this.getElement("required-before-any-details");if(d.classList.add("running"),d.part.add("running"),this.isCanceled==!0)throw new Error("Test has been cancelled");g=await h(this,d),this.#t(g,!0,"after",!0),d.part.remove("running"),d.classList.remove("running")}catch(d){this.#t(g,!0,"after",!0,d),console.error(d),this.#r=!1;return}}}u="before",o!=v&&this.#a(s,o,!0,void 0,u),u=void 0,this.#a(s,a,!0,void 0,u),u="after",p!=v&&this.#a(s,p,!0,void 0,u)}catch(c){this.#a(s,a,!1,c,u),console.error(c),this.#r=!1}finally{s?.classList.remove("running"),s?.part.remove("running"),n?.classList.remove("running"),n?.part.remove("running"),this.dispatchEvent(new CustomEvent("aftertest",{bubbles:!0,cancelable:!0,composed:!0,detail:{testElement:s}}))}}#a(e,r,t,s,n){if(r instanceof HTMLElement)this.#o(e,r,t,n);else if(r==null){let i=n==null?"Passed":"Hook Ran Successfully",o=this.#n(t==!0?`${i}`:`Failed${s!=null?`:
|
|
467
|
+
${s.message}`:""}`,t,n);this.#o(e,o,t,n)}else if(typeof r=="string"){let i=this.#n(`${r}${s==null?"":`:
|
|
468
|
+
${s.message}`}`,t,n);this.#o(e,i,t,n)}else if(typeof r=="object"){let i=r;if(i.success!=null&&i.expected!=null&&i.value!=null){let o=n==null?"Passed":"Success",a=n==null?"Failed":"Fail",p=this.#n(`${i.success==!0?`${o}:`:`${a}:`}
|
|
469
|
+
Expected:${i.expected}
|
|
470
|
+
Result:${i.value}`,i.success,n);this.#o(e,p,t,n)}}let l=e.querySelector("details");l!=null&&(l.open=!0)}#t(e,r,t,s,n){if(e instanceof HTMLElement)this.#l(e,r,t,s);else{let i;if(e==null)i=this.#n(r==!0?"Hook Ran Successfully":`Failed${n!=null?`:
|
|
471
|
+
${n.message}`:""}`,r),this.#l(i,r,t,s);else if(typeof e=="string")i=this.#n(`${e}${n==null?"":`:
|
|
472
|
+
${n.message}`}`,r),this.#l(i,r,t,s);else if(typeof e=="object"){let o=e;o.success!=null&&o.expected!=null&&o.value!=null&&(i=this.#n(`${o.success==!0?"Success:":"Fail:"}
|
|
473
|
+
Expected:${o.expected}
|
|
474
|
+
Result:${o.value}`,o.success),this.#l(i,r,t,s))}}let l=this.getElement(`${t}-all-details`);l!=null&&(l.open=!0)}static create(e){return document.createElement("code-tests")}#s=new Map;#m(e,r){let t=D();this.#s.set(t,r);let s=this.#g(t,e);return this.getElement("tests").append(s),t}#g(e,r){let t=document.createElement("li");t.dataset.testId=e,t.classList.add("test"),t.part.add("test");let s=document.createElement("details");s.classList.add("test-details"),s.part.add("test-details");let n=document.createElement("summary");n.classList.add("test-summary"),n.part.add("test-summary");let l=document.createElement("div");l.classList.add("result-icon"),l.part.add("result-icon"),n.append(l);let i=document.createElement("span");i.classList.add("description","test-description"),i.textContent=r,n.append(i);let o=document.createElement("button");o.classList.add("run","test-run"),o.part.add("run","test-run"),o.textContent="Run Test",o.title="Run Test",n.append(o);let a=document.createElement("div");a.classList.add("before-result","test-before-result"),a.part.add("before-result","test-before-result");let p=document.createElement("div");p.classList.add("result","test-result"),p.part.add("result","test-result");let u=document.createElement("div");return u.classList.add("after-result","test-after-result"),u.part.add("after-result","test-after-result"),s.append(n),s.append(a),s.append(p),s.append(u),t.append(s),t}#o(e,r,t,s){e.setAttribute("success",t==!0?"true":"false"),e.classList.toggle("success",t),e.part.toggle("success",t),e.classList.toggle("fail",!t),e.part.toggle("fail",!t);let n=e.querySelector(".result-icon");n?.classList.toggle("success",t),n?.part.toggle("success",t),n?.classList.toggle("fail",!t),n?.part.toggle("fail",!t);let l=e.querySelector(`.${s==null?"result":s=="before"?"before-result":"after-result"}`);if(l==null){this.#i("Unable to find result element");return}l.innerHTML="",l.appendChild(r)}#n(e,r,t){let s=document.createElement("code");s.classList.add("code"),s.part.add("code");let n=document.createElement("pre");n.textContent=e;let l=r==!0?"success-message":"error-message";return n.classList.add("pre",l),n.part.add("pre",l),s.appendChild(n),s}#l(e,r,t,s){let n=s==!0?`required-${t}-any`:`${t}-all`,l=this.getElement(`${n}-details`),i=this.getElement(`${n}-results`);l.setAttribute("success",r==!0?"true":"false"),l.classList.toggle("success",r),l.part.toggle("success",r),l.classList.toggle("fail",!r),l.part.toggle("fail",!r),i.innerHTML="",i.appendChild(e)}#i(e,r){r instanceof Error&&(e+=`
|
|
475
|
+
${r.message}`,console.error(r));let t=document.createElement("li");t.classList.add("error","process-error"),t.part.add("error","process-error");let s=document.createElement("code");s.classList.add("code","process-error-code"),s.part.add("code","process-error-code");let n=document.createElement("pre");n.classList.add("pre","process-error-pre"),n.part.add("pre","process-error-pre"),n.textContent=e,s.append(n),t.append(s),this.getElement("tests").append(t)}#p(e){if(e=="ordered"){let r=this.shadowRoot.querySelector("ul");if(r==null)return;let t=this.shadowRoot?.querySelectorAll("li"),s=document.createElement("ol");t!=null&&s.append(...t),s.id="tests",r.replaceWith(s)}else{let r=this.shadowRoot.querySelector("ol");if(r==null)return;let t=this.shadowRoot?.querySelectorAll("li"),s=document.createElement("ul");s.id="tests",t!=null&&s.append(...t),r.replaceWith(s)}}static observedAttributes=["in-order"];attributeChangedCallback(e,r,t){e=="in-order"&&(t==null?this.#p("unordered"):this.#p("ordered"))}};function D(){let f=new Uint8Array(20);crypto.getRandomValues(f);let e=[].slice.apply(f).map(function(t){return String.fromCharCode(t)}).join("");return btoa(e).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}customElements.get(C)==null&&customElements.define(C,k);export{F as CodeTestEventType,y as CodeTests,k as CodeTestsElement,P as HookType,S as expect,$ as prompt};
|