@atomic-testing/vue-3 0.81.0 → 0.85.0

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/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
1
2
  let _atomic_testing_core = require("@atomic-testing/core");
2
3
  let _testing_library_vue = require("@testing-library/vue");
3
4
  let vue = require("vue");
4
5
  let _atomic_testing_dom_core = require("@atomic-testing/dom-core");
5
-
6
6
  //#region src/VueInteractor.ts
7
7
  var VueInteractor = class VueInteractor extends _atomic_testing_dom_core.DOMInteractor {
8
8
  async flush() {
@@ -77,7 +77,6 @@ var VueInteractor = class VueInteractor extends _atomic_testing_dom_core.DOMInte
77
77
  return new VueInteractor(this.rootEl);
78
78
  }
79
79
  };
80
-
81
80
  //#endregion
82
81
  //#region src/createTestEngine.ts
83
82
  let _rootId = 0;
@@ -133,9 +132,9 @@ function createRenderedTestEngine(rootElement, partDefinitions, _option) {
133
132
  };
134
133
  return new _atomic_testing_core.TestEngine((0, _atomic_testing_core.byAttribute)(rootElementAttributeName, rootId), new VueInteractor(), { parts: partDefinitions }, cleanup);
135
134
  }
136
-
137
135
  //#endregion
138
136
  exports.VueInteractor = VueInteractor;
139
137
  exports.createRenderedTestEngine = createRenderedTestEngine;
140
138
  exports.createTestEngine = createTestEngine;
139
+
141
140
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["DOMInteractor","defaultWaitForOption","componentOptions: any","unmount: () => void","app: App","TestEngine"],"sources":["../src/VueInteractor.ts","../src/createTestEngine.ts"],"sourcesContent":["import {\n BlurOption,\n ClickOption,\n defaultWaitForOption,\n EnterTextOption,\n FocusOption,\n HoverOption,\n Interactor,\n MouseDownOption,\n MouseEnterOption,\n MouseLeaveOption,\n MouseMoveOption,\n MouseOutOption,\n MouseUpOption,\n PartLocator,\n WaitForOption,\n WaitUntilOption,\n} from '@atomic-testing/core';\nimport { DOMInteractor } from '@atomic-testing/dom-core';\nimport { nextTick } from 'vue';\n\nexport class VueInteractor extends DOMInteractor {\n private async flush() {\n await nextTick();\n }\n\n override async enterText(locator: PartLocator, text: string, option?: Partial<EnterTextOption>): Promise<void> {\n await super.enterText(locator, text, option);\n await this.flush();\n }\n\n override async click(locator: PartLocator, option?: Partial<ClickOption>): Promise<void> {\n await super.click(locator, option);\n await this.flush();\n }\n\n override async hover(locator: PartLocator, option?: Partial<HoverOption>): Promise<void> {\n await super.hover(locator, option);\n await this.flush();\n }\n\n override async mouseMove(locator: PartLocator, option?: Partial<MouseMoveOption>): Promise<void> {\n await super.mouseMove(locator, option);\n await this.flush();\n }\n\n override async mouseDown(locator: PartLocator, option?: Partial<MouseDownOption>): Promise<void> {\n await super.mouseDown(locator, option);\n await this.flush();\n }\n\n override async mouseUp(locator: PartLocator, option?: Partial<MouseUpOption>): Promise<void> {\n await super.mouseUp(locator, option);\n await this.flush();\n }\n\n override async mouseOver(locator: PartLocator, option?: Partial<HoverOption>): Promise<void> {\n await super.mouseOver(locator, option);\n await this.flush();\n }\n\n override async mouseOut(locator: PartLocator, option?: Partial<MouseOutOption>): Promise<void> {\n await super.mouseOut(locator, option);\n await this.flush();\n }\n\n override async mouseEnter(locator: PartLocator, option?: Partial<MouseEnterOption>): Promise<void> {\n await super.mouseEnter(locator, option);\n await this.flush();\n }\n\n override async mouseLeave(locator: PartLocator, option?: Partial<MouseLeaveOption>): Promise<void> {\n await super.mouseLeave(locator, option);\n await this.flush();\n }\n\n override async focus(locator: PartLocator, option?: Partial<FocusOption>): Promise<void> {\n await super.focus(locator, option);\n await this.flush();\n }\n\n override async blur(locator: PartLocator, option?: Partial<BlurOption>): Promise<void> {\n await super.blur(locator, option);\n await this.flush();\n }\n\n override async selectOptionValue(locator: PartLocator, values: string[]): Promise<void> {\n await super.selectOptionValue(locator, values);\n await this.flush();\n }\n\n override async wait(ms: number): Promise<void> {\n await super.wait(ms);\n await this.flush();\n }\n\n override async waitUntilComponentState(\n locator: PartLocator,\n option: Partial<Readonly<WaitForOption>> = defaultWaitForOption\n ): Promise<void> {\n await super.waitUntilComponentState(locator, option);\n await this.flush();\n }\n\n override async waitUntil<T>(option: WaitUntilOption<T>): Promise<T> {\n const result = await super.waitUntil(option);\n await this.flush();\n return result;\n }\n\n override clone(): Interactor {\n return new VueInteractor(this.rootEl);\n }\n}\n","import { byAttribute, ScenePart, TestEngine } from '@atomic-testing/core';\nimport { render } from '@testing-library/vue';\nimport { App, Component, createApp, defineComponent } from 'vue';\n\nimport { VueInteractor } from './VueInteractor';\nimport { IVueTestEngineOption, VueSFCLikeComponent } from './types';\n\nlet _rootId = 0;\nfunction getNextRootElementId() {\n return `${_rootId++}`;\n}\n\nconst rootElementAttributeName = 'data-atomic-testing-vue';\n\nfunction isSFCLikeObject(component: any): component is VueSFCLikeComponent {\n return (\n component && typeof component === 'object' && 'template' in component && typeof component.template === 'string'\n );\n}\n\nfunction createComponentFromSFCLike(sfcObj: VueSFCLikeComponent): Component {\n const componentOptions: any = {\n name: sfcObj.name || 'SFCComponent',\n template: sfcObj.template,\n };\n\n if (sfcObj.props) {\n componentOptions.props = sfcObj.props;\n }\n\n if (sfcObj.setup) {\n componentOptions.setup = sfcObj.setup;\n }\n\n if (sfcObj.data) {\n componentOptions.data = sfcObj.data;\n }\n\n if (sfcObj.methods) {\n componentOptions.methods = sfcObj.methods;\n }\n\n if (sfcObj.computed) {\n componentOptions.computed = sfcObj.computed;\n }\n\n return defineComponent(componentOptions);\n}\n\nexport function createTestEngine<T extends ScenePart>(\n component: Component | VueSFCLikeComponent,\n partDefinitions: T,\n option?: Readonly<Partial<IVueTestEngineOption>>\n): TestEngine<T> {\n const rootEl = option?.rootElement ?? document.body;\n const container = rootEl.appendChild(document.createElement('div'));\n const rootId = getNextRootElementId();\n container.setAttribute(rootElementAttributeName, rootId);\n\n let unmount: () => void;\n let app: App;\n\n // Create component from SFC-like object if needed\n const compiledComponent = isSFCLikeObject(component)\n ? createComponentFromSFCLike(component)\n : (component as Component);\n\n try {\n const renderResult = render(compiledComponent, { container });\n unmount = renderResult.unmount;\n } catch (_error) {\n // Fallback to manual Vue app creation if render fails\n app = createApp(compiledComponent);\n app.mount(container);\n unmount = () => {\n if (app) {\n app.unmount();\n }\n };\n }\n\n const cleanup = () => {\n unmount();\n rootEl.removeChild(container);\n return Promise.resolve();\n };\n\n return new TestEngine(\n byAttribute(rootElementAttributeName, rootId),\n new VueInteractor(),\n {\n parts: partDefinitions,\n },\n cleanup\n );\n}\n\nexport function createRenderedTestEngine<T extends ScenePart>(\n rootElement: HTMLElement,\n partDefinitions: T,\n _option?: Readonly<Partial<IVueTestEngineOption>>\n): TestEngine<T> {\n const rootId = getNextRootElementId();\n rootElement.setAttribute(rootElementAttributeName, rootId);\n\n const cleanup = () => {\n rootElement.removeAttribute(rootElementAttributeName);\n return Promise.resolve();\n };\n\n return new TestEngine(\n byAttribute(rootElementAttributeName, rootId),\n new VueInteractor(),\n {\n parts: partDefinitions,\n },\n cleanup\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["DOMInteractor","defaultWaitForOption","TestEngine"],"sources":["../src/VueInteractor.ts","../src/createTestEngine.ts"],"sourcesContent":["import {\n BlurOption,\n ClickOption,\n defaultWaitForOption,\n EnterTextOption,\n FocusOption,\n HoverOption,\n Interactor,\n MouseDownOption,\n MouseEnterOption,\n MouseLeaveOption,\n MouseMoveOption,\n MouseOutOption,\n MouseUpOption,\n PartLocator,\n WaitForOption,\n WaitUntilOption,\n} from '@atomic-testing/core';\nimport { DOMInteractor } from '@atomic-testing/dom-core';\nimport { nextTick } from 'vue';\n\nexport class VueInteractor extends DOMInteractor {\n private async flush() {\n await nextTick();\n }\n\n override async enterText(locator: PartLocator, text: string, option?: Partial<EnterTextOption>): Promise<void> {\n await super.enterText(locator, text, option);\n await this.flush();\n }\n\n override async click(locator: PartLocator, option?: Partial<ClickOption>): Promise<void> {\n await super.click(locator, option);\n await this.flush();\n }\n\n override async hover(locator: PartLocator, option?: Partial<HoverOption>): Promise<void> {\n await super.hover(locator, option);\n await this.flush();\n }\n\n override async mouseMove(locator: PartLocator, option?: Partial<MouseMoveOption>): Promise<void> {\n await super.mouseMove(locator, option);\n await this.flush();\n }\n\n override async mouseDown(locator: PartLocator, option?: Partial<MouseDownOption>): Promise<void> {\n await super.mouseDown(locator, option);\n await this.flush();\n }\n\n override async mouseUp(locator: PartLocator, option?: Partial<MouseUpOption>): Promise<void> {\n await super.mouseUp(locator, option);\n await this.flush();\n }\n\n override async mouseOver(locator: PartLocator, option?: Partial<HoverOption>): Promise<void> {\n await super.mouseOver(locator, option);\n await this.flush();\n }\n\n override async mouseOut(locator: PartLocator, option?: Partial<MouseOutOption>): Promise<void> {\n await super.mouseOut(locator, option);\n await this.flush();\n }\n\n override async mouseEnter(locator: PartLocator, option?: Partial<MouseEnterOption>): Promise<void> {\n await super.mouseEnter(locator, option);\n await this.flush();\n }\n\n override async mouseLeave(locator: PartLocator, option?: Partial<MouseLeaveOption>): Promise<void> {\n await super.mouseLeave(locator, option);\n await this.flush();\n }\n\n override async focus(locator: PartLocator, option?: Partial<FocusOption>): Promise<void> {\n await super.focus(locator, option);\n await this.flush();\n }\n\n override async blur(locator: PartLocator, option?: Partial<BlurOption>): Promise<void> {\n await super.blur(locator, option);\n await this.flush();\n }\n\n override async selectOptionValue(locator: PartLocator, values: string[]): Promise<void> {\n await super.selectOptionValue(locator, values);\n await this.flush();\n }\n\n override async wait(ms: number): Promise<void> {\n await super.wait(ms);\n await this.flush();\n }\n\n override async waitUntilComponentState(\n locator: PartLocator,\n option: Partial<Readonly<WaitForOption>> = defaultWaitForOption\n ): Promise<void> {\n await super.waitUntilComponentState(locator, option);\n await this.flush();\n }\n\n override async waitUntil<T>(option: WaitUntilOption<T>): Promise<T> {\n const result = await super.waitUntil(option);\n await this.flush();\n return result;\n }\n\n override clone(): Interactor {\n return new VueInteractor(this.rootEl);\n }\n}\n","import { byAttribute, ScenePart, TestEngine } from '@atomic-testing/core';\nimport { render } from '@testing-library/vue';\nimport { App, Component, createApp, defineComponent } from 'vue';\n\nimport { IVueTestEngineOption, VueSFCLikeComponent } from './types';\nimport { VueInteractor } from './VueInteractor';\n\nlet _rootId = 0;\nfunction getNextRootElementId() {\n return `${_rootId++}`;\n}\n\nconst rootElementAttributeName = 'data-atomic-testing-vue';\n\nfunction isSFCLikeObject(component: any): component is VueSFCLikeComponent {\n return (\n component && typeof component === 'object' && 'template' in component && typeof component.template === 'string'\n );\n}\n\nfunction createComponentFromSFCLike(sfcObj: VueSFCLikeComponent): Component {\n const componentOptions: any = {\n name: sfcObj.name || 'SFCComponent',\n template: sfcObj.template,\n };\n\n if (sfcObj.props) {\n componentOptions.props = sfcObj.props;\n }\n\n if (sfcObj.setup) {\n componentOptions.setup = sfcObj.setup;\n }\n\n if (sfcObj.data) {\n componentOptions.data = sfcObj.data;\n }\n\n if (sfcObj.methods) {\n componentOptions.methods = sfcObj.methods;\n }\n\n if (sfcObj.computed) {\n componentOptions.computed = sfcObj.computed;\n }\n\n return defineComponent(componentOptions);\n}\n\nexport function createTestEngine<T extends ScenePart>(\n component: Component | VueSFCLikeComponent,\n partDefinitions: T,\n option?: Readonly<Partial<IVueTestEngineOption>>\n): TestEngine<T> {\n const rootEl = option?.rootElement ?? document.body;\n const container = rootEl.appendChild(document.createElement('div'));\n const rootId = getNextRootElementId();\n container.setAttribute(rootElementAttributeName, rootId);\n\n let unmount: () => void;\n let app: App;\n\n // Create component from SFC-like object if needed\n const compiledComponent = isSFCLikeObject(component)\n ? createComponentFromSFCLike(component)\n : (component as Component);\n\n try {\n const renderResult = render(compiledComponent, { container });\n unmount = renderResult.unmount;\n } catch (_error) {\n // Fallback to manual Vue app creation if render fails\n app = createApp(compiledComponent);\n app.mount(container);\n unmount = () => {\n if (app) {\n app.unmount();\n }\n };\n }\n\n const cleanup = () => {\n unmount();\n rootEl.removeChild(container);\n return Promise.resolve();\n };\n\n return new TestEngine(\n byAttribute(rootElementAttributeName, rootId),\n new VueInteractor(),\n {\n parts: partDefinitions,\n },\n cleanup\n );\n}\n\nexport function createRenderedTestEngine<T extends ScenePart>(\n rootElement: HTMLElement,\n partDefinitions: T,\n _option?: Readonly<Partial<IVueTestEngineOption>>\n): TestEngine<T> {\n const rootId = getNextRootElementId();\n rootElement.setAttribute(rootElementAttributeName, rootId);\n\n const cleanup = () => {\n rootElement.removeAttribute(rootElementAttributeName);\n return Promise.resolve();\n };\n\n return new TestEngine(\n byAttribute(rootElementAttributeName, rootId),\n new VueInteractor(),\n {\n parts: partDefinitions,\n },\n cleanup\n );\n}\n"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -2,7 +2,6 @@ import { TestEngine, byAttribute, defaultWaitForOption } from "@atomic-testing/c
2
2
  import { render } from "@testing-library/vue";
3
3
  import { createApp, defineComponent, nextTick } from "vue";
4
4
  import { DOMInteractor } from "@atomic-testing/dom-core";
5
-
6
5
  //#region src/VueInteractor.ts
7
6
  var VueInteractor = class VueInteractor extends DOMInteractor {
8
7
  async flush() {
@@ -77,7 +76,6 @@ var VueInteractor = class VueInteractor extends DOMInteractor {
77
76
  return new VueInteractor(this.rootEl);
78
77
  }
79
78
  };
80
-
81
79
  //#endregion
82
80
  //#region src/createTestEngine.ts
83
81
  let _rootId = 0;
@@ -133,7 +131,7 @@ function createRenderedTestEngine(rootElement, partDefinitions, _option) {
133
131
  };
134
132
  return new TestEngine(byAttribute(rootElementAttributeName, rootId), new VueInteractor(), { parts: partDefinitions }, cleanup);
135
133
  }
136
-
137
134
  //#endregion
138
135
  export { VueInteractor, createRenderedTestEngine, createTestEngine };
136
+
139
137
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["componentOptions: any","unmount: () => void","app: App"],"sources":["../src/VueInteractor.ts","../src/createTestEngine.ts"],"sourcesContent":["import {\n BlurOption,\n ClickOption,\n defaultWaitForOption,\n EnterTextOption,\n FocusOption,\n HoverOption,\n Interactor,\n MouseDownOption,\n MouseEnterOption,\n MouseLeaveOption,\n MouseMoveOption,\n MouseOutOption,\n MouseUpOption,\n PartLocator,\n WaitForOption,\n WaitUntilOption,\n} from '@atomic-testing/core';\nimport { DOMInteractor } from '@atomic-testing/dom-core';\nimport { nextTick } from 'vue';\n\nexport class VueInteractor extends DOMInteractor {\n private async flush() {\n await nextTick();\n }\n\n override async enterText(locator: PartLocator, text: string, option?: Partial<EnterTextOption>): Promise<void> {\n await super.enterText(locator, text, option);\n await this.flush();\n }\n\n override async click(locator: PartLocator, option?: Partial<ClickOption>): Promise<void> {\n await super.click(locator, option);\n await this.flush();\n }\n\n override async hover(locator: PartLocator, option?: Partial<HoverOption>): Promise<void> {\n await super.hover(locator, option);\n await this.flush();\n }\n\n override async mouseMove(locator: PartLocator, option?: Partial<MouseMoveOption>): Promise<void> {\n await super.mouseMove(locator, option);\n await this.flush();\n }\n\n override async mouseDown(locator: PartLocator, option?: Partial<MouseDownOption>): Promise<void> {\n await super.mouseDown(locator, option);\n await this.flush();\n }\n\n override async mouseUp(locator: PartLocator, option?: Partial<MouseUpOption>): Promise<void> {\n await super.mouseUp(locator, option);\n await this.flush();\n }\n\n override async mouseOver(locator: PartLocator, option?: Partial<HoverOption>): Promise<void> {\n await super.mouseOver(locator, option);\n await this.flush();\n }\n\n override async mouseOut(locator: PartLocator, option?: Partial<MouseOutOption>): Promise<void> {\n await super.mouseOut(locator, option);\n await this.flush();\n }\n\n override async mouseEnter(locator: PartLocator, option?: Partial<MouseEnterOption>): Promise<void> {\n await super.mouseEnter(locator, option);\n await this.flush();\n }\n\n override async mouseLeave(locator: PartLocator, option?: Partial<MouseLeaveOption>): Promise<void> {\n await super.mouseLeave(locator, option);\n await this.flush();\n }\n\n override async focus(locator: PartLocator, option?: Partial<FocusOption>): Promise<void> {\n await super.focus(locator, option);\n await this.flush();\n }\n\n override async blur(locator: PartLocator, option?: Partial<BlurOption>): Promise<void> {\n await super.blur(locator, option);\n await this.flush();\n }\n\n override async selectOptionValue(locator: PartLocator, values: string[]): Promise<void> {\n await super.selectOptionValue(locator, values);\n await this.flush();\n }\n\n override async wait(ms: number): Promise<void> {\n await super.wait(ms);\n await this.flush();\n }\n\n override async waitUntilComponentState(\n locator: PartLocator,\n option: Partial<Readonly<WaitForOption>> = defaultWaitForOption\n ): Promise<void> {\n await super.waitUntilComponentState(locator, option);\n await this.flush();\n }\n\n override async waitUntil<T>(option: WaitUntilOption<T>): Promise<T> {\n const result = await super.waitUntil(option);\n await this.flush();\n return result;\n }\n\n override clone(): Interactor {\n return new VueInteractor(this.rootEl);\n }\n}\n","import { byAttribute, ScenePart, TestEngine } from '@atomic-testing/core';\nimport { render } from '@testing-library/vue';\nimport { App, Component, createApp, defineComponent } from 'vue';\n\nimport { VueInteractor } from './VueInteractor';\nimport { IVueTestEngineOption, VueSFCLikeComponent } from './types';\n\nlet _rootId = 0;\nfunction getNextRootElementId() {\n return `${_rootId++}`;\n}\n\nconst rootElementAttributeName = 'data-atomic-testing-vue';\n\nfunction isSFCLikeObject(component: any): component is VueSFCLikeComponent {\n return (\n component && typeof component === 'object' && 'template' in component && typeof component.template === 'string'\n );\n}\n\nfunction createComponentFromSFCLike(sfcObj: VueSFCLikeComponent): Component {\n const componentOptions: any = {\n name: sfcObj.name || 'SFCComponent',\n template: sfcObj.template,\n };\n\n if (sfcObj.props) {\n componentOptions.props = sfcObj.props;\n }\n\n if (sfcObj.setup) {\n componentOptions.setup = sfcObj.setup;\n }\n\n if (sfcObj.data) {\n componentOptions.data = sfcObj.data;\n }\n\n if (sfcObj.methods) {\n componentOptions.methods = sfcObj.methods;\n }\n\n if (sfcObj.computed) {\n componentOptions.computed = sfcObj.computed;\n }\n\n return defineComponent(componentOptions);\n}\n\nexport function createTestEngine<T extends ScenePart>(\n component: Component | VueSFCLikeComponent,\n partDefinitions: T,\n option?: Readonly<Partial<IVueTestEngineOption>>\n): TestEngine<T> {\n const rootEl = option?.rootElement ?? document.body;\n const container = rootEl.appendChild(document.createElement('div'));\n const rootId = getNextRootElementId();\n container.setAttribute(rootElementAttributeName, rootId);\n\n let unmount: () => void;\n let app: App;\n\n // Create component from SFC-like object if needed\n const compiledComponent = isSFCLikeObject(component)\n ? createComponentFromSFCLike(component)\n : (component as Component);\n\n try {\n const renderResult = render(compiledComponent, { container });\n unmount = renderResult.unmount;\n } catch (_error) {\n // Fallback to manual Vue app creation if render fails\n app = createApp(compiledComponent);\n app.mount(container);\n unmount = () => {\n if (app) {\n app.unmount();\n }\n };\n }\n\n const cleanup = () => {\n unmount();\n rootEl.removeChild(container);\n return Promise.resolve();\n };\n\n return new TestEngine(\n byAttribute(rootElementAttributeName, rootId),\n new VueInteractor(),\n {\n parts: partDefinitions,\n },\n cleanup\n );\n}\n\nexport function createRenderedTestEngine<T extends ScenePart>(\n rootElement: HTMLElement,\n partDefinitions: T,\n _option?: Readonly<Partial<IVueTestEngineOption>>\n): TestEngine<T> {\n const rootId = getNextRootElementId();\n rootElement.setAttribute(rootElementAttributeName, rootId);\n\n const cleanup = () => {\n rootElement.removeAttribute(rootElementAttributeName);\n return Promise.resolve();\n };\n\n return new TestEngine(\n byAttribute(rootElementAttributeName, rootId),\n new VueInteractor(),\n {\n parts: partDefinitions,\n },\n cleanup\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/VueInteractor.ts","../src/createTestEngine.ts"],"sourcesContent":["import {\n BlurOption,\n ClickOption,\n defaultWaitForOption,\n EnterTextOption,\n FocusOption,\n HoverOption,\n Interactor,\n MouseDownOption,\n MouseEnterOption,\n MouseLeaveOption,\n MouseMoveOption,\n MouseOutOption,\n MouseUpOption,\n PartLocator,\n WaitForOption,\n WaitUntilOption,\n} from '@atomic-testing/core';\nimport { DOMInteractor } from '@atomic-testing/dom-core';\nimport { nextTick } from 'vue';\n\nexport class VueInteractor extends DOMInteractor {\n private async flush() {\n await nextTick();\n }\n\n override async enterText(locator: PartLocator, text: string, option?: Partial<EnterTextOption>): Promise<void> {\n await super.enterText(locator, text, option);\n await this.flush();\n }\n\n override async click(locator: PartLocator, option?: Partial<ClickOption>): Promise<void> {\n await super.click(locator, option);\n await this.flush();\n }\n\n override async hover(locator: PartLocator, option?: Partial<HoverOption>): Promise<void> {\n await super.hover(locator, option);\n await this.flush();\n }\n\n override async mouseMove(locator: PartLocator, option?: Partial<MouseMoveOption>): Promise<void> {\n await super.mouseMove(locator, option);\n await this.flush();\n }\n\n override async mouseDown(locator: PartLocator, option?: Partial<MouseDownOption>): Promise<void> {\n await super.mouseDown(locator, option);\n await this.flush();\n }\n\n override async mouseUp(locator: PartLocator, option?: Partial<MouseUpOption>): Promise<void> {\n await super.mouseUp(locator, option);\n await this.flush();\n }\n\n override async mouseOver(locator: PartLocator, option?: Partial<HoverOption>): Promise<void> {\n await super.mouseOver(locator, option);\n await this.flush();\n }\n\n override async mouseOut(locator: PartLocator, option?: Partial<MouseOutOption>): Promise<void> {\n await super.mouseOut(locator, option);\n await this.flush();\n }\n\n override async mouseEnter(locator: PartLocator, option?: Partial<MouseEnterOption>): Promise<void> {\n await super.mouseEnter(locator, option);\n await this.flush();\n }\n\n override async mouseLeave(locator: PartLocator, option?: Partial<MouseLeaveOption>): Promise<void> {\n await super.mouseLeave(locator, option);\n await this.flush();\n }\n\n override async focus(locator: PartLocator, option?: Partial<FocusOption>): Promise<void> {\n await super.focus(locator, option);\n await this.flush();\n }\n\n override async blur(locator: PartLocator, option?: Partial<BlurOption>): Promise<void> {\n await super.blur(locator, option);\n await this.flush();\n }\n\n override async selectOptionValue(locator: PartLocator, values: string[]): Promise<void> {\n await super.selectOptionValue(locator, values);\n await this.flush();\n }\n\n override async wait(ms: number): Promise<void> {\n await super.wait(ms);\n await this.flush();\n }\n\n override async waitUntilComponentState(\n locator: PartLocator,\n option: Partial<Readonly<WaitForOption>> = defaultWaitForOption\n ): Promise<void> {\n await super.waitUntilComponentState(locator, option);\n await this.flush();\n }\n\n override async waitUntil<T>(option: WaitUntilOption<T>): Promise<T> {\n const result = await super.waitUntil(option);\n await this.flush();\n return result;\n }\n\n override clone(): Interactor {\n return new VueInteractor(this.rootEl);\n }\n}\n","import { byAttribute, ScenePart, TestEngine } from '@atomic-testing/core';\nimport { render } from '@testing-library/vue';\nimport { App, Component, createApp, defineComponent } from 'vue';\n\nimport { IVueTestEngineOption, VueSFCLikeComponent } from './types';\nimport { VueInteractor } from './VueInteractor';\n\nlet _rootId = 0;\nfunction getNextRootElementId() {\n return `${_rootId++}`;\n}\n\nconst rootElementAttributeName = 'data-atomic-testing-vue';\n\nfunction isSFCLikeObject(component: any): component is VueSFCLikeComponent {\n return (\n component && typeof component === 'object' && 'template' in component && typeof component.template === 'string'\n );\n}\n\nfunction createComponentFromSFCLike(sfcObj: VueSFCLikeComponent): Component {\n const componentOptions: any = {\n name: sfcObj.name || 'SFCComponent',\n template: sfcObj.template,\n };\n\n if (sfcObj.props) {\n componentOptions.props = sfcObj.props;\n }\n\n if (sfcObj.setup) {\n componentOptions.setup = sfcObj.setup;\n }\n\n if (sfcObj.data) {\n componentOptions.data = sfcObj.data;\n }\n\n if (sfcObj.methods) {\n componentOptions.methods = sfcObj.methods;\n }\n\n if (sfcObj.computed) {\n componentOptions.computed = sfcObj.computed;\n }\n\n return defineComponent(componentOptions);\n}\n\nexport function createTestEngine<T extends ScenePart>(\n component: Component | VueSFCLikeComponent,\n partDefinitions: T,\n option?: Readonly<Partial<IVueTestEngineOption>>\n): TestEngine<T> {\n const rootEl = option?.rootElement ?? document.body;\n const container = rootEl.appendChild(document.createElement('div'));\n const rootId = getNextRootElementId();\n container.setAttribute(rootElementAttributeName, rootId);\n\n let unmount: () => void;\n let app: App;\n\n // Create component from SFC-like object if needed\n const compiledComponent = isSFCLikeObject(component)\n ? createComponentFromSFCLike(component)\n : (component as Component);\n\n try {\n const renderResult = render(compiledComponent, { container });\n unmount = renderResult.unmount;\n } catch (_error) {\n // Fallback to manual Vue app creation if render fails\n app = createApp(compiledComponent);\n app.mount(container);\n unmount = () => {\n if (app) {\n app.unmount();\n }\n };\n }\n\n const cleanup = () => {\n unmount();\n rootEl.removeChild(container);\n return Promise.resolve();\n };\n\n return new TestEngine(\n byAttribute(rootElementAttributeName, rootId),\n new VueInteractor(),\n {\n parts: partDefinitions,\n },\n cleanup\n );\n}\n\nexport function createRenderedTestEngine<T extends ScenePart>(\n rootElement: HTMLElement,\n partDefinitions: T,\n _option?: Readonly<Partial<IVueTestEngineOption>>\n): TestEngine<T> {\n const rootId = getNextRootElementId();\n rootElement.setAttribute(rootElementAttributeName, rootId);\n\n const cleanup = () => {\n rootElement.removeAttribute(rootElementAttributeName);\n return Promise.resolve();\n };\n\n return new TestEngine(\n byAttribute(rootElementAttributeName, rootId),\n new VueInteractor(),\n {\n parts: partDefinitions,\n },\n cleanup\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,53 +1,53 @@
1
1
  {
2
2
  "name": "@atomic-testing/vue-3",
3
- "version": "0.81.0",
3
+ "version": "0.85.0",
4
4
  "description": "The @atomic-testing/vue-3 package is a Vue 3 test adapter that extends Atomic Testing's component driver pattern to Vue applications. It enables testing Vue components using the same high-level semantic APIs used across React, Playwright, and DOM environments.",
5
- "main": "dist/index.cjs",
6
- "module": "dist/index.mjs",
7
- "types": "dist/index.d.cts",
8
- "files": [
9
- "dist",
10
- "src"
11
- ],
12
- "author": "Tianzhen Lin <tangent@usa.net>",
13
5
  "keywords": [
6
+ "integration",
14
7
  "testing",
15
- "vue",
16
8
  "unit",
17
- "integration"
9
+ "vue"
18
10
  ],
19
11
  "license": "MIT",
12
+ "author": "Tianzhen Lin <tangent@usa.net>",
20
13
  "repository": {
21
14
  "type": "git",
22
15
  "url": "https://github.com/atomic-testing/atomic-testing.git",
23
16
  "directory": "packages/vue-3"
24
17
  },
18
+ "files": [
19
+ "dist",
20
+ "src"
21
+ ],
22
+ "main": "dist/index.cjs",
23
+ "module": "dist/index.mjs",
24
+ "types": "dist/index.d.cts",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.mts",
28
+ "import": "./dist/index.mjs",
29
+ "require": "./dist/index.cjs"
30
+ }
31
+ },
25
32
  "dependencies": {
26
- "@testing-library/dom": "^10.4.0",
33
+ "@testing-library/dom": "^10.4.1",
27
34
  "@testing-library/vue": "^8.1.0",
28
35
  "@vue/compiler-sfc": "^3.5.0",
29
- "@atomic-testing/core": "0.81.0",
30
- "@atomic-testing/dom-core": "0.81.0"
36
+ "@atomic-testing/core": "0.85.0",
37
+ "@atomic-testing/dom-core": "0.85.0"
31
38
  },
32
39
  "devDependencies": {
33
40
  "vue": "^3.5.0"
34
41
  },
35
42
  "peerDependencies": {
36
43
  "@testing-library/dom": ">=10.4.0",
37
- "@testing-library/vue": ">=8.1.0",
38
44
  "@testing-library/user-event": ">=14.0.0",
39
- "vue": ">=3.0.0",
40
- "@vue/compiler-sfc": ">=3.0.0"
41
- },
42
- "exports": {
43
- ".": {
44
- "types": "./dist/index.d.mts",
45
- "import": "./dist/index.mjs",
46
- "require": "./dist/index.cjs"
47
- }
45
+ "@testing-library/vue": ">=8.1.0",
46
+ "@vue/compiler-sfc": ">=3.0.0",
47
+ "vue": ">=3.0.0"
48
48
  },
49
49
  "scripts": {
50
50
  "build": "tsdown",
51
- "check:type": "tsc --noEmit"
51
+ "check:type": "tsgo --noEmit"
52
52
  }
53
53
  }
@@ -2,8 +2,8 @@ import { byAttribute, ScenePart, TestEngine } from '@atomic-testing/core';
2
2
  import { render } from '@testing-library/vue';
3
3
  import { App, Component, createApp, defineComponent } from 'vue';
4
4
 
5
- import { VueInteractor } from './VueInteractor';
6
5
  import { IVueTestEngineOption, VueSFCLikeComponent } from './types';
6
+ import { VueInteractor } from './VueInteractor';
7
7
 
8
8
  let _rootId = 0;
9
9
  function getNextRootElementId() {