UNPKG

svelte-phaser

Version:

Create Phaser 3 games with Svelte 3

254 lines (197 loc) 5.23 kB
import { render } from '@testing-library/svelte' import type { truncate } from 'fs' import { tick, getContext } from 'svelte' import ArcadePhysics from './ArcadePhysics.svelte' import { createGame, asMock } from './test-utils' jest.mock('svelte', () => ({ ...jest.requireActual('svelte'), getContext: jest.fn(), })) let game let scene let gameObject beforeAll(async () => { const setup = await createGame({ physics: { default: 'arcade' } }) game = setup.game scene = setup.scene }) beforeEach(() => { gameObject = new Phaser.GameObjects.Text(scene, 0, 0, 'blah', {}) asMock(getContext).mockImplementation((name) => { switch (name) { case 'phaser/scene': return scene case 'phaser/game': return game case 'phaser/game-object': return gameObject } }) }) afterEach(async () => { gameObject.destroy() }) test('acceleration', async () => { const { component: { $$set }, } = render(ArcadePhysics, { acceleration: 1, }) expect(gameObject.body.acceleration).toEqual({ x: 1, y: 1 }) $$set({ accelerationX: 2, accelerationY: 3 }) await tick() expect(gameObject.body.acceleration).toEqual({ x: 2, y: 3 }) }) test('angular', async () => { const { component: { $$set }, } = render(ArcadePhysics) jest.spyOn(gameObject.body, 'setAngularAcceleration') jest.spyOn(gameObject.body, 'setAngularDrag') jest.spyOn(gameObject.body, 'setAngularVelocity') $$set({ angularAcceleration: 1, angularDrag: 1, angularVelocity: 1, }) await tick() expect(gameObject.body.setAngularAcceleration).toHaveBeenCalledWith(1) expect(gameObject.body.setAngularDrag).toHaveBeenCalledWith(1) expect(gameObject.body.setAngularVelocity).toHaveBeenCalledWith(1) }) test('bounce', async () => { const { component: { $$set }, } = render(ArcadePhysics, { bounce: 1, }) expect(gameObject.body.bounce).toEqual({ x: 1, y: 1 }) $$set({ bounceX: 2, bounceY: 3 }) await tick() expect(gameObject.body.bounce).toEqual({ x: 2, y: 3 }) }) test('circle', async () => { const { component: { $$set }, } = render(ArcadePhysics) jest.spyOn(gameObject.body, 'setCircle') $$set({ circle: { radius: 5, offsetX: 10, offsetY: 20, }, }) await tick() expect(gameObject.body.setCircle).toHaveBeenCalledWith(5, 10, 20) }) test('debug', async () => { render(ArcadePhysics, { debugBodyColor: 'red', debugShowBody: true, debugShowVelocity: false, }) expect(gameObject.body.debugBodyColor).toEqual('red') expect(gameObject.body.debugShowBody).toEqual(true) expect(gameObject.body.debugShowVelocity).toEqual(false) }) test('drag', async () => { const { component: { $$set }, } = render(ArcadePhysics, { drag: 1, }) expect(gameObject.body.drag).toEqual({ x: 1, y: 1 }) $$set({ dragX: 2, dragY: 3 }) await tick() expect(gameObject.body.drag).toEqual({ x: 2, y: 3 }) }) test('friction', async () => { const { component: { $$set }, } = render(ArcadePhysics, { friction: 1, }) expect(gameObject.body.friction).toEqual({ x: 1, y: 1 }) $$set({ frictionX: 2, frictionY: 3 }) await tick() expect(gameObject.body.friction).toEqual({ x: 2, y: 3 }) }) test('gravity', async () => { const { component: { $$set }, } = render(ArcadePhysics, { gravity: 1, allowGravity: false, }) jest.spyOn(gameObject.body, 'setAllowGravity') expect(gameObject.body.gravity).toEqual({ x: 1, y: 1 }) $$set({ gravityX: 2, gravityY: 3, allowGravity: true }) await tick() expect(gameObject.body.setAllowGravity).toHaveBeenCalledWith(true) expect(gameObject.body.gravity).toEqual({ x: 2, y: 3 }) }) test('immovable', async () => { render(ArcadePhysics, { immovable: true, }) expect(gameObject.body.immovable).toEqual(true) }) test('offset', async () => { const { component: { $$set }, } = render(ArcadePhysics, { offsetX: 5, offsetY: 10, }) expect(gameObject.body.offset).toEqual({ x: 5, y: 10 }) $$set({ offsetY: 15 }) await tick() expect(gameObject.body.offset).toEqual({ x: 5, y: 15 }) }) test('size', async () => { render(ArcadePhysics, { width: 16, height: 32, }) expect(gameObject.body.width).toEqual(16) expect(gameObject.body.height).toEqual(32) }) test('mass', async () => { render(ArcadePhysics, { mass: 123, }) expect(gameObject.body.mass).toEqual(123) }) test('maxSpeed', async () => { render(ArcadePhysics, { maxSpeed: 3, }) expect(gameObject.body.maxSpeed).toEqual(3) }) test('maxVelocity', async () => { render(ArcadePhysics, { maxVelocityX: 1, maxVelocityY: 2, }) expect(gameObject.body.maxVelocity).toEqual({ x: 1, y: 2 }) }) test('pushable', async () => { const { component: { $$set }, } = render(ArcadePhysics, { pushable: true, }) expect(gameObject.body.pushable).toEqual(true) }) test('velocity', async () => { const { component: { $$set }, } = render(ArcadePhysics, { velocity: 1, }) expect(gameObject.body.velocity).toEqual({ x: 1, y: 1 }) $$set({ velocityX: 2, velocityY: 3 }) await tick() expect(gameObject.body.velocity).toEqual({ x: 2, y: 3 }) })