@canvasengine/testing 2.0.0-beta.41 → 2.0.0-beta.43

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.d.ts CHANGED
@@ -326,4 +326,62 @@ declare function spyOnElement<T extends ComponentInstance>(element: Element<T>,
326
326
  */
327
327
  declare function spyOnElementMultiple<T extends ComponentInstance>(element: Element<T>, properties: (keyof T | string)[]): Record<string, ReturnType<typeof vi.spyOn>>;
328
328
 
329
- export { MockApplication, MockContainer, MockDOMContainer, MockDOMElement, MockGraphics, MockMesh, MockNineSlicePlane, MockObservablePoint, MockRectangle, MockSprite, MockText, MockTexture, MockTilingSprite, MockVideoResource, createMockComponentInstance, createMockElement, spyOnElement, spyOnElementMultiple };
329
+ /**
330
+ * @canvasengine/testing
331
+ *
332
+ * Testing utilities and mocks for CanvasEngine
333
+ *
334
+ * This package provides comprehensive mocks for PixiJS classes and helpers
335
+ * for creating mock elements that can be used in tests without requiring
336
+ * a full PixiJS environment or jsdom setup.
337
+ */
338
+
339
+ /**
340
+ * Mapping of CanvasEngine component names to their corresponding mock classes.
341
+ *
342
+ * This object can be used with bootstrapCanvas() to register mock components for testing.
343
+ *
344
+ * @example
345
+ * ```typescript
346
+ * import { mockComponents } from '@canvasengine/testing';
347
+ *
348
+ * await bootstrapCanvas(rootElement, MyComponent, {
349
+ * components: mockComponents,
350
+ * autoRegister: false
351
+ * });
352
+ * ```
353
+ *
354
+ * @example
355
+ * ```typescript
356
+ * // Use specific mocks only
357
+ * import { mockComponents, MockSprite } from '@canvasengine/testing';
358
+ *
359
+ * await bootstrapCanvas(rootElement, MyComponent, {
360
+ * components: {
361
+ * Sprite: MockSprite,
362
+ * Container: mockComponents.Container
363
+ * }
364
+ * });
365
+ * ```
366
+ */
367
+ declare const mockComponents: {
368
+ readonly Canvas: typeof MockContainer;
369
+ readonly Container: typeof MockContainer;
370
+ readonly Sprite: typeof MockSprite;
371
+ readonly Text: typeof MockText;
372
+ readonly Graphics: typeof MockGraphics;
373
+ readonly Rect: typeof MockGraphics;
374
+ readonly Circle: typeof MockGraphics;
375
+ readonly Ellipse: typeof MockGraphics;
376
+ readonly Triangle: typeof MockGraphics;
377
+ readonly Svg: typeof MockGraphics;
378
+ readonly Mesh: typeof MockMesh;
379
+ readonly TilingSprite: typeof MockTilingSprite;
380
+ readonly NineSliceSprite: typeof MockNineSlicePlane;
381
+ readonly DOMContainer: typeof MockDOMContainer;
382
+ readonly DOMElement: typeof MockDOMElement;
383
+ readonly Viewport: typeof MockContainer;
384
+ readonly ParticlesEmitter: typeof MockContainer;
385
+ };
386
+
387
+ export { MockApplication, MockContainer, MockDOMContainer, MockDOMElement, MockGraphics, MockMesh, MockNineSlicePlane, MockObservablePoint, MockRectangle, MockSprite, MockText, MockTexture, MockTilingSprite, MockVideoResource, createMockComponentInstance, createMockElement, mockComponents, spyOnElement, spyOnElementMultiple };
package/dist/index.js CHANGED
@@ -453,6 +453,29 @@ function spyOnElementMultiple(element, properties) {
453
453
  });
454
454
  return spies;
455
455
  }
456
+
457
+ // src/index.ts
458
+ var mockComponents = {
459
+ Canvas: MockContainer,
460
+ Container: MockContainer,
461
+ Sprite: MockSprite,
462
+ Text: MockText,
463
+ Graphics: MockGraphics,
464
+ Rect: MockGraphics,
465
+ Circle: MockGraphics,
466
+ Ellipse: MockGraphics,
467
+ Triangle: MockGraphics,
468
+ Svg: MockGraphics,
469
+ Mesh: MockMesh,
470
+ TilingSprite: MockTilingSprite,
471
+ NineSliceSprite: MockNineSlicePlane,
472
+ DOMContainer: MockDOMContainer,
473
+ DOMElement: MockDOMElement,
474
+ Viewport: MockContainer,
475
+ // Viewport extends Container
476
+ ParticlesEmitter: MockContainer
477
+ // ParticlesEmitter extends Container
478
+ };
456
479
  export {
457
480
  MockApplication,
458
481
  MockContainer,
@@ -470,6 +493,7 @@ export {
470
493
  MockVideoResource,
471
494
  createMockComponentInstance,
472
495
  createMockElement,
496
+ mockComponents,
473
497
  spyOnElement,
474
498
  spyOnElementMultiple
475
499
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mocks/pixi-base.ts","../src/helpers/createMockElement.ts","../src/helpers/createMockComponentInstance.ts","../src/helpers/spyOnElement.ts"],"sourcesContent":["import { vi } from 'vitest';\n\n/**\n * Base class for creating mock event emitters\n * Provides event handling functionality similar to PixiJS EventEmitter\n */\nclass MockEventEmitter {\n #eventListeners: Map<string, Function[]> = new Map();\n\n on(event: string, handler: Function) {\n if (!this.#eventListeners.has(event)) {\n this.#eventListeners.set(event, []);\n }\n this.#eventListeners.get(event)!.push(handler);\n return this;\n }\n\n off(event: string, handler?: Function) {\n if (!this.#eventListeners.has(event)) return this;\n if (handler) {\n const handlers = this.#eventListeners.get(event)!;\n const index = handlers.indexOf(handler);\n if (index > -1) {\n handlers.splice(index, 1);\n }\n } else {\n this.#eventListeners.delete(event);\n }\n return this;\n }\n\n emit(event: string, data?: any) {\n if (this.#eventListeners.has(event)) {\n this.#eventListeners.get(event)!.forEach(handler => handler(data));\n }\n return this;\n }\n\n once(event: string, handler: Function) {\n const onceHandler = (...args: any[]) => {\n handler(...args);\n this.off(event, onceHandler);\n };\n return this.on(event, onceHandler);\n }\n\n removeAllListeners(event?: string) {\n if (event) {\n this.#eventListeners.delete(event);\n } else {\n this.#eventListeners.clear();\n }\n return this;\n }\n}\n\n/**\n * Mock for PixiJS ObservablePoint\n * Represents a point that can be observed for changes\n */\nexport class MockObservablePoint {\n x: number;\n y: number;\n cb?: (point: MockObservablePoint) => void;\n\n constructor(x = 0, y = 0, cb?: (point: MockObservablePoint) => void) {\n this.x = x;\n this.y = y;\n this.cb = cb;\n }\n\n set(x: number, y: number) {\n this.x = x;\n this.y = y;\n this.cb?.(this);\n return this;\n }\n\n copyFrom(point: { x: number; y: number }) {\n this.x = point.x;\n this.y = point.y;\n this.cb?.(this);\n return this;\n }\n\n copyTo(point: { x: number; y: number }) {\n point.x = this.x;\n point.y = this.y;\n return point;\n }\n\n equals(point: { x: number; y: number }) {\n return this.x === point.x && this.y === point.y;\n }\n}\n\n/**\n * Mock for PixiJS Rectangle\n */\nexport class MockRectangle {\n x: number;\n y: number;\n width: number;\n height: number;\n\n constructor(x = 0, y = 0, width = 0, height = 0) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n contains = vi.fn((x: number, y: number) => {\n return x >= this.x && x <= this.x + this.width &&\n y >= this.y && y <= this.y + this.height;\n });\n\n clone = vi.fn(() => {\n return new MockRectangle(this.x, this.y, this.width, this.height);\n });\n}\n\n/**\n * Mock for PixiJS Texture\n */\nexport class MockTexture {\n width: number;\n height: number;\n baseTexture: any;\n frame: MockRectangle;\n valid: boolean = true;\n\n constructor(width = 100, height = 100) {\n this.width = width;\n this.height = height;\n this.frame = new MockRectangle(0, 0, width, height);\n this.baseTexture = {\n width,\n height,\n valid: true,\n };\n }\n\n destroy = vi.fn();\n update = vi.fn();\n clone = vi.fn(() => new MockTexture(this.width, this.height));\n}\n\n/**\n * Mock for PixiJS Container\n * Base class for all display objects that can contain children\n */\nexport class MockContainer extends MockEventEmitter {\n x: number = 0;\n y: number = 0;\n width: number = 0;\n height: number = 0;\n alpha: number = 1;\n visible: boolean = true;\n rotation: number = 0;\n scale: MockObservablePoint = new MockObservablePoint(1, 1);\n anchor: MockObservablePoint = new MockObservablePoint(0, 0);\n pivot: MockObservablePoint = new MockObservablePoint(0, 0);\n skew: MockObservablePoint = new MockObservablePoint(0, 0);\n tint: number = 0xffffff;\n blendMode: number = 0;\n filters: any[] = [];\n mask: any = null;\n parent: MockContainer | null = null;\n children: MockContainer[] = [];\n eventMode: string = 'auto';\n destroyed: boolean = false;\n zIndex: number = 0;\n sortableChildren: boolean = false;\n sortDirty: boolean = false;\n\n addChild = vi.fn(function<T extends MockContainer>(this: MockContainer, child: T): T {\n if (child.parent) {\n child.parent.removeChild(child);\n }\n child.parent = this;\n this.children.push(child);\n return child;\n });\n\n addChildAt = vi.fn(function<T extends MockContainer>(this: MockContainer, child: T, index: number): T {\n if (child.parent) {\n child.parent.removeChild(child);\n }\n child.parent = this;\n this.children.splice(index, 0, child);\n return child;\n });\n\n removeChild = vi.fn(function<T extends MockContainer>(this: MockContainer, child: T): T {\n const index = this.children.indexOf(child);\n if (index > -1) {\n this.children.splice(index, 1);\n child.parent = null;\n }\n return child;\n });\n\n removeChildAt = vi.fn(function(this: MockContainer, index: number): MockContainer {\n const child = this.children[index];\n if (child) {\n this.children.splice(index, 1);\n child.parent = null;\n }\n return child;\n });\n\n removeChildren = vi.fn(function(this: MockContainer, beginIndex = 0, endIndex = this.children.length): MockContainer[] {\n const removed = this.children.splice(beginIndex, endIndex - beginIndex);\n removed.forEach(child => { child.parent = null; });\n return removed;\n });\n\n getChildAt = vi.fn(function(this: MockContainer, index: number): MockContainer {\n return this.children[index];\n });\n\n getChildIndex = vi.fn(function(this: MockContainer, child: MockContainer): number {\n return this.children.indexOf(child);\n });\n\n setChildIndex = vi.fn(function(this: MockContainer, child: MockContainer, index: number): void {\n const currentIndex = this.children.indexOf(child);\n if (currentIndex > -1) {\n this.children.splice(currentIndex, 1);\n this.children.splice(index, 0, child);\n }\n });\n\n swapChildren = vi.fn(function(this: MockContainer, child: MockContainer, child2: MockContainer): void {\n const index1 = this.children.indexOf(child);\n const index2 = this.children.indexOf(child2);\n if (index1 > -1 && index2 > -1) {\n [this.children[index1], this.children[index2]] = [this.children[index2], this.children[index1]];\n }\n });\n\n destroy = vi.fn(function(this: MockContainer, options?: any): void {\n this.destroyed = true;\n this.removeChildren();\n this.removeAllListeners();\n });\n\n updateTransform = vi.fn();\n render = vi.fn();\n calculateBounds = vi.fn();\n getLocalBounds = vi.fn(() => new MockRectangle(0, 0, this.width, this.height));\n getBounds = vi.fn(() => new MockRectangle(this.x, this.y, this.width, this.height));\n toLocal = vi.fn((point: { x: number; y: number }) => ({ x: point.x - this.x, y: point.y - this.y }));\n toGlobal = vi.fn((point: { x: number; y: number }) => ({ x: point.x + this.x, y: point.y + this.y }));\n}\n\n/**\n * Mock for PixiJS Graphics\n */\nexport class MockGraphics extends MockContainer {\n geometry: any = null;\n\n clear = vi.fn(() => this);\n rect = vi.fn(() => this);\n circle = vi.fn(() => this);\n ellipse = vi.fn(() => this);\n polygon = vi.fn(() => this);\n lineTo = vi.fn(() => this);\n moveTo = vi.fn(() => this);\n beginFill = vi.fn(() => this);\n endFill = vi.fn(() => this);\n lineStyle = vi.fn(() => this);\n drawRect = vi.fn(() => this);\n drawCircle = vi.fn(() => this);\n drawEllipse = vi.fn(() => this);\n drawPolygon = vi.fn(() => this);\n}\n\n/**\n * Mock for PixiJS Sprite\n */\nexport class MockSprite extends MockContainer {\n texture: MockTexture;\n anchor: MockObservablePoint = new MockObservablePoint(0.5, 0.5);\n\n constructor(texture?: MockTexture) {\n super();\n this.texture = texture || new MockTexture(100, 100);\n this.width = this.texture.width;\n this.height = this.texture.height;\n }\n\n static from = vi.fn((source: string | MockTexture) => {\n if (typeof source === 'string') {\n return new MockSprite(new MockTexture(100, 100));\n }\n return new MockSprite(source);\n });\n}\n\n/**\n * Mock for PixiJS Text\n */\nexport class MockText extends MockContainer {\n text: string = '';\n style: any = {};\n canvas: HTMLCanvasElement | null = null;\n context: CanvasRenderingContext2D | null = null;\n resolution: number = 1;\n\n constructor(text = '', style?: any) {\n super();\n this.text = text;\n this.style = style || {};\n }\n\n updateText = vi.fn((respectDirty = true) => {});\n updateTransform = vi.fn();\n}\n\n/**\n * Mock for PixiJS Mesh\n */\nexport class MockMesh extends MockContainer {\n geometry: any = null;\n shader: any = null;\n texture: MockTexture | null = null;\n\n constructor(geometry?: any, shader?: any, texture?: MockTexture) {\n super();\n this.geometry = geometry;\n this.shader = shader;\n this.texture = texture || null;\n }\n}\n\n/**\n * Mock for PixiJS TilingSprite\n */\nexport class MockTilingSprite extends MockContainer {\n texture: MockTexture;\n tilePosition: MockObservablePoint = new MockObservablePoint(0, 0);\n tileScale: MockObservablePoint = new MockObservablePoint(1, 1);\n\n constructor(texture: MockTexture, width = 100, height = 100) {\n super();\n this.texture = texture;\n this.width = width;\n this.height = height;\n }\n}\n\n/**\n * Mock for PixiJS NineSlicePlane\n */\nexport class MockNineSlicePlane extends MockContainer {\n texture: MockTexture;\n leftWidth: number = 10;\n topHeight: number = 10;\n rightWidth: number = 10;\n bottomHeight: number = 10;\n\n constructor(texture: MockTexture, leftWidth = 10, topHeight = 10, rightWidth = 10, bottomHeight = 10) {\n super();\n this.texture = texture;\n this.leftWidth = leftWidth;\n this.topHeight = topHeight;\n this.rightWidth = rightWidth;\n this.bottomHeight = bottomHeight;\n }\n}\n\n/**\n * Mock for PixiJS DOMElement\n */\nexport class MockDOMElement extends MockContainer {\n element: HTMLElement | null = null;\n\n constructor(element?: HTMLElement | string) {\n super();\n if (typeof element === 'string') {\n this.element = document.createElement(element);\n } else {\n this.element = element || null;\n }\n }\n}\n\n/**\n * Mock for PixiJS DOMContainer\n */\nexport class MockDOMContainer extends MockContainer {\n constructor() {\n super();\n }\n}\n\n/**\n * Mock for PixiJS Application\n */\nexport class MockApplication extends MockEventEmitter {\n stage: MockContainer = new MockContainer();\n screen: MockRectangle = new MockRectangle(800, 600);\n view: HTMLCanvasElement;\n destroyed: boolean = false;\n renderer: any = {\n width: 800,\n height: 600,\n resolution: 1,\n plugins: {},\n render: vi.fn(),\n destroy: vi.fn(),\n resize: vi.fn(),\n clear: vi.fn(),\n };\n ticker: any = {\n add: vi.fn(),\n remove: vi.fn(),\n start: vi.fn(),\n stop: vi.fn(),\n };\n loader: any = {\n add: vi.fn(),\n load: vi.fn(),\n };\n\n constructor(options?: any) {\n super();\n const canvas = document.createElement('canvas');\n canvas.width = options?.width || 800;\n canvas.height = options?.height || 600;\n this.view = canvas;\n this.screen.width = options?.width || 800;\n this.screen.height = options?.height || 600;\n }\n\n render = vi.fn(() => {});\n destroy = vi.fn((removeView = false) => {\n this.destroyed = true;\n if (removeView && this.view.parentNode) {\n this.view.parentNode.removeChild(this.view);\n }\n });\n resize = vi.fn((width: number, height: number) => {\n this.screen.width = width;\n this.screen.height = height;\n this.view.width = width;\n this.view.height = height;\n });\n}\n\n/**\n * Mock for PixiJS VideoResource (for Video component)\n */\nexport class MockVideoResource {\n source: HTMLVideoElement | null = null;\n width: number = 0;\n height: number = 0;\n valid: boolean = false;\n\n constructor(source?: HTMLVideoElement) {\n this.source = source || null;\n if (source) {\n this.width = source.videoWidth || 0;\n this.height = source.videoHeight || 0;\n this.valid = true;\n }\n }\n\n load = vi.fn(() => Promise.resolve(this));\n destroy = vi.fn();\n}\n","import { Element, Props } from 'canvasengine';\nimport { ComponentInstance } from 'canvasengine';\nimport { Subject } from 'rxjs';\nimport { createMockComponentInstance } from './createMockComponentInstance';\n\n/**\n * Creates a mock Element with all required properties\n * \n * This function creates a complete mock Element that can be used in tests.\n * The element includes a mock componentInstance (PixiJS instance) that can be spied upon.\n * \n * @param tag - The tag name of the element (e.g., 'Container', 'Sprite')\n * @param props - Optional props to assign to the element\n * @param componentInstance - Optional custom componentInstance. If not provided, a default mock will be created\n * @returns A complete mock Element with all required properties\n * \n * @example\n * ```typescript\n * // Create a basic element with default mock\n * const element = createMockElement('Container', { x: 100, y: 50 });\n * \n * // Create an element with custom componentInstance\n * const customInstance = new MockSprite();\n * const spriteElement = createMockElement('Sprite', { image: 'hero.png' }, customInstance);\n * \n * // Access and spy on componentInstance\n * expect(element.componentInstance.x).toBe(100);\n * ```\n */\nexport function createMockElement<T extends ComponentInstance = ComponentInstance>(\n tag: string,\n props: Props = {},\n componentInstance?: T\n): Element<T> {\n const instance = componentInstance || (createMockComponentInstance(tag) as T);\n\n // Apply props to componentInstance if they are standard PixiJS properties\n if (instance && typeof instance === 'object') {\n Object.keys(props).forEach(key => {\n if (key in instance && !['children', 'context'].includes(key)) {\n (instance as any)[key] = props[key];\n }\n });\n }\n\n const element: Element<T> = {\n tag,\n props: { ...props },\n componentInstance: instance,\n propSubscriptions: [],\n propObservables: undefined,\n parent: null,\n context: undefined,\n directives: {},\n destroy: () => {\n // Mock destroy implementation\n element.propSubscriptions.forEach(sub => sub.unsubscribe());\n element.effectSubscriptions.forEach(sub => sub.unsubscribe());\n element.effectUnmounts.forEach(fn => {\n if (typeof fn === 'function') {\n fn();\n }\n });\n },\n allElements: new Subject(),\n isFrozen: false,\n effectSubscriptions: [],\n effectMounts: [],\n effectUnmounts: [],\n };\n\n return element;\n}\n","import { ComponentInstance } from 'canvasengine';\nimport { MockContainer, MockSprite, MockText, MockGraphics, MockMesh, MockTilingSprite, MockNineSlicePlane, MockDOMElement, MockDOMContainer, MockTexture } from '../mocks/pixi-base';\n\n/**\n * Creates a mock ComponentInstance based on the component type\n * \n * This helper function creates appropriate mock instances for different component types.\n * It's useful when you need a ComponentInstance but don't want to use the real PixiJS implementation.\n * \n * @param componentType - The type of component to create a mock for\n * @returns A mock ComponentInstance appropriate for the component type\n * \n * @example\n * ```typescript\n * const containerInstance = createMockComponentInstance('Container');\n * const spriteInstance = createMockComponentInstance('Sprite');\n * ```\n */\nexport function createMockComponentInstance(componentType: string): ComponentInstance {\n switch (componentType.toLowerCase()) {\n case 'container':\n return new MockContainer() as any;\n case 'sprite':\n return new MockSprite() as any;\n case 'text':\n return new MockText() as any;\n case 'graphics':\n case 'rect':\n case 'circle':\n case 'ellipse':\n case 'triangle':\n case 'svg':\n return new MockGraphics() as any;\n case 'mesh':\n return new MockMesh() as any;\n case 'tilingsprite':\n return new MockTilingSprite(new MockTexture()) as any;\n case 'nineslicesprite':\n return new MockNineSlicePlane(new MockTexture()) as any;\n case 'domelement':\n return new MockDOMElement() as any;\n case 'domcontainer':\n return new MockDOMContainer() as any;\n default:\n // Default to Container for unknown types\n return new MockContainer() as any;\n }\n}\n","import { vi } from 'vitest';\nimport { Element, ComponentInstance } from 'canvasengine';\n\n/**\n * Creates a spy on a property or method of an element's componentInstance\n * \n * This helper makes it easy to spy on the PixiJS instance (componentInstance) of an element.\n * It's a convenience wrapper around vi.spyOn that targets element.componentInstance.\n * \n * @param element - The element whose componentInstance should be spied upon\n * @param property - The property or method name to spy on\n * @returns A Vitest spy object\n * \n * @example\n * ```typescript\n * const element = createMockElement('Container', { x: 100 });\n * \n * // Spy on a property getter/setter\n * const xSpy = spyOnElement(element, 'x');\n * element.componentInstance.x = 200;\n * expect(xSpy).toHaveBeenCalled();\n * \n * // Spy on a method\n * const addChildSpy = spyOnElement(element, 'addChild');\n * element.componentInstance.addChild(new MockContainer());\n * expect(addChildSpy).toHaveBeenCalled();\n * ```\n */\nexport function spyOnElement<T extends ComponentInstance>(\n element: Element<T>,\n property: keyof T | string\n): ReturnType<typeof vi.spyOn> {\n if (!element.componentInstance) {\n throw new Error('Element componentInstance is not defined');\n }\n\n return vi.spyOn(element.componentInstance as any, property as string);\n}\n\n/**\n * Creates spies on multiple properties or methods of an element's componentInstance\n * \n * This helper allows you to spy on multiple properties/methods at once.\n * \n * @param element - The element whose componentInstance should be spied upon\n * @param properties - Array of property or method names to spy on\n * @returns An object with spy objects keyed by property name\n * \n * @example\n * ```typescript\n * const element = createMockElement('Container');\n * const spies = spyOnElementMultiple(element, ['addChild', 'removeChild', 'destroy']);\n * \n * element.componentInstance.addChild(new MockContainer());\n * expect(spies.addChild).toHaveBeenCalled();\n * ```\n */\nexport function spyOnElementMultiple<T extends ComponentInstance>(\n element: Element<T>,\n properties: (keyof T | string)[]\n): Record<string, ReturnType<typeof vi.spyOn>> {\n const spies: Record<string, ReturnType<typeof vi.spyOn>> = {};\n \n properties.forEach(property => {\n spies[property as string] = spyOnElement(element, property);\n });\n \n return spies;\n}\n"],"mappings":"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","names":["vi"]}
1
+ {"version":3,"sources":["../src/mocks/pixi-base.ts","../src/helpers/createMockElement.ts","../src/helpers/createMockComponentInstance.ts","../src/helpers/spyOnElement.ts","../src/index.ts"],"sourcesContent":["import { vi } from 'vitest';\n\n/**\n * Base class for creating mock event emitters\n * Provides event handling functionality similar to PixiJS EventEmitter\n */\nclass MockEventEmitter {\n #eventListeners: Map<string, Function[]> = new Map();\n\n on(event: string, handler: Function) {\n if (!this.#eventListeners.has(event)) {\n this.#eventListeners.set(event, []);\n }\n this.#eventListeners.get(event)!.push(handler);\n return this;\n }\n\n off(event: string, handler?: Function) {\n if (!this.#eventListeners.has(event)) return this;\n if (handler) {\n const handlers = this.#eventListeners.get(event)!;\n const index = handlers.indexOf(handler);\n if (index > -1) {\n handlers.splice(index, 1);\n }\n } else {\n this.#eventListeners.delete(event);\n }\n return this;\n }\n\n emit(event: string, data?: any) {\n if (this.#eventListeners.has(event)) {\n this.#eventListeners.get(event)!.forEach(handler => handler(data));\n }\n return this;\n }\n\n once(event: string, handler: Function) {\n const onceHandler = (...args: any[]) => {\n handler(...args);\n this.off(event, onceHandler);\n };\n return this.on(event, onceHandler);\n }\n\n removeAllListeners(event?: string) {\n if (event) {\n this.#eventListeners.delete(event);\n } else {\n this.#eventListeners.clear();\n }\n return this;\n }\n}\n\n/**\n * Mock for PixiJS ObservablePoint\n * Represents a point that can be observed for changes\n */\nexport class MockObservablePoint {\n x: number;\n y: number;\n cb?: (point: MockObservablePoint) => void;\n\n constructor(x = 0, y = 0, cb?: (point: MockObservablePoint) => void) {\n this.x = x;\n this.y = y;\n this.cb = cb;\n }\n\n set(x: number, y: number) {\n this.x = x;\n this.y = y;\n this.cb?.(this);\n return this;\n }\n\n copyFrom(point: { x: number; y: number }) {\n this.x = point.x;\n this.y = point.y;\n this.cb?.(this);\n return this;\n }\n\n copyTo(point: { x: number; y: number }) {\n point.x = this.x;\n point.y = this.y;\n return point;\n }\n\n equals(point: { x: number; y: number }) {\n return this.x === point.x && this.y === point.y;\n }\n}\n\n/**\n * Mock for PixiJS Rectangle\n */\nexport class MockRectangle {\n x: number;\n y: number;\n width: number;\n height: number;\n\n constructor(x = 0, y = 0, width = 0, height = 0) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n contains = vi.fn((x: number, y: number) => {\n return x >= this.x && x <= this.x + this.width &&\n y >= this.y && y <= this.y + this.height;\n });\n\n clone = vi.fn(() => {\n return new MockRectangle(this.x, this.y, this.width, this.height);\n });\n}\n\n/**\n * Mock for PixiJS Texture\n */\nexport class MockTexture {\n width: number;\n height: number;\n baseTexture: any;\n frame: MockRectangle;\n valid: boolean = true;\n\n constructor(width = 100, height = 100) {\n this.width = width;\n this.height = height;\n this.frame = new MockRectangle(0, 0, width, height);\n this.baseTexture = {\n width,\n height,\n valid: true,\n };\n }\n\n destroy = vi.fn();\n update = vi.fn();\n clone = vi.fn(() => new MockTexture(this.width, this.height));\n}\n\n/**\n * Mock for PixiJS Container\n * Base class for all display objects that can contain children\n */\nexport class MockContainer extends MockEventEmitter {\n x: number = 0;\n y: number = 0;\n width: number = 0;\n height: number = 0;\n alpha: number = 1;\n visible: boolean = true;\n rotation: number = 0;\n scale: MockObservablePoint = new MockObservablePoint(1, 1);\n anchor: MockObservablePoint = new MockObservablePoint(0, 0);\n pivot: MockObservablePoint = new MockObservablePoint(0, 0);\n skew: MockObservablePoint = new MockObservablePoint(0, 0);\n tint: number = 0xffffff;\n blendMode: number = 0;\n filters: any[] = [];\n mask: any = null;\n parent: MockContainer | null = null;\n children: MockContainer[] = [];\n eventMode: string = 'auto';\n destroyed: boolean = false;\n zIndex: number = 0;\n sortableChildren: boolean = false;\n sortDirty: boolean = false;\n\n addChild = vi.fn(function<T extends MockContainer>(this: MockContainer, child: T): T {\n if (child.parent) {\n child.parent.removeChild(child);\n }\n child.parent = this;\n this.children.push(child);\n return child;\n });\n\n addChildAt = vi.fn(function<T extends MockContainer>(this: MockContainer, child: T, index: number): T {\n if (child.parent) {\n child.parent.removeChild(child);\n }\n child.parent = this;\n this.children.splice(index, 0, child);\n return child;\n });\n\n removeChild = vi.fn(function<T extends MockContainer>(this: MockContainer, child: T): T {\n const index = this.children.indexOf(child);\n if (index > -1) {\n this.children.splice(index, 1);\n child.parent = null;\n }\n return child;\n });\n\n removeChildAt = vi.fn(function(this: MockContainer, index: number): MockContainer {\n const child = this.children[index];\n if (child) {\n this.children.splice(index, 1);\n child.parent = null;\n }\n return child;\n });\n\n removeChildren = vi.fn(function(this: MockContainer, beginIndex = 0, endIndex = this.children.length): MockContainer[] {\n const removed = this.children.splice(beginIndex, endIndex - beginIndex);\n removed.forEach(child => { child.parent = null; });\n return removed;\n });\n\n getChildAt = vi.fn(function(this: MockContainer, index: number): MockContainer {\n return this.children[index];\n });\n\n getChildIndex = vi.fn(function(this: MockContainer, child: MockContainer): number {\n return this.children.indexOf(child);\n });\n\n setChildIndex = vi.fn(function(this: MockContainer, child: MockContainer, index: number): void {\n const currentIndex = this.children.indexOf(child);\n if (currentIndex > -1) {\n this.children.splice(currentIndex, 1);\n this.children.splice(index, 0, child);\n }\n });\n\n swapChildren = vi.fn(function(this: MockContainer, child: MockContainer, child2: MockContainer): void {\n const index1 = this.children.indexOf(child);\n const index2 = this.children.indexOf(child2);\n if (index1 > -1 && index2 > -1) {\n [this.children[index1], this.children[index2]] = [this.children[index2], this.children[index1]];\n }\n });\n\n destroy = vi.fn(function(this: MockContainer, options?: any): void {\n this.destroyed = true;\n this.removeChildren();\n this.removeAllListeners();\n });\n\n updateTransform = vi.fn();\n render = vi.fn();\n calculateBounds = vi.fn();\n getLocalBounds = vi.fn(() => new MockRectangle(0, 0, this.width, this.height));\n getBounds = vi.fn(() => new MockRectangle(this.x, this.y, this.width, this.height));\n toLocal = vi.fn((point: { x: number; y: number }) => ({ x: point.x - this.x, y: point.y - this.y }));\n toGlobal = vi.fn((point: { x: number; y: number }) => ({ x: point.x + this.x, y: point.y + this.y }));\n}\n\n/**\n * Mock for PixiJS Graphics\n */\nexport class MockGraphics extends MockContainer {\n geometry: any = null;\n\n clear = vi.fn(() => this);\n rect = vi.fn(() => this);\n circle = vi.fn(() => this);\n ellipse = vi.fn(() => this);\n polygon = vi.fn(() => this);\n lineTo = vi.fn(() => this);\n moveTo = vi.fn(() => this);\n beginFill = vi.fn(() => this);\n endFill = vi.fn(() => this);\n lineStyle = vi.fn(() => this);\n drawRect = vi.fn(() => this);\n drawCircle = vi.fn(() => this);\n drawEllipse = vi.fn(() => this);\n drawPolygon = vi.fn(() => this);\n}\n\n/**\n * Mock for PixiJS Sprite\n */\nexport class MockSprite extends MockContainer {\n texture: MockTexture;\n anchor: MockObservablePoint = new MockObservablePoint(0.5, 0.5);\n\n constructor(texture?: MockTexture) {\n super();\n this.texture = texture || new MockTexture(100, 100);\n this.width = this.texture.width;\n this.height = this.texture.height;\n }\n\n static from = vi.fn((source: string | MockTexture) => {\n if (typeof source === 'string') {\n return new MockSprite(new MockTexture(100, 100));\n }\n return new MockSprite(source);\n });\n}\n\n/**\n * Mock for PixiJS Text\n */\nexport class MockText extends MockContainer {\n text: string = '';\n style: any = {};\n canvas: HTMLCanvasElement | null = null;\n context: CanvasRenderingContext2D | null = null;\n resolution: number = 1;\n\n constructor(text = '', style?: any) {\n super();\n this.text = text;\n this.style = style || {};\n }\n\n updateText = vi.fn((respectDirty = true) => {});\n updateTransform = vi.fn();\n}\n\n/**\n * Mock for PixiJS Mesh\n */\nexport class MockMesh extends MockContainer {\n geometry: any = null;\n shader: any = null;\n texture: MockTexture | null = null;\n\n constructor(geometry?: any, shader?: any, texture?: MockTexture) {\n super();\n this.geometry = geometry;\n this.shader = shader;\n this.texture = texture || null;\n }\n}\n\n/**\n * Mock for PixiJS TilingSprite\n */\nexport class MockTilingSprite extends MockContainer {\n texture: MockTexture;\n tilePosition: MockObservablePoint = new MockObservablePoint(0, 0);\n tileScale: MockObservablePoint = new MockObservablePoint(1, 1);\n\n constructor(texture: MockTexture, width = 100, height = 100) {\n super();\n this.texture = texture;\n this.width = width;\n this.height = height;\n }\n}\n\n/**\n * Mock for PixiJS NineSlicePlane\n */\nexport class MockNineSlicePlane extends MockContainer {\n texture: MockTexture;\n leftWidth: number = 10;\n topHeight: number = 10;\n rightWidth: number = 10;\n bottomHeight: number = 10;\n\n constructor(texture: MockTexture, leftWidth = 10, topHeight = 10, rightWidth = 10, bottomHeight = 10) {\n super();\n this.texture = texture;\n this.leftWidth = leftWidth;\n this.topHeight = topHeight;\n this.rightWidth = rightWidth;\n this.bottomHeight = bottomHeight;\n }\n}\n\n/**\n * Mock for PixiJS DOMElement\n */\nexport class MockDOMElement extends MockContainer {\n element: HTMLElement | null = null;\n\n constructor(element?: HTMLElement | string) {\n super();\n if (typeof element === 'string') {\n this.element = document.createElement(element);\n } else {\n this.element = element || null;\n }\n }\n}\n\n/**\n * Mock for PixiJS DOMContainer\n */\nexport class MockDOMContainer extends MockContainer {\n constructor() {\n super();\n }\n}\n\n/**\n * Mock for PixiJS Application\n */\nexport class MockApplication extends MockEventEmitter {\n stage: MockContainer = new MockContainer();\n screen: MockRectangle = new MockRectangle(800, 600);\n view: HTMLCanvasElement;\n destroyed: boolean = false;\n renderer: any = {\n width: 800,\n height: 600,\n resolution: 1,\n plugins: {},\n render: vi.fn(),\n destroy: vi.fn(),\n resize: vi.fn(),\n clear: vi.fn(),\n };\n ticker: any = {\n add: vi.fn(),\n remove: vi.fn(),\n start: vi.fn(),\n stop: vi.fn(),\n };\n loader: any = {\n add: vi.fn(),\n load: vi.fn(),\n };\n\n constructor(options?: any) {\n super();\n const canvas = document.createElement('canvas');\n canvas.width = options?.width || 800;\n canvas.height = options?.height || 600;\n this.view = canvas;\n this.screen.width = options?.width || 800;\n this.screen.height = options?.height || 600;\n }\n\n render = vi.fn(() => {});\n destroy = vi.fn((removeView = false) => {\n this.destroyed = true;\n if (removeView && this.view.parentNode) {\n this.view.parentNode.removeChild(this.view);\n }\n });\n resize = vi.fn((width: number, height: number) => {\n this.screen.width = width;\n this.screen.height = height;\n this.view.width = width;\n this.view.height = height;\n });\n}\n\n/**\n * Mock for PixiJS VideoResource (for Video component)\n */\nexport class MockVideoResource {\n source: HTMLVideoElement | null = null;\n width: number = 0;\n height: number = 0;\n valid: boolean = false;\n\n constructor(source?: HTMLVideoElement) {\n this.source = source || null;\n if (source) {\n this.width = source.videoWidth || 0;\n this.height = source.videoHeight || 0;\n this.valid = true;\n }\n }\n\n load = vi.fn(() => Promise.resolve(this));\n destroy = vi.fn();\n}\n","import { Element, Props } from 'canvasengine';\nimport { ComponentInstance } from 'canvasengine';\nimport { Subject } from 'rxjs';\nimport { createMockComponentInstance } from './createMockComponentInstance';\n\n/**\n * Creates a mock Element with all required properties\n * \n * This function creates a complete mock Element that can be used in tests.\n * The element includes a mock componentInstance (PixiJS instance) that can be spied upon.\n * \n * @param tag - The tag name of the element (e.g., 'Container', 'Sprite')\n * @param props - Optional props to assign to the element\n * @param componentInstance - Optional custom componentInstance. If not provided, a default mock will be created\n * @returns A complete mock Element with all required properties\n * \n * @example\n * ```typescript\n * // Create a basic element with default mock\n * const element = createMockElement('Container', { x: 100, y: 50 });\n * \n * // Create an element with custom componentInstance\n * const customInstance = new MockSprite();\n * const spriteElement = createMockElement('Sprite', { image: 'hero.png' }, customInstance);\n * \n * // Access and spy on componentInstance\n * expect(element.componentInstance.x).toBe(100);\n * ```\n */\nexport function createMockElement<T extends ComponentInstance = ComponentInstance>(\n tag: string,\n props: Props = {},\n componentInstance?: T\n): Element<T> {\n const instance = componentInstance || (createMockComponentInstance(tag) as T);\n\n // Apply props to componentInstance if they are standard PixiJS properties\n if (instance && typeof instance === 'object') {\n Object.keys(props).forEach(key => {\n if (key in instance && !['children', 'context'].includes(key)) {\n (instance as any)[key] = props[key];\n }\n });\n }\n\n const element: Element<T> = {\n tag,\n props: { ...props },\n componentInstance: instance,\n propSubscriptions: [],\n propObservables: undefined,\n parent: null,\n context: undefined,\n directives: {},\n destroy: () => {\n // Mock destroy implementation\n element.propSubscriptions.forEach(sub => sub.unsubscribe());\n element.effectSubscriptions.forEach(sub => sub.unsubscribe());\n element.effectUnmounts.forEach(fn => {\n if (typeof fn === 'function') {\n fn();\n }\n });\n },\n allElements: new Subject(),\n isFrozen: false,\n effectSubscriptions: [],\n effectMounts: [],\n effectUnmounts: [],\n };\n\n return element;\n}\n","import { ComponentInstance } from 'canvasengine';\nimport { MockContainer, MockSprite, MockText, MockGraphics, MockMesh, MockTilingSprite, MockNineSlicePlane, MockDOMElement, MockDOMContainer, MockTexture } from '../mocks/pixi-base';\n\n/**\n * Creates a mock ComponentInstance based on the component type\n * \n * This helper function creates appropriate mock instances for different component types.\n * It's useful when you need a ComponentInstance but don't want to use the real PixiJS implementation.\n * \n * @param componentType - The type of component to create a mock for\n * @returns A mock ComponentInstance appropriate for the component type\n * \n * @example\n * ```typescript\n * const containerInstance = createMockComponentInstance('Container');\n * const spriteInstance = createMockComponentInstance('Sprite');\n * ```\n */\nexport function createMockComponentInstance(componentType: string): ComponentInstance {\n switch (componentType.toLowerCase()) {\n case 'container':\n return new MockContainer() as any;\n case 'sprite':\n return new MockSprite() as any;\n case 'text':\n return new MockText() as any;\n case 'graphics':\n case 'rect':\n case 'circle':\n case 'ellipse':\n case 'triangle':\n case 'svg':\n return new MockGraphics() as any;\n case 'mesh':\n return new MockMesh() as any;\n case 'tilingsprite':\n return new MockTilingSprite(new MockTexture()) as any;\n case 'nineslicesprite':\n return new MockNineSlicePlane(new MockTexture()) as any;\n case 'domelement':\n return new MockDOMElement() as any;\n case 'domcontainer':\n return new MockDOMContainer() as any;\n default:\n // Default to Container for unknown types\n return new MockContainer() as any;\n }\n}\n","import { vi } from 'vitest';\nimport { Element, ComponentInstance } from 'canvasengine';\n\n/**\n * Creates a spy on a property or method of an element's componentInstance\n * \n * This helper makes it easy to spy on the PixiJS instance (componentInstance) of an element.\n * It's a convenience wrapper around vi.spyOn that targets element.componentInstance.\n * \n * @param element - The element whose componentInstance should be spied upon\n * @param property - The property or method name to spy on\n * @returns A Vitest spy object\n * \n * @example\n * ```typescript\n * const element = createMockElement('Container', { x: 100 });\n * \n * // Spy on a property getter/setter\n * const xSpy = spyOnElement(element, 'x');\n * element.componentInstance.x = 200;\n * expect(xSpy).toHaveBeenCalled();\n * \n * // Spy on a method\n * const addChildSpy = spyOnElement(element, 'addChild');\n * element.componentInstance.addChild(new MockContainer());\n * expect(addChildSpy).toHaveBeenCalled();\n * ```\n */\nexport function spyOnElement<T extends ComponentInstance>(\n element: Element<T>,\n property: keyof T | string\n): ReturnType<typeof vi.spyOn> {\n if (!element.componentInstance) {\n throw new Error('Element componentInstance is not defined');\n }\n\n return vi.spyOn(element.componentInstance as any, property as string);\n}\n\n/**\n * Creates spies on multiple properties or methods of an element's componentInstance\n * \n * This helper allows you to spy on multiple properties/methods at once.\n * \n * @param element - The element whose componentInstance should be spied upon\n * @param properties - Array of property or method names to spy on\n * @returns An object with spy objects keyed by property name\n * \n * @example\n * ```typescript\n * const element = createMockElement('Container');\n * const spies = spyOnElementMultiple(element, ['addChild', 'removeChild', 'destroy']);\n * \n * element.componentInstance.addChild(new MockContainer());\n * expect(spies.addChild).toHaveBeenCalled();\n * ```\n */\nexport function spyOnElementMultiple<T extends ComponentInstance>(\n element: Element<T>,\n properties: (keyof T | string)[]\n): Record<string, ReturnType<typeof vi.spyOn>> {\n const spies: Record<string, ReturnType<typeof vi.spyOn>> = {};\n \n properties.forEach(property => {\n spies[property as string] = spyOnElement(element, property);\n });\n \n return spies;\n}\n","/**\n * @canvasengine/testing\n * \n * Testing utilities and mocks for CanvasEngine\n * \n * This package provides comprehensive mocks for PixiJS classes and helpers\n * for creating mock elements that can be used in tests without requiring\n * a full PixiJS environment or jsdom setup.\n */\n\n// Export all PixiJS mocks\nexport {\n MockContainer,\n MockSprite,\n MockText,\n MockGraphics,\n MockMesh,\n MockTilingSprite,\n MockNineSlicePlane,\n MockDOMElement,\n MockDOMContainer,\n MockApplication,\n MockTexture,\n MockRectangle,\n MockObservablePoint,\n MockVideoResource,\n} from './mocks/pixi-base';\n\n// Import mocks for the mapping\nimport {\n MockContainer,\n MockSprite,\n MockText,\n MockGraphics,\n MockMesh,\n MockTilingSprite,\n MockNineSlicePlane,\n MockDOMElement,\n MockDOMContainer,\n} from './mocks/pixi-base';\n\n// Export helpers\nexport {\n createMockElement,\n} from './helpers/createMockElement';\n\nexport {\n createMockComponentInstance,\n} from './helpers/createMockComponentInstance';\n\nexport {\n spyOnElement,\n spyOnElementMultiple,\n} from './helpers/spyOnElement';\n\n// Re-export types from canvasengine for convenience\nexport type {\n Element,\n Props,\n ComponentInstance,\n} from 'canvasengine';\n\n/**\n * Mapping of CanvasEngine component names to their corresponding mock classes.\n * \n * This object can be used with bootstrapCanvas() to register mock components for testing.\n * \n * @example\n * ```typescript\n * import { mockComponents } from '@canvasengine/testing';\n * \n * await bootstrapCanvas(rootElement, MyComponent, {\n * components: mockComponents,\n * autoRegister: false\n * });\n * ```\n * \n * @example\n * ```typescript\n * // Use specific mocks only\n * import { mockComponents, MockSprite } from '@canvasengine/testing';\n * \n * await bootstrapCanvas(rootElement, MyComponent, {\n * components: {\n * Sprite: MockSprite,\n * Container: mockComponents.Container\n * }\n * });\n * ```\n */\nexport const mockComponents = {\n Canvas: MockContainer,\n Container: MockContainer,\n Sprite: MockSprite,\n Text: MockText,\n Graphics: MockGraphics,\n Rect: MockGraphics,\n Circle: MockGraphics,\n Ellipse: MockGraphics,\n Triangle: MockGraphics,\n Svg: MockGraphics,\n Mesh: MockMesh,\n TilingSprite: MockTilingSprite,\n NineSliceSprite: MockNineSlicePlane,\n DOMContainer: MockDOMContainer,\n DOMElement: MockDOMElement,\n Viewport: MockContainer, // Viewport extends Container\n ParticlesEmitter: MockContainer, // ParticlesEmitter extends Container\n} as const;\n"],"mappings":"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","names":["vi"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canvasengine/testing",
3
- "version": "2.0.0-beta.41",
3
+ "version": "2.0.0-beta.43",
4
4
  "description": "Testing utilities and mocks for CanvasEngine",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -10,7 +10,7 @@
10
10
  ],
11
11
  "peerDependencies": {
12
12
  "vitest": "*",
13
- "canvasengine": "2.0.0-beta.41"
13
+ "canvasengine": "2.0.0-beta.43"
14
14
  },
15
15
  "devDependencies": {
16
16
  "@types/node": "^25.0.1",