@magnit-ce/code-tests 0.0.5 → 0.0.6

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.
@@ -27,7 +27,8 @@ __export(code_tests_exports, {
27
27
  CodeTestEventType: () => CodeTestEventType,
28
28
  CodeTests: () => CodeTests,
29
29
  CodeTestsElement: () => CodeTestsElement,
30
- expect: () => expect
30
+ expect: () => expect,
31
+ prompt: () => prompt
31
32
  });
32
33
  module.exports = __toCommonJS(code_tests_exports);
33
34
 
@@ -393,7 +394,7 @@ pre
393
394
  }`;
394
395
 
395
396
  // src/code-tests.html?raw
396
- var code_tests_default2 = '<slot name="header">\n <header id="header">\n <span id="title"><slot name="title"><span id="title-text">Tests</span></slot></span>\n <slot name="play-button">\n <button type="button" class="run" data-all>\n <slot name="play-button-label">\n <span id="play-button-label" class="button-label label icon">Run Tests</span>\n </slot>\n </button>\n </slot>\n <slot name="details"></slot>\n </header>\n</slot>\n<details id="before-all-details" class="hook">\n <summary id="before-all-summary">\n <span id="before-all-result-icon" class="result-icon"></span>\n <span id="before-all-description" class="description">Results from Before All Hook</span>\n </summary>\n <div id="before-all-results" class="results"></div>\n</details>\n<ul id="tests"></ul>\n<details id="after-all-details" class="hook">\n <summary id="after-all-summary">\n <span id="after-all-result-icon" class="result-icon"></span>\n <span id="after-all-description" class="description">Results from After All Hook</span>\n </summary>\n <div id="after-all-results" class="results"></div>\n</details>';
397
+ var code_tests_default2 = '<slot name="header">\n <header id="header">\n <span id="title"><slot name="title"><span id="title-text">Tests</span></slot></span>\n <slot name="play-button">\n <button type="button" class="run" data-all>\n <slot name="play-button-label">\n <span id="play-button-label" class="button-label label icon">Run Tests</span>\n </slot>\n </button>\n </slot>\n <slot name="details"></slot>\n </header>\n</slot>\n<details id="before-all-details" class="hook">\n <summary id="before-all-summary">\n <span id="before-all-result-icon" class="result-icon"></span>\n <span id="before-all-description" class="description">Results from Before All Hook</span>\n </summary>\n <div id="before-all-results" class="results"></div>\n</details>\n<ul id="tests"></ul>\n<details id="after-all-details" class="hook">\n <summary id="after-all-summary">\n <span id="after-all-result-icon" class="result-icon"></span>\n <span id="after-all-description" class="description">Results from After All Hook</span>\n </summary>\n <div id="after-all-results" class="results"></div>\n</details>\n\n<template id="prompt-template">\n <div class="prompt" part="prompt">\n <div class="prompt-display">\n <span class="icon prompt-icon"></span>\n <span class="label prompt-label"></span>\n </div>\n <div class="prompt-actions">\n <button class="prompt-button accept" type="button">Accept</button>\n <button class="prompt-button reject" type="button">Reject</button>\n </div>\n </div>\n</template>';
397
398
 
398
399
  // src/api.ts
399
400
  var TestPromise = class extends Promise {
@@ -429,7 +430,7 @@ var BEFOREALL = Symbol("beforeAll");
429
430
  var BEFOREEACH = Symbol("beforeEach");
430
431
  var AFTERALL = Symbol("afterAll");
431
432
  var AFTEREACH = Symbol("afterEach");
432
- var CodeTests = class {
433
+ var CodeTests = class _CodeTests {
433
434
  static timeoutMS = 500;
434
435
  static #expectInterval;
435
436
  static #expectPromise;
@@ -466,10 +467,61 @@ var CodeTests = class {
466
467
  });
467
468
  return promise;
468
469
  }
470
+ static async prompt(host, parent, message, options) {
471
+ return new Promise((resolve, reject) => {
472
+ const template = host.findElement("prompt-template");
473
+ const promptElement = _CodeTests.createElementFromTemplate(template);
474
+ promptElement.querySelector(".label").textContent = message;
475
+ const clickHandler = (event) => {
476
+ const composedPath = event.composedPath();
477
+ const acceptButton = composedPath.find((item) => item instanceof HTMLButtonElement && item.classList.contains("accept"));
478
+ if (acceptButton != null) {
479
+ const result = options?.onAccept?.() ?? true;
480
+ promptElement.removeEventListener("click", clickHandler);
481
+ resolve(result);
482
+ return;
483
+ }
484
+ const rejectButton = composedPath.find((item) => item instanceof HTMLButtonElement && item.classList.contains("reject"));
485
+ if (rejectButton != null) {
486
+ const result = options?.onReject?.() ?? false;
487
+ promptElement.removeEventListener("click", clickHandler);
488
+ resolve(result);
489
+ return;
490
+ }
491
+ };
492
+ promptElement.addEventListener("click", clickHandler);
493
+ if (options?.acceptLabel != null) {
494
+ promptElement.querySelector(".accept").textContent = options.acceptLabel;
495
+ }
496
+ if (options?.rejectLabel != null) {
497
+ promptElement.querySelector(".reject").textContent = options.rejectLabel;
498
+ }
499
+ const details = parent instanceof HTMLDetailsElement ? parent : parent.querySelector(".test-details");
500
+ if (details != null) {
501
+ details.open = true;
502
+ }
503
+ parent.querySelector(".result")?.append(promptElement);
504
+ });
505
+ }
506
+ static createElementFromTemplate(target, parent) {
507
+ const templateNode = target instanceof HTMLTemplateElement ? target : document.querySelector(target);
508
+ if (templateNode == null) {
509
+ throw new Error(`Unable to find template element from selector: ${target}`);
510
+ }
511
+ const firstChild = templateNode.content.cloneNode(true).querySelector("*");
512
+ if (firstChild == null) {
513
+ throw new Error(`Unable to find first child of template element`);
514
+ }
515
+ parent?.append(firstChild);
516
+ return firstChild;
517
+ }
469
518
  };
470
519
  function expect(value) {
471
520
  return CodeTests.expect(value);
472
521
  }
522
+ function prompt(host, parent, message, options) {
523
+ return CodeTests.prompt(host, parent, message, options);
524
+ }
473
525
 
474
526
  // node_modules/.pnpm/ce-part-utils@0.0.0/node_modules/ce-part-utils/dist/ce-part-utils.js
475
527
  var DEFAULT_ELEMENT_SELECTOR = ":not(slot,defs,g,rect,path,circle,ellipse,line,polygon,text,tspan,use,svg image,svg title,desc,template,template *)";
@@ -687,7 +739,7 @@ var CodeTestsElement = class extends HTMLElement {
687
739
  beforeAllHookElement.classList.add("running");
688
740
  beforeAllHookElement.part.add("running");
689
741
  for (const [hook, ids] of beforeHooks) {
690
- hookResult = await hook();
742
+ hookResult = await hook(this, beforeAllHookElement);
691
743
  this.#handleHookResult(hookResult, true, "before");
692
744
  }
693
745
  beforeAllHookElement.part.remove("running");
@@ -730,7 +782,7 @@ var CodeTestsElement = class extends HTMLElement {
730
782
  afterAllHookElement.classList.add("running");
731
783
  afterAllHookElement.part.add("running");
732
784
  for (const [hook, ids] of afterHooks) {
733
- hookResult = await hook();
785
+ hookResult = await hook(this, afterAllHookElement);
734
786
  this.#handleHookResult(hookResult, true, "after");
735
787
  }
736
788
  afterAllHookElement.part.remove("running");
@@ -806,17 +858,17 @@ var CodeTestsElement = class extends HTMLElement {
806
858
  if (beforeHooks != null) {
807
859
  for (const [hook, ids] of beforeHooks) {
808
860
  if (ids.has(testId)) {
809
- beforeResult = await hook();
861
+ beforeResult = await hook(this, testElement);
810
862
  break;
811
863
  }
812
864
  }
813
865
  }
814
- testResult = await test();
866
+ testResult = await test(this, testElement);
815
867
  const afterHooks = this.#hooks.get(AFTEREACH);
816
868
  if (afterHooks != null) {
817
869
  for (const [hook, ids] of afterHooks) {
818
870
  if (ids.has(testId)) {
819
- afterResult = await hook();
871
+ afterResult = await hook(this, testElement);
820
872
  break;
821
873
  }
822
874
  }
@@ -1082,5 +1134,6 @@ if (customElements.get(COMPONENT_TAG_NAME) == null) {
1082
1134
  CodeTestEventType,
1083
1135
  CodeTests,
1084
1136
  CodeTestsElement,
1085
- expect
1137
+ expect,
1138
+ prompt
1086
1139
  });
@@ -14,8 +14,17 @@ declare class CodeTests {
14
14
  static expect<T>(value: T): TestPromise<T>;
15
15
  static expectSync<T>(value: T): TestPromise<T>;
16
16
  static expectBefore<T>(value: T): TestPromise<T>;
17
+ static prompt(host: CodeTestsElement, parent: HTMLElement, message: string, options?: PromptOptions): Promise<boolean>;
18
+ static createElementFromTemplate(target: string | HTMLTemplateElement, parent?: HTMLElement): HTMLElement;
17
19
  }
18
20
  declare function expect(value: any): TestPromise<any>;
21
+ type PromptOptions = {
22
+ acceptLabel?: string;
23
+ rejectLabel?: string;
24
+ onAccept?: () => void;
25
+ onReject?: () => void;
26
+ };
27
+ declare function prompt(host: CodeTestsElement, parent: HTMLElement, message: string, options?: PromptOptions): Promise<boolean>;
19
28
 
20
29
  type CodeTestsProperties = {};
21
30
  declare enum CodeTestEventType {
@@ -39,4 +48,4 @@ declare class CodeTestsElement extends HTMLElement {
39
48
  attributeChangedCallback(attributeName: string, oldValue: string, newValue: string): void;
40
49
  }
41
50
 
42
- export { AFTERALL, AFTEREACH, BEFOREALL, BEFOREEACH, CodeTestEventType, CodeTests, CodeTestsElement, type CodeTestsProperties, expect };
51
+ export { AFTERALL, AFTEREACH, BEFOREALL, BEFOREEACH, CodeTestEventType, CodeTests, CodeTestsElement, type CodeTestsProperties, expect, prompt };
@@ -14,8 +14,17 @@ declare class CodeTests {
14
14
  static expect<T>(value: T): TestPromise<T>;
15
15
  static expectSync<T>(value: T): TestPromise<T>;
16
16
  static expectBefore<T>(value: T): TestPromise<T>;
17
+ static prompt(host: CodeTestsElement, parent: HTMLElement, message: string, options?: PromptOptions): Promise<boolean>;
18
+ static createElementFromTemplate(target: string | HTMLTemplateElement, parent?: HTMLElement): HTMLElement;
17
19
  }
18
20
  declare function expect(value: any): TestPromise<any>;
21
+ type PromptOptions = {
22
+ acceptLabel?: string;
23
+ rejectLabel?: string;
24
+ onAccept?: () => void;
25
+ onReject?: () => void;
26
+ };
27
+ declare function prompt(host: CodeTestsElement, parent: HTMLElement, message: string, options?: PromptOptions): Promise<boolean>;
19
28
 
20
29
  type CodeTestsProperties = {};
21
30
  declare enum CodeTestEventType {
@@ -39,4 +48,4 @@ declare class CodeTestsElement extends HTMLElement {
39
48
  attributeChangedCallback(attributeName: string, oldValue: string, newValue: string): void;
40
49
  }
41
50
 
42
- export { AFTERALL, AFTEREACH, BEFOREALL, BEFOREEACH, CodeTestEventType, CodeTests, CodeTestsElement, type CodeTestsProperties, expect };
51
+ export { AFTERALL, AFTEREACH, BEFOREALL, BEFOREEACH, CodeTestEventType, CodeTests, CodeTestsElement, type CodeTestsProperties, expect, prompt };
@@ -360,7 +360,7 @@ pre
360
360
  }`;
361
361
 
362
362
  // src/code-tests.html?raw
363
- var code_tests_default2 = '<slot name="header">\n <header id="header">\n <span id="title"><slot name="title"><span id="title-text">Tests</span></slot></span>\n <slot name="play-button">\n <button type="button" class="run" data-all>\n <slot name="play-button-label">\n <span id="play-button-label" class="button-label label icon">Run Tests</span>\n </slot>\n </button>\n </slot>\n <slot name="details"></slot>\n </header>\n</slot>\n<details id="before-all-details" class="hook">\n <summary id="before-all-summary">\n <span id="before-all-result-icon" class="result-icon"></span>\n <span id="before-all-description" class="description">Results from Before All Hook</span>\n </summary>\n <div id="before-all-results" class="results"></div>\n</details>\n<ul id="tests"></ul>\n<details id="after-all-details" class="hook">\n <summary id="after-all-summary">\n <span id="after-all-result-icon" class="result-icon"></span>\n <span id="after-all-description" class="description">Results from After All Hook</span>\n </summary>\n <div id="after-all-results" class="results"></div>\n</details>';
363
+ var code_tests_default2 = '<slot name="header">\n <header id="header">\n <span id="title"><slot name="title"><span id="title-text">Tests</span></slot></span>\n <slot name="play-button">\n <button type="button" class="run" data-all>\n <slot name="play-button-label">\n <span id="play-button-label" class="button-label label icon">Run Tests</span>\n </slot>\n </button>\n </slot>\n <slot name="details"></slot>\n </header>\n</slot>\n<details id="before-all-details" class="hook">\n <summary id="before-all-summary">\n <span id="before-all-result-icon" class="result-icon"></span>\n <span id="before-all-description" class="description">Results from Before All Hook</span>\n </summary>\n <div id="before-all-results" class="results"></div>\n</details>\n<ul id="tests"></ul>\n<details id="after-all-details" class="hook">\n <summary id="after-all-summary">\n <span id="after-all-result-icon" class="result-icon"></span>\n <span id="after-all-description" class="description">Results from After All Hook</span>\n </summary>\n <div id="after-all-results" class="results"></div>\n</details>\n\n<template id="prompt-template">\n <div class="prompt" part="prompt">\n <div class="prompt-display">\n <span class="icon prompt-icon"></span>\n <span class="label prompt-label"></span>\n </div>\n <div class="prompt-actions">\n <button class="prompt-button accept" type="button">Accept</button>\n <button class="prompt-button reject" type="button">Reject</button>\n </div>\n </div>\n</template>';
364
364
 
365
365
  // src/api.ts
366
366
  var TestPromise = class extends Promise {
@@ -396,7 +396,7 @@ var BEFOREALL = Symbol("beforeAll");
396
396
  var BEFOREEACH = Symbol("beforeEach");
397
397
  var AFTERALL = Symbol("afterAll");
398
398
  var AFTEREACH = Symbol("afterEach");
399
- var CodeTests = class {
399
+ var CodeTests = class _CodeTests {
400
400
  static timeoutMS = 500;
401
401
  static #expectInterval;
402
402
  static #expectPromise;
@@ -433,10 +433,61 @@ var CodeTests = class {
433
433
  });
434
434
  return promise;
435
435
  }
436
+ static async prompt(host, parent, message, options) {
437
+ return new Promise((resolve, reject) => {
438
+ const template = host.findElement("prompt-template");
439
+ const promptElement = _CodeTests.createElementFromTemplate(template);
440
+ promptElement.querySelector(".label").textContent = message;
441
+ const clickHandler = (event) => {
442
+ const composedPath = event.composedPath();
443
+ const acceptButton = composedPath.find((item) => item instanceof HTMLButtonElement && item.classList.contains("accept"));
444
+ if (acceptButton != null) {
445
+ const result = options?.onAccept?.() ?? true;
446
+ promptElement.removeEventListener("click", clickHandler);
447
+ resolve(result);
448
+ return;
449
+ }
450
+ const rejectButton = composedPath.find((item) => item instanceof HTMLButtonElement && item.classList.contains("reject"));
451
+ if (rejectButton != null) {
452
+ const result = options?.onReject?.() ?? false;
453
+ promptElement.removeEventListener("click", clickHandler);
454
+ resolve(result);
455
+ return;
456
+ }
457
+ };
458
+ promptElement.addEventListener("click", clickHandler);
459
+ if (options?.acceptLabel != null) {
460
+ promptElement.querySelector(".accept").textContent = options.acceptLabel;
461
+ }
462
+ if (options?.rejectLabel != null) {
463
+ promptElement.querySelector(".reject").textContent = options.rejectLabel;
464
+ }
465
+ const details = parent instanceof HTMLDetailsElement ? parent : parent.querySelector(".test-details");
466
+ if (details != null) {
467
+ details.open = true;
468
+ }
469
+ parent.querySelector(".result")?.append(promptElement);
470
+ });
471
+ }
472
+ static createElementFromTemplate(target, parent) {
473
+ const templateNode = target instanceof HTMLTemplateElement ? target : document.querySelector(target);
474
+ if (templateNode == null) {
475
+ throw new Error(`Unable to find template element from selector: ${target}`);
476
+ }
477
+ const firstChild = templateNode.content.cloneNode(true).querySelector("*");
478
+ if (firstChild == null) {
479
+ throw new Error(`Unable to find first child of template element`);
480
+ }
481
+ parent?.append(firstChild);
482
+ return firstChild;
483
+ }
436
484
  };
437
485
  function expect(value) {
438
486
  return CodeTests.expect(value);
439
487
  }
488
+ function prompt(host, parent, message, options) {
489
+ return CodeTests.prompt(host, parent, message, options);
490
+ }
440
491
 
441
492
  // node_modules/.pnpm/ce-part-utils@0.0.0/node_modules/ce-part-utils/dist/ce-part-utils.js
442
493
  var DEFAULT_ELEMENT_SELECTOR = ":not(slot,defs,g,rect,path,circle,ellipse,line,polygon,text,tspan,use,svg image,svg title,desc,template,template *)";
@@ -654,7 +705,7 @@ var CodeTestsElement = class extends HTMLElement {
654
705
  beforeAllHookElement.classList.add("running");
655
706
  beforeAllHookElement.part.add("running");
656
707
  for (const [hook, ids] of beforeHooks) {
657
- hookResult = await hook();
708
+ hookResult = await hook(this, beforeAllHookElement);
658
709
  this.#handleHookResult(hookResult, true, "before");
659
710
  }
660
711
  beforeAllHookElement.part.remove("running");
@@ -697,7 +748,7 @@ var CodeTestsElement = class extends HTMLElement {
697
748
  afterAllHookElement.classList.add("running");
698
749
  afterAllHookElement.part.add("running");
699
750
  for (const [hook, ids] of afterHooks) {
700
- hookResult = await hook();
751
+ hookResult = await hook(this, afterAllHookElement);
701
752
  this.#handleHookResult(hookResult, true, "after");
702
753
  }
703
754
  afterAllHookElement.part.remove("running");
@@ -773,17 +824,17 @@ var CodeTestsElement = class extends HTMLElement {
773
824
  if (beforeHooks != null) {
774
825
  for (const [hook, ids] of beforeHooks) {
775
826
  if (ids.has(testId)) {
776
- beforeResult = await hook();
827
+ beforeResult = await hook(this, testElement);
777
828
  break;
778
829
  }
779
830
  }
780
831
  }
781
- testResult = await test();
832
+ testResult = await test(this, testElement);
782
833
  const afterHooks = this.#hooks.get(AFTEREACH);
783
834
  if (afterHooks != null) {
784
835
  for (const [hook, ids] of afterHooks) {
785
836
  if (ids.has(testId)) {
786
- afterResult = await hook();
837
+ afterResult = await hook(this, testElement);
787
838
  break;
788
839
  }
789
840
  }
@@ -1048,5 +1099,6 @@ export {
1048
1099
  CodeTestEventType,
1049
1100
  CodeTests,
1050
1101
  CodeTestsElement,
1051
- expect
1102
+ expect,
1103
+ prompt
1052
1104
  };
@@ -1,4 +1,4 @@
1
- var H=`:host
1
+ var R=`:host
2
2
  {
3
3
  /*** gray ***/
4
4
  --uchu-light-gray-raw: 95.57% 0.003 286.35;
@@ -383,15 +383,28 @@ pre
383
383
  <span id="after-all-description" class="description">Results from After All Hook</span>
384
384
  </summary>
385
385
  <div id="after-all-results" class="results"></div>
386
- </details>`;var T=class extends Promise{async toBeDefined(t){if(await this==null)throw new Error(`${t??"Value"} is undefined`)}async toBe(t,s=!1){let e=await this;if((s==!0?e===t:e==t)==!1)throw new Error(` Value is not equal.
386
+ </details>
387
+
388
+ <template id="prompt-template">
389
+ <div class="prompt" part="prompt">
390
+ <div class="prompt-display">
391
+ <span class="icon prompt-icon"></span>
392
+ <span class="label prompt-label"></span>
393
+ </div>
394
+ <div class="prompt-actions">
395
+ <button class="prompt-button accept" type="button">Accept</button>
396
+ <button class="prompt-button reject" type="button">Reject</button>
397
+ </div>
398
+ </div>
399
+ </template>`;var T=class extends Promise{async toBeDefined(t){if(await this==null)throw new Error(`${t??"Value"} is undefined`)}async toBe(t,s=!1){let e=await this;if((s==!0?e===t:e==t)==!1)throw new Error(` Value is not equal.
387
400
  Expected: ${t}
388
- 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")}},y=Symbol("beforeAll"),v=Symbol("beforeEach"),k=Symbol("afterAll"),x=Symbol("afterEach"),M=class{static timeoutMS=500;static#e;static#p;static expect(t){return new T(async(e,a)=>{if(t instanceof Promise){let r=await t;e(r);return}e(t)})}static expectSync(t){return new T(async(e,a)=>{if(t instanceof Promise){let r=await t;e(r);return}e(t)})}static expectBefore(t){return new T(async(e,a)=>{if(t instanceof Promise){let r=await t;e(r);return}e(t)})}};function j(h){return M.expect(h)}var $=":not(slot,defs,g,rect,path,circle,ellipse,line,polygon,text,tspan,use,svg image,svg title,desc,template,template *)";function D(h){let t=[...h.querySelectorAll(`${$}[id]`)];for(let e=0;e<t.length;e++)t[e].part.add(t[e].id);let s=[...h.querySelectorAll(`${$}[class]`)];for(let e=0;e<s.length;e++)s[e].part.add(...s[e].classList)}var z=(a=>(a.BeforeAll="beforeall",a.AfterAll="afterall",a.BeforeTest="beforetest",a.AfterTest="aftertest",a))(z||{}),R=Symbol("No Test Defined"),B=new CSSStyleSheet;B.replaceSync(H);var P="code-tests",S=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;#p={[y]:L(),[v]:L(),[x]:L(),[k]:L()};#t=!0;constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=F,this.shadowRoot.adoptedStyleSheets.push(B),this.#c=this.#h.bind(this)}connectedCallback(){if(D(this.shadowRoot),this.addEventListener("click",this.#c),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.#c)}#c;#h(t){let s=t.composedPath().find(n=>n instanceof HTMLButtonElement&&n.classList.contains("run"));if(s==null)return;let e=s.closest("li");if(e==null){s.hasAttribute("data-all")==!0&&this.runTests();return}let a=e.dataset.testId;if(a==null)return;let r=this.#s.get(a);r!=null&&this.#u(a,r)}#f(){return this.getAttribute("src")??this.getAttribute("test")??this.getAttribute("tests")??this.getAttribute("run")??this.getAttribute("path")}async loadTests(t){let s=t??this.#f();if(s!=null)try{this.getElement("tests").innerHTML="",this.#s.clear(),this.classList.remove("has-before-hook"),this.classList.remove("has-after-hook");let e=window.location.href.lastIndexOf("/"),r=window.location.href.substring(e).indexOf(".")!=-1==!0?window.location.href.substring(0,e+1):window.location.href,n=r+s.substring(0,s.lastIndexOf("/")+1),o=r+s,l=await(await fetch(o)).text();l=l.replaceAll(/['"`](((\.\/)|(\.\.\/))+(.*))['"`]/g,`'${n}$1'`);let u=new File([l],s.substring(s.lastIndexOf("/")),{type:"text/javascript"}),f=await import(URL.createObjectURL(u)),g=f.tests??f.default;if(g==null)throw new Error(`Unable to find tests definition in file at path: ${s}`);let E=g[y];if(E!=null){if(this.#e.get(y)==null){let c=new Map;c.set(E,new Set),this.#e.set(y,c)}this.classList.add("has-before-hook")}let m=g[v];if(m!=null&&this.#e.get(v)==null){let c=new Map;c.set(m,new Set),this.#e.set(v,c)}let b=g[k];if(b!=null){if(this.#e.get(k)==null){let c=new Map;c.set(b,new Set),this.#e.set(k,c)}this.classList.add("has-after-hook")}let A=g[x];if(A!=null&&this.#e.get(x)==null){let c=new Map;c.set(A,new Set),this.#e.set(x,c)}for(let[w,c]of Object.entries(g)){let C=this.#m(w,c);if(E!=null){let d=this.#e.get(y);if(d!=null){let p=d.get(E);p?.add(C)}}if(m!=null){let d=this.#e.get(v);if(d!=null){let p=d.get(m);p?.add(C)}}if(b!=null){let d=this.#e.get(k);if(d!=null){let p=d.get(b);p?.add(C)}}if(A!=null){let d=this.#e.get(x);if(d!=null){let p=d.get(A);p?.add(C)}}}}catch(e){this.#i("An error occurred while loading the tasks:",e)}}async runTests(){this.dispatchEvent(new CustomEvent("beforeall",{bubbles:!0,composed:!0})),this.#t=!0,this.classList.add("running"),this.toggleAttribute("success",!1),this.#g();let t=this.hasAttribute("in-order"),s=this.#e.get(y);if(s!=null){let r;try{let n=this.getElement("before-all-details");n.classList.add("running"),n.part.add("running");for(let[o,l]of s)r=await o(),this.#n(r,!0,"before");n.part.remove("running"),n.classList.remove("running")}catch(n){this.#n(r,!1,"before",n),console.error(n),this.#t=!1,this.classList.remove("running"),this.part.remove("running"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}}if(t==!1){let r=[];for(let[n,o]of this.#s)r.push(this.#u(n,o));await Promise.all(r)}else for(let[r,n]of this.#s){if(this.#t==!1)break;await this.#u(r,n)}if(this.#t==!1){this.classList.remove("running"),this.part.remove("running"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}let e=this.#e.get(k);if(e!=null){let r;try{let n=this.getElement("after-all-details");n.classList.add("running"),n.part.add("running");for(let[o,l]of e)r=await o(),this.#n(r,!0,"after");n.part.remove("running"),n.classList.remove("running")}catch(n){this.#n(r,!1,"after",n),console.error(n),this.#t=!1,this.classList.remove("running"),this.part.remove("running"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}}let a=this.shadowRoot.querySelectorAll('[success="false"]');this.setAttribute("success",a.length==0?"true":"false"),this.classList.remove("running"),this.part.remove("running"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}))}#g(){for(let[e,a]of this.#s){let r=this.getElement("tests").querySelector(`[data-test-id="${e}"]`);if(r==null){this.#i(`Unable to find test element for test: ${e}`);return}r.toggleAttribute("success",!1),r.classList.remove("success","fail"),r.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#u(t,s){let e=this.getElement("tests").querySelector(`[data-test-id="${t}"]`);if(e==null){this.#i(`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 a=e.querySelector(".result-icon");a?.classList.remove("success","fail"),a?.part.remove("success","fail"),a?.classList.add("running"),a?.part.add("running");let r=e.querySelector(".error-message");r!=null&&(r.textContent="");let n=e.querySelector("details");n!=null&&(n.open=!1);let o=R,l,u=R,i;try{if(this.dispatchEvent(new CustomEvent("beforetest",{bubbles:!0,cancelable:!0,composed:!0,detail:{testElement:e}}))==!0){let g=this.#e.get(v);if(g!=null){for(let[m,b]of g)if(b.has(t)){o=await m();break}}l=await s();let E=this.#e.get(x);if(E!=null){for(let[m,b]of E)if(b.has(t)){u=await m();break}}i="before",o!=R&&this.#a(e,o,!0,void 0,i),i=void 0,this.#a(e,l,!0,void 0,i),i="after",u!=R&&this.#a(e,u,!0,void 0,i)}}catch(f){this.#a(e,l,!1,f,i),console.error(f),this.#t=!1}finally{e?.classList.remove("running"),e?.part.remove("running"),a?.classList.remove("running"),a?.part.remove("running"),this.dispatchEvent(new CustomEvent("aftertest",{bubbles:!0,cancelable:!0,composed:!0,detail:{testElement:e}}))}}#a(t,s,e,a,r){if(s instanceof HTMLElement)this.#o(t,s,e,r);else if(s==null){let o=r==null?"Passed":"Hook Ran Successfully",l=this.#r(e==!0?`${o}`:`Failed${a!=null?`:
389
- ${a.message}`:""}`,e,r);this.#o(t,l,e,r)}else if(typeof s=="string"){let o=this.#r(`${s}${a==null?"":`:
390
- ${a.message}`}`,e,r);this.#o(t,o,e,r)}else if(typeof s=="object"){let o=s;if(o.success!=null&&o.expected!=null&&o.value!=null){let l=r==null?"Passed":"Success",u=r==null?"Failed":"Fail",i=this.#r(`${o.success==!0?`${l}:`:`${u}:`}
401
+ 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")}},y=Symbol("beforeAll"),v=Symbol("beforeEach"),k=Symbol("afterAll"),x=Symbol("afterEach"),L=class d{static timeoutMS=500;static#e;static#p;static expect(t){return new T(async(e,r)=>{if(t instanceof Promise){let a=await t;e(a);return}e(t)})}static expectSync(t){return new T(async(e,r)=>{if(t instanceof Promise){let a=await t;e(a);return}e(t)})}static expectBefore(t){return new T(async(e,r)=>{if(t instanceof Promise){let a=await t;e(a);return}e(t)})}static async prompt(t,s,e,r){return new Promise((a,n)=>{let o=t.findElement("prompt-template"),l=d.createElementFromTemplate(o);l.querySelector(".label").textContent=e;let u=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",u),a(i);return}if(f.find(i=>i instanceof HTMLButtonElement&&i.classList.contains("reject"))!=null){let i=r?.onReject?.()??!1;l.removeEventListener("click",u),a(i);return}};l.addEventListener("click",u),r?.acceptLabel!=null&&(l.querySelector(".accept").textContent=r.acceptLabel),r?.rejectLabel!=null&&(l.querySelector(".reject").textContent=r.rejectLabel);let c=s instanceof HTMLDetailsElement?s:s.querySelector(".test-details");c!=null&&(c.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 N=(r=>(r.BeforeAll="beforeall",r.AfterAll="afterall",r.BeforeTest="beforetest",r.AfterTest="aftertest",r))(N||{}),H=Symbol("No Test Defined"),D=new CSSStyleSheet;D.replaceSync(R);var B="code-tests",S=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;#p={[y]:C(),[v]:C(),[x]:C(),[k]:C()};#t=!0;constructor(){super(),this.attachShadow({mode:"open"}),this.shadowRoot.innerHTML=F,this.shadowRoot.adoptedStyleSheets.push(D),this.#c=this.#h.bind(this)}connectedCallback(){if(P(this.shadowRoot),this.addEventListener("click",this.#c),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.#c)}#c;#h(t){let s=t.composedPath().find(n=>n instanceof HTMLButtonElement&&n.classList.contains("run"));if(s==null)return;let e=s.closest("li");if(e==null){s.hasAttribute("data-all")==!0&&this.runTests();return}let r=e.dataset.testId;if(r==null)return;let a=this.#s.get(r);a!=null&&this.#u(r,a)}#f(){return this.getAttribute("src")??this.getAttribute("test")??this.getAttribute("tests")??this.getAttribute("run")??this.getAttribute("path")}async loadTests(t){let s=t??this.#f();if(s!=null)try{this.getElement("tests").innerHTML="",this.#s.clear(),this.classList.remove("has-before-hook"),this.classList.remove("has-after-hook");let e=window.location.href.lastIndexOf("/"),a=window.location.href.substring(e).indexOf(".")!=-1==!0?window.location.href.substring(0,e+1):window.location.href,n=a+s.substring(0,s.lastIndexOf("/")+1),o=a+s,l=await(await fetch(o)).text();l=l.replaceAll(/['"`](((\.\/)|(\.\.\/))+(.*))['"`]/g,`'${n}$1'`);let u=new File([l],s.substring(s.lastIndexOf("/")),{type:"text/javascript"}),h=await import(URL.createObjectURL(u)),f=h.tests??h.default;if(f==null)throw new Error(`Unable to find tests definition in file at path: ${s}`);let E=f[y];if(E!=null){if(this.#e.get(y)==null){let p=new Map;p.set(E,new Set),this.#e.set(y,p)}this.classList.add("has-before-hook")}let b=f[v];if(b!=null&&this.#e.get(v)==null){let p=new Map;p.set(b,new Set),this.#e.set(v,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[x];if(A!=null&&this.#e.get(x)==null){let p=new Map;p.set(A,new Set),this.#e.set(x,p)}for(let[w,p]of Object.entries(f)){let M=this.#g(w,p);if(E!=null){let m=this.#e.get(y);if(m!=null){let g=m.get(E);g?.add(M)}}if(b!=null){let m=this.#e.get(v);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(x);if(m!=null){let g=m.get(A);g?.add(M)}}}}catch(e){this.#i("An error occurred while loading the tasks:",e)}}async runTests(){this.dispatchEvent(new CustomEvent("beforeall",{bubbles:!0,composed:!0})),this.#t=!0,this.classList.add("running"),this.toggleAttribute("success",!1),this.#m();let t=this.hasAttribute("in-order"),s=this.#e.get(y);if(s!=null){let a;try{let n=this.getElement("before-all-details");n.classList.add("running"),n.part.add("running");for(let[o,l]of s)a=await o(this,n),this.#n(a,!0,"before");n.part.remove("running"),n.classList.remove("running")}catch(n){this.#n(a,!1,"before",n),console.error(n),this.#t=!1,this.classList.remove("running"),this.part.remove("running"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}}if(t==!1){let a=[];for(let[n,o]of this.#s)a.push(this.#u(n,o));await Promise.all(a)}else for(let[a,n]of this.#s){if(this.#t==!1)break;await this.#u(a,n)}if(this.#t==!1){this.classList.remove("running"),this.part.remove("running"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}let e=this.#e.get(k);if(e!=null){let a;try{let n=this.getElement("after-all-details");n.classList.add("running"),n.part.add("running");for(let[o,l]of e)a=await o(this,n),this.#n(a,!0,"after");n.part.remove("running"),n.classList.remove("running")}catch(n){this.#n(a,!1,"after",n),console.error(n),this.#t=!1,this.classList.remove("running"),this.part.remove("running"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}));return}}let r=this.shadowRoot.querySelectorAll('[success="false"]');this.setAttribute("success",r.length==0?"true":"false"),this.classList.remove("running"),this.part.remove("running"),this.dispatchEvent(new CustomEvent("afterall",{bubbles:!0,composed:!0}))}#m(){for(let[e,r]of this.#s){let a=this.getElement("tests").querySelector(`[data-test-id="${e}"]`);if(a==null){this.#i(`Unable to find test element for test: ${e}`);return}a.toggleAttribute("success",!1),a.classList.remove("success","fail"),a.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#u(t,s){let e=this.getElement("tests").querySelector(`[data-test-id="${t}"]`);if(e==null){this.#i(`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 a=e.querySelector(".error-message");a!=null&&(a.textContent="");let n=e.querySelector("details");n!=null&&(n.open=!1);let o=H,l,u=H,c;try{if(this.dispatchEvent(new CustomEvent("beforetest",{bubbles:!0,cancelable:!0,composed:!0,detail:{testElement:e}}))==!0){let f=this.#e.get(v);if(f!=null){for(let[b,i]of f)if(i.has(t)){o=await b(this,e);break}}l=await s(this,e);let E=this.#e.get(x);if(E!=null){for(let[b,i]of E)if(i.has(t)){u=await b(this,e);break}}c="before",o!=H&&this.#a(e,o,!0,void 0,c),c=void 0,this.#a(e,l,!0,void 0,c),c="after",u!=H&&this.#a(e,u,!0,void 0,c)}}catch(h){this.#a(e,l,!1,h,c),console.error(h),this.#t=!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,a){if(s instanceof HTMLElement)this.#o(t,s,e,a);else if(s==null){let o=a==null?"Passed":"Hook Ran Successfully",l=this.#r(e==!0?`${o}`:`Failed${r!=null?`:
402
+ ${r.message}`:""}`,e,a);this.#o(t,l,e,a)}else if(typeof s=="string"){let o=this.#r(`${s}${r==null?"":`:
403
+ ${r.message}`}`,e,a);this.#o(t,o,e,a)}else if(typeof s=="object"){let o=s;if(o.success!=null&&o.expected!=null&&o.value!=null){let l=a==null?"Passed":"Success",u=a==null?"Failed":"Fail",c=this.#r(`${o.success==!0?`${l}:`:`${u}:`}
391
404
  Expected:${o.expected}
392
- Result:${o.value}`,o.success,r);this.#o(t,i,e,r)}}let n=t.querySelector("details");n!=null&&(n.open=!0)}#n(t,s,e,a){if(t instanceof HTMLElement)this.#l(t,s,e);else{let n;if(t==null)n=this.#r(s==!0?"Hook Ran Successfully":`Failed${a!=null?`:
393
- ${a.message}`:""}`,s),this.#l(n,s,e);else if(typeof t=="string")n=this.#r(`${t}${a==null?"":`:
394
- ${a.message}`}`,s),this.#l(n,s,e);else if(typeof t=="object"){let o=t;o.success!=null&&o.expected!=null&&o.value!=null&&(n=this.#r(`${o.success==!0?"Success:":"Fail:"}
405
+ Result:${o.value}`,o.success,a);this.#o(t,c,e,a)}}let n=t.querySelector("details");n!=null&&(n.open=!0)}#n(t,s,e,r){if(t instanceof HTMLElement)this.#l(t,s,e);else{let n;if(t==null)n=this.#r(s==!0?"Hook Ran Successfully":`Failed${r!=null?`:
406
+ ${r.message}`:""}`,s),this.#l(n,s,e);else if(typeof t=="string")n=this.#r(`${t}${r==null?"":`:
407
+ ${r.message}`}`,s),this.#l(n,s,e);else if(typeof t=="object"){let o=t;o.success!=null&&o.expected!=null&&o.value!=null&&(n=this.#r(`${o.success==!0?"Success:":"Fail:"}
395
408
  Expected:${o.expected}
396
- Result:${o.value}`,o.success),this.#l(n,s,e))}}let r=this.getElement(`${e}-all-details`);r!=null&&(r.open=!0)}static create(t){let s=document.createElement("code-tests");return console.log(t),s}#s=new Map;#m(t,s){let e=L();this.#s.set(e,s);let a=this.#b(e,t);return this.getElement("tests").append(a),e}#b(t,s){let e=document.createElement("li");e.dataset.testId=t,e.classList.add("test"),e.part.add("test");let a=document.createElement("details");a.classList.add("test-details"),a.part.add("test-details");let r=document.createElement("summary");r.classList.add("test-summary"),r.part.add("test-summary");let n=document.createElement("div");n.classList.add("result-icon"),n.part.add("result-icon"),r.append(n);let o=document.createElement("span");o.classList.add("description","test-description"),o.textContent=s,r.append(o);let l=document.createElement("button");l.classList.add("run","test-run"),l.part.add("run","test-run"),l.textContent="Run Test",l.title="Run Test",r.append(l);let u=document.createElement("div");u.classList.add("before-result","test-before-result"),u.part.add("before-result","test-before-result");let i=document.createElement("div");i.classList.add("result","test-result"),i.part.add("result","test-result");let f=document.createElement("div");return f.classList.add("after-result","test-after-result"),f.part.add("after-result","test-after-result"),a.append(r),a.append(u),a.append(i),a.append(f),e.append(a),e}#o(t,s,e,a){t.setAttribute("success",e==!0?"true":"false"),t.classList.toggle("success",e),t.part.toggle("success",e),t.classList.toggle("fail",!e),t.part.toggle("fail",!e);let r=t.querySelector(".result-icon");r?.classList.toggle("success",e),r?.part.toggle("success",e),r?.classList.toggle("fail",!e),r?.part.toggle("fail",!e);let n=t.querySelector(`.${a==null?"result":a=="before"?"before-result":"after-result"}`);if(n==null){this.#i("Unable to find result element");return}n.innerHTML="",n.appendChild(s)}#r(t,s,e){let a=document.createElement("code");a.classList.add("code"),a.part.add("code");let r=document.createElement("pre");r.textContent=t;let n=s==!0?"success-message":"error-message";return r.classList.add("pre",n),r.part.add("pre",n),a.appendChild(r),a}#l(t,s,e){let a=this.getElement(`${e}-all-details`),r=this.getElement(`${e}-all-results`);a.setAttribute("success",s==!0?"true":"false"),a.classList.toggle("success",s),a.part.toggle("success",s),a.classList.toggle("fail",!s),a.part.toggle("fail",!s),r.innerHTML="",r.appendChild(t)}#i(t,s){s instanceof Error&&(t+=`
397
- ${s.message}`,console.error(s));let e=document.createElement("li");e.classList.add("error","process-error"),e.part.add("error","process-error");let a=document.createElement("code");a.classList.add("code","process-error-code"),a.part.add("code","process-error-code");let r=document.createElement("pre");r.classList.add("pre","process-error-pre"),r.part.add("pre","process-error-pre"),r.textContent=t,a.append(r),e.append(a),this.getElement("tests").append(e)}#d(t){if(t=="ordered"){let s=this.shadowRoot.querySelector("ul");if(s==null)return;let e=this.shadowRoot?.querySelectorAll("li"),a=document.createElement("ol");e!=null&&a.append(...e),a.id="tests",s.replaceWith(a)}else{let s=this.shadowRoot.querySelector("ol");if(s==null)return;let e=this.shadowRoot?.querySelectorAll("li"),a=document.createElement("ul");a.id="tests",e!=null&&a.append(...e),s.replaceWith(a)}}static observedAttributes=["in-order"];attributeChangedCallback(t,s,e){t=="in-order"&&(e==null?this.#d("unordered"):this.#d("ordered"))}};function L(){let h=new Uint8Array(20);crypto.getRandomValues(h);let t=[].slice.apply(h).map(function(e){return String.fromCharCode(e)}).join("");return btoa(t).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}customElements.get(P)==null&&customElements.define(P,S);export{k as AFTERALL,x as AFTEREACH,y as BEFOREALL,v as BEFOREEACH,z as CodeTestEventType,M as CodeTests,S as CodeTestsElement,j as expect};
409
+ Result:${o.value}`,o.success),this.#l(n,s,e))}}let a=this.getElement(`${e}-all-details`);a!=null&&(a.open=!0)}static create(t){let s=document.createElement("code-tests");return console.log(t),s}#s=new Map;#g(t,s){let e=C();this.#s.set(e,s);let r=this.#b(e,t);return this.getElement("tests").append(r),e}#b(t,s){let e=document.createElement("li");e.dataset.testId=t,e.classList.add("test"),e.part.add("test");let r=document.createElement("details");r.classList.add("test-details"),r.part.add("test-details");let a=document.createElement("summary");a.classList.add("test-summary"),a.part.add("test-summary");let n=document.createElement("div");n.classList.add("result-icon"),n.part.add("result-icon"),a.append(n);let o=document.createElement("span");o.classList.add("description","test-description"),o.textContent=s,a.append(o);let l=document.createElement("button");l.classList.add("run","test-run"),l.part.add("run","test-run"),l.textContent="Run Test",l.title="Run Test",a.append(l);let u=document.createElement("div");u.classList.add("before-result","test-before-result"),u.part.add("before-result","test-before-result");let c=document.createElement("div");c.classList.add("result","test-result"),c.part.add("result","test-result");let h=document.createElement("div");return h.classList.add("after-result","test-after-result"),h.part.add("after-result","test-after-result"),r.append(a),r.append(u),r.append(c),r.append(h),e.append(r),e}#o(t,s,e,r){t.setAttribute("success",e==!0?"true":"false"),t.classList.toggle("success",e),t.part.toggle("success",e),t.classList.toggle("fail",!e),t.part.toggle("fail",!e);let a=t.querySelector(".result-icon");a?.classList.toggle("success",e),a?.part.toggle("success",e),a?.classList.toggle("fail",!e),a?.part.toggle("fail",!e);let n=t.querySelector(`.${r==null?"result":r=="before"?"before-result":"after-result"}`);if(n==null){this.#i("Unable to find result element");return}n.innerHTML="",n.appendChild(s)}#r(t,s,e){let r=document.createElement("code");r.classList.add("code"),r.part.add("code");let a=document.createElement("pre");a.textContent=t;let n=s==!0?"success-message":"error-message";return a.classList.add("pre",n),a.part.add("pre",n),r.appendChild(a),r}#l(t,s,e){let r=this.getElement(`${e}-all-details`),a=this.getElement(`${e}-all-results`);r.setAttribute("success",s==!0?"true":"false"),r.classList.toggle("success",s),r.part.toggle("success",s),r.classList.toggle("fail",!s),r.part.toggle("fail",!s),a.innerHTML="",a.appendChild(t)}#i(t,s){s instanceof Error&&(t+=`
410
+ ${s.message}`,console.error(s));let e=document.createElement("li");e.classList.add("error","process-error"),e.part.add("error","process-error");let r=document.createElement("code");r.classList.add("code","process-error-code"),r.part.add("code","process-error-code");let a=document.createElement("pre");a.classList.add("pre","process-error-pre"),a.part.add("pre","process-error-pre"),a.textContent=t,r.append(a),e.append(r),this.getElement("tests").append(e)}#d(t){if(t=="ordered"){let s=this.shadowRoot.querySelector("ul");if(s==null)return;let e=this.shadowRoot?.querySelectorAll("li"),r=document.createElement("ol");e!=null&&r.append(...e),r.id="tests",s.replaceWith(r)}else{let s=this.shadowRoot.querySelector("ol");if(s==null)return;let e=this.shadowRoot?.querySelectorAll("li"),r=document.createElement("ul");r.id="tests",e!=null&&r.append(...e),s.replaceWith(r)}}static observedAttributes=["in-order"];attributeChangedCallback(t,s,e){t=="in-order"&&(e==null?this.#d("unordered"):this.#d("ordered"))}};function C(){let d=new Uint8Array(20);crypto.getRandomValues(d);let t=[].slice.apply(d).map(function(e){return String.fromCharCode(e)}).join("");return btoa(t).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}customElements.get(B)==null&&customElements.define(B,S);export{k as AFTERALL,x as AFTEREACH,y as BEFOREALL,v as BEFOREEACH,N as CodeTestEventType,L as CodeTests,S as CodeTestsElement,I as expect,U as prompt};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magnit-ce/code-tests",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "A custom html element that interprets and runs tests in a browser.",
5
5
  "type": "module",
6
6
  "main": "dist/code-tests.js",