diff --git a/packages/entity/test/alive.js b/packages/entity/test/alive.js index ed900f6..98715be 100644 --- a/packages/entity/test/alive.js +++ b/packages/entity/test/alive.js @@ -1,142 +1,134 @@ -// import { -// buildCondition, -// buildExpression, -// buildInvoke, -// } from '@avocado/behavior'; -// import {Flecks} from '@flecks/core'; -// import {normalize} from '@flecks/socket'; -// import {expect} from 'chai'; +import {Flecks} from '@flecks/core/server'; +import {normalize} from '@flecks/socket'; +import {expect} from 'chai'; -// let flecks; -// let Entity; -// beforeEach(async () => { -// flecks = Flecks.mock({ -// '@avocado/behavior': require('@avocado/behavior'), -// '@avocado/entity': require('../src'), -// '@avocado/resource': require('@avocado/resource'), -// '@avocado/traits': require('@avocado/traits'), -// '@flecks/socket': require('@flecks/socket'), -// }); -// await Promise.all(flecks.invokeFlat('@flecks/core/starting')); -// ({Entity} = flecks.get('$avocado/resource.resources')); -// }); -// describe('Alive', () => { -// let entity; -// beforeEach(async () => { -// entity = await Entity.load({ -// traits: { -// Alive: {}, -// }, -// }); -// }); -// it('exists', async () => { -// expect(entity.is('Alive')).to.be.true; -// }); -// if ('http' !== process.env.FLECKS_CORE_BUILD_TARGET) { -// it('can die', async () => { -// let isDying = false; -// entity.once('startedDying', () => { -// isDying = true; -// }); -// entity.life = 0; -// entity.tick(0); -// expect(isDying).to.be.true; -// }); -// } -// it('clamps life', async () => { -// entity.life = 120; -// expect(entity.life).to.equal(100); -// entity.maxLife = 50; -// expect(entity.life).to.equal(50); -// }); -// if ('http' !== process.env.FLECKS_CORE_BUILD_TARGET) { -// it('can have a custom death condition', async () => { -// const entity = await Entity.load({ -// traits: { -// Alive: { -// params: { -// deathCondition: buildCondition('<=', [ -// buildExpression(['entity', 'life']), -// 10, -// ]), -// }, -// }, -// }, -// }); -// let isDying = false; -// entity.on('startedDying', () => { -// isDying = true; -// }); -// entity.tick(0); -// expect(isDying).to.be.false; -// entity.life = 10; -// entity.tick(0); -// expect(isDying).to.be.true; -// }); -// } -// it('runs actions on death', async () => { -// let didActions; -// const entity = await Entity.load({ -// traits: { -// Alive: { -// params: { -// deathActions: { -// type: 'expressions', -// expressions: [ -// buildInvoke(['entity', 'ded']), -// ], -// }, -// }, -// }, -// }, -// }); -// entity.ded = () => { -// didActions = true; -// }; -// const handle = setInterval(() => { -// entity.tick(); -// }, 16.66); -// await entity.die(); -// clearInterval(handle); -// expect(didActions).to.be.true; -// }); -// describe('Packets', () => { -// let entity2; -// beforeEach(async () => { -// entity2 = await Entity.load({ -// traits: { -// Alive: {}, -// }, -// }); -// }); -// it('generates and accepts life packets', async () => { -// entity.life = 80; -// entity.maxLife = 90; -// const packets = entity.trait('Alive').packetsFor(); -// expect(packets).to.have.lengthOf(1); -// expect(packets[0][0]).to.equal('TraitUpdateAlive'); -// expect(packets[0][1]).to.deep.equal({life: 80, maxLife: 90}); -// entity2.trait('Alive').acceptPacket(normalize(flecks, packets[0])); -// expect(entity2.life).to.equal(80); -// expect(entity2.maxLife).to.equal(90); -// }); -// if ('http' !== process.env.FLECKS_CORE_BUILD_TARGET) { -// it('generates and accepts death packets', async () => { -// entity.life = 0; -// entity.tick(); -// const packets = entity.trait('Alive').packetsFor(); -// expect(packets).to.have.lengthOf(2); -// expect(packets[0][0]).to.equal('Died'); -// expect(packets[1][0]).to.equal('TraitUpdateAlive'); -// expect(packets[1][1]).to.deep.equal({life: 0, maxLife: 100}); -// const promise = new Promise((resolve) => { -// entity2.once('startedDying', resolve); -// }); -// entity2.trait('Alive').acceptPacket(normalize(flecks, packets[0])); -// entity2.trait('Alive').acceptPacket(normalize(flecks, packets[1])); -// expect(entity2.life).to.equal(0); -// return promise; -// }); -// } -// }); -// }); +let flecks; +let Entity; +beforeEach(async () => { + flecks = Flecks.bootstrap({ + config: { + '@avocado/behavior': {}, + '@avocado/entity:./src': {}, + '@avocado/graphics': {}, + '@avocado/resource': {}, + '@avocado/traits': {}, + '@flecks/core': {}, + '@flecks/react': {}, + '@flecks/socket': {}, + }, + }); + await Promise.all(flecks.invokeFlat('@flecks/core.starting')); + ({Entity} = flecks.get('$avocado/resource.resources')); +}); +describe('Alive', () => { + let entity; + beforeEach(async () => { + entity = await Entity.load({ + traits: { + Alive: {}, + }, + }); + }); + it('exists', async () => { + expect(entity.is('Alive')).to.be.true; + }); + if ('http' !== process.env.FLECKS_CORE_BUILD_TARGET) { + it('can die', async () => { + let isDying = false; + entity.once('startedDying', () => { + isDying = true; + }); + entity.life = 0; + entity.tick(0); + expect(isDying).to.be.true; + }); + } + it('clamps life', async () => { + entity.life = 120; + expect(entity.life).to.equal(100); + entity.maxLife = 50; + expect(entity.life).to.equal(50); + }); + if ('http' !== process.env.FLECKS_CORE_BUILD_TARGET) { + it('can have a custom death condition', async () => { + const entity = await Entity.load({ + traits: { + Alive: { + params: { + deathCheck: 'return entity.life <= 10', + }, + }, + }, + }); + let isDying = false; + entity.on('startedDying', () => { + isDying = true; + }); + entity.tick(0); + expect(isDying).to.be.false; + entity.life = 10; + entity.tick(0); + expect(isDying).to.be.true; + }); + } + it('runs actions on death', async () => { + let didActions; + const entity = await Entity.load({ + traits: { + Alive: { + params: { + deathScript: 'entity.ded();', + }, + }, + }, + }); + entity.ded = () => { + didActions = true; + }; + const handle = setInterval(() => { + entity.tick(); + }, 16.66); + await entity.die(); + clearInterval(handle); + expect(didActions).to.be.true; + }); + describe('Packets', () => { + let entity2; + beforeEach(async () => { + entity2 = await Entity.load({ + traits: { + Alive: {}, + }, + }); + }); + it('generates and accepts life packets', async () => { + entity.life = 80; + entity.maxLife = 90; + const packets = entity.trait('Alive').packetsFor(); + expect(packets).to.have.lengthOf(1); + expect(packets[0][0]).to.equal('TraitUpdateAlive'); + expect(packets[0][1]).to.deep.equal({life: 80, maxLife: 90}); + entity2.trait('Alive').acceptPacket(normalize(flecks, packets[0])); + expect(entity2.life).to.equal(80); + expect(entity2.maxLife).to.equal(90); + }); + if ('http' !== process.env.FLECKS_CORE_BUILD_TARGET) { + it('generates and accepts death packets', async () => { + entity.life = 0; + entity.tick(); + const packets = entity.trait('Alive').packetsFor(); + expect(packets).to.have.lengthOf(2); + expect(packets[0][0]).to.equal('Died'); + expect(packets[1][0]).to.equal('TraitUpdateAlive'); + expect(packets[1][1]).to.deep.equal({life: 0, maxLife: 100}); + const promise = new Promise((resolve) => { + entity2.once('startedDying', resolve); + }); + entity2.trait('Alive').acceptPacket(normalize(flecks, packets[0])); + entity2.trait('Alive').acceptPacket(normalize(flecks, packets[1])); + expect(entity2.life).to.equal(0); + return promise; + }); + } + }); +}); diff --git a/packages/entity/test/directional.js b/packages/entity/test/directional.js index a6d9841..fe04737 100644 --- a/packages/entity/test/directional.js +++ b/packages/entity/test/directional.js @@ -1,58 +1,63 @@ -// import {Flecks} from '@flecks/core'; -// import {normalize} from '@flecks/socket'; -// import {expect} from 'chai'; +import {Flecks} from '@flecks/core/server'; +import {normalize} from '@flecks/socket'; +import {expect} from 'chai'; -// let flecks; -// let Entity; -// beforeEach(async () => { -// flecks = Flecks.mock({ -// '@avocado/entity': require('../src'), -// '@avocado/resource': require('@avocado/resource'), -// '@avocado/traits': require('@avocado/traits'), -// '@flecks/socket': require('@flecks/socket'), -// }); -// await Promise.all(flecks.invokeFlat('@flecks/core/starting')); -// ({Entity} = flecks.get('$avocado/resource.resources')); -// }); -// describe('Directional', () => { -// let entity; -// beforeEach(async () => { -// entity = await Entity.load({ -// traits: { -// Directional: { -// params: { -// directionCount: 4, -// }, -// }, -// }, -// }); -// }); -// it('exists', async () => { -// expect(entity.is('Directional')).to.be.true; -// }); -// it('tracks movement', async () => { -// entity.emit('movementRequest', [1, 0]); -// expect(entity.direction).to.equal(1); -// entity.emit('movementRequest', [0, 1]); -// expect(entity.direction).to.equal(2); -// entity.emit('movementRequest', [-1, 0]); -// expect(entity.direction).to.equal(3); -// entity.emit('movementRequest', [0, -1]); -// expect(entity.direction).to.equal(0); -// }); -// it('generates and accepts direction packets', async () => { -// entity.direction = 2; -// const packets = entity.trait('Directional').packetsFor(); -// expect(packets).to.have.lengthOf(1); -// expect(packets[0][0]).to.equal('TraitUpdateDirectionalDirection'); -// expect(packets[0][1]).to.equal(2); -// const entity2 = await Entity.load({ -// traits: { -// Directional: {}, -// }, -// }); -// expect(entity2.direction).to.equal(0); -// entity2.trait('Directional').acceptPacket(normalize(flecks, packets[0])); -// expect(entity2.direction).to.equal(2); -// }); -// }); +let flecks; +let Entity; +beforeEach(async () => { + flecks = Flecks.bootstrap({ + config: { + '@avocado/entity:./src': {}, + '@avocado/graphics': {}, + '@avocado/resource': {}, + '@avocado/traits': {}, + '@flecks/core': {}, + '@flecks/react': {}, + '@flecks/socket': {}, + }, + }); + await Promise.all(flecks.invokeFlat('@flecks/core.starting')); + ({Entity} = flecks.get('$avocado/resource.resources')); +}); +describe('Directional', () => { + let entity; + beforeEach(async () => { + entity = await Entity.load({ + traits: { + Directional: { + params: { + directionCount: 4, + }, + }, + }, + }); + }); + it('exists', async () => { + expect(entity.is('Directional')).to.be.true; + }); + it('tracks movement', async () => { + entity.emit('movementRequest', [1, 0]); + expect(entity.direction).to.equal(1); + entity.emit('movementRequest', [0, 1]); + expect(entity.direction).to.equal(2); + entity.emit('movementRequest', [-1, 0]); + expect(entity.direction).to.equal(3); + entity.emit('movementRequest', [0, -1]); + expect(entity.direction).to.equal(0); + }); + it('generates and accepts direction packets', async () => { + entity.direction = 2; + const packets = entity.trait('Directional').packetsFor(); + expect(packets).to.have.lengthOf(1); + expect(packets[0][0]).to.equal('TraitUpdateDirectionalDirection'); + expect(packets[0][1]).to.equal(2); + const entity2 = await Entity.load({ + traits: { + Directional: {}, + }, + }); + expect(entity2.direction).to.equal(0); + entity2.trait('Directional').acceptPacket(normalize(flecks, packets[0])); + expect(entity2.direction).to.equal(2); + }); +}); diff --git a/packages/entity/test/entity.js b/packages/entity/test/entity.js index fa6dc0b..0beb2c5 100644 --- a/packages/entity/test/entity.js +++ b/packages/entity/test/entity.js @@ -1,93 +1,98 @@ -// import {Trait, traits} from '@avocado/traits'; -// import {Flecks} from '@flecks/core'; -// import {expect} from 'chai'; +import {Trait} from '@avocado/traits'; +import {Flecks} from '@flecks/core/server'; +import {expect} from 'chai'; -// let flecks; -// let Entity; -// beforeEach(async () => { -// flecks = Flecks.mock({ -// '@avocado/entity': require('../src'), -// '@avocado/resource': require('@avocado/resource'), -// '@avocado/traits': require('@avocado/traits'), -// }); -// await Promise.all(flecks.invokeFlat('@flecks/core/starting')); -// ({Entity} = flecks.get('$avocado/resource.resources')); -// }); -// it('has sane defaults', () => { -// const entity = new Entity(); -// expect(entity.traits).to.deep.equal({}); -// expect(entity.traitTypes()).to.deep.equal([]); -// }); -// it('can add and remove traits', async () => { -// const entity = new Entity(); -// const TestTrait = class extends Trait { +let flecks; +let Entity; +beforeEach(async () => { + flecks = Flecks.bootstrap({ + config: { + '@avocado/entity:./src': {}, + '@avocado/graphics': {}, + '@avocado/resource': {}, + '@avocado/traits': {}, + '@flecks/core': {}, + '@flecks/react': {}, + }, + }); + await Promise.all(flecks.invokeFlat('@flecks/core.starting')); + ({Entity} = flecks.get('$avocado/resource.resources')); +}); +it('has sane defaults', () => { + const entity = new Entity(); + expect(entity.traits).to.deep.equal({}); + expect(entity.traitTypes()).to.deep.equal([]); +}); +it('can add and remove traits', async () => { + const entity = new Entity(); + const TestTrait = class extends Trait { -// static get type() { -// return 'TestTrait'; -// } + static get type() { + return 'TestTrait'; + } -// }; -// flecks.set('$avocado/traits.traits.TestTrait', TestTrait); -// await entity.addTrait('TestTrait'); -// expect(entity.is('TestTrait')).to.be.true; -// entity.removeTrait('TestTrait'); -// expect(entity.is('TestTrait')).to.be.false; -// }); -// it('can add traits asynchronously', async () => { -// const DELAY = 30; -// class AsyncTrait extends Trait { + }; + flecks.set('$avocado/traits.traits.TestTrait', TestTrait); + await entity.addTrait('TestTrait'); + expect(entity.is('TestTrait')).to.be.true; + entity.removeTrait('TestTrait'); + expect(entity.is('TestTrait')).to.be.false; +}); +it('can add traits asynchronously', async () => { + const DELAY = 30; + class AsyncTrait extends Trait { -// static async extendJson(json) { -// const extended = await super.extendJson(json); -// await new Promise((resolve) => setTimeout(resolve, DELAY)); -// return extended; -// } + static async extendJson(json) { + const extended = await super.extendJson(json); + await new Promise((resolve) => setTimeout(resolve, DELAY)); + return extended; + } -// } -// flecks.set('$avocado/traits.traits.Async', AsyncTrait); -// let start = Date.now(); -// const entity = await Entity.load({ -// traits: { -// Async: {}, -// }, -// }); -// expect(Date.now() - start).to.be.at.least(DELAY * 0.9); -// }); -// it('can invoke hooks', async () => { -// class AnotherTrait extends Trait { + } + flecks.set('$avocado/traits.traits.Async', AsyncTrait); + const start = Date.now(); + await Entity.load({ + traits: { + Async: {}, + }, + }); + expect(Date.now() - start).to.be.at.least(DELAY * 0.9); +}); +it('can invoke hooks', async () => { + class AnotherTrait extends Trait { -// hooks() { -// return { + hooks() { + return { -// testHook: () => 69, + testHook: () => 69, -// }; -// } + }; + } -// static get type() { -// return 'AnotherTrait'; -// } + static get type() { + return 'AnotherTrait'; + } -// } -// class YetAnotherTrait extends Trait { + } + class YetAnotherTrait extends Trait { -// hooks() { -// return { + hooks() { + return { -// testHook: () => 420, + testHook: () => 420, -// }; -// } + }; + } -// static get type() { -// return 'YetAnotherTrait'; -// } + static get type() { + return 'YetAnotherTrait'; + } -// } -// flecks.set('$avocado/traits.traits.AnotherTrait', AnotherTrait); -// flecks.set('$avocado/traits.traits.YetAnotherTrait', YetAnotherTrait); -// const entity = new Entity(); -// await entity.addTrait('AnotherTrait'); -// await entity.addTrait('YetAnotherTrait'); -// expect(entity.invokeHook('testHook')).to.deep.equal({AnotherTrait: 69, YetAnotherTrait: 420}); -// }); + } + flecks.set('$avocado/traits.traits.AnotherTrait', AnotherTrait); + flecks.set('$avocado/traits.traits.YetAnotherTrait', YetAnotherTrait); + const entity = new Entity(); + await entity.addTrait('AnotherTrait'); + await entity.addTrait('YetAnotherTrait'); + expect(entity.invokeHook('testHook')).to.deep.equal({AnotherTrait: 69, YetAnotherTrait: 420}); +}); diff --git a/packages/entity/test/mobile.js b/packages/entity/test/mobile.js index 87a8af7..9f63e18 100644 --- a/packages/entity/test/mobile.js +++ b/packages/entity/test/mobile.js @@ -1,59 +1,64 @@ -// import {Flecks} from '@flecks/core'; -// import {expect} from 'chai'; +import {Flecks} from '@flecks/core/server'; +import {expect} from 'chai'; -// let flecks; -// let Entity; -// let EntityList; -// beforeEach(async () => { -// flecks = Flecks.mock({ -// '@avocado/entity': require('../src'), -// '@avocado/resource': require('@avocado/resource'), -// '@avocado/traits': require('@avocado/traits'), -// }); -// await Promise.all(flecks.invokeFlat('@flecks/core/starting')); -// ({Entity, EntityList} = flecks.get('$avocado/resource.resources')); -// }); -// describe('Mobile', () => { -// let entity; -// beforeEach(async () => { -// entity = await Entity.load({ -// traits: { -// Mobile: {}, -// Positioned: {}, -// }, -// }); -// }); -// it('exists', async () => { -// expect(entity.is('Mobile')).to.be.true; -// }); -// it('can request movement', async () => { -// entity.speed = 100; -// entity.requestMovement([1, 0]); -// entity.tick(1); -// expect(entity.position).to.deep.equal([100, 0]); -// entity.tick(1); -// expect(entity.position).to.deep.equal([100, 0]); -// entity.isMobile = false; -// entity.requestMovement([1, 0]); -// entity.tick(1); -// expect(entity.position).to.deep.equal([100, 0]); -// }); -// it('can force movement', async () => { -// expect(entity.speed).to.equal(0); -// entity.forceMovement([10, 0]); -// expect(entity.position).to.deep.equal([10, 0]); -// }); -// it('can move for a time', async () => { -// entity.speed = 10; -// const tickingPromise = entity.moveFor([1, 0], 1); -// entity.addTickingPromise(tickingPromise); -// expect(entity.position).to.deep.equal([0, 0]); -// entity.tick(0.25); -// expect(entity.position).to.deep.equal([2.5, 0]); -// entity.tick(0.25); -// expect(entity.position).to.deep.equal([5, 0]); -// entity.tick(0.5); -// expect(entity.position).to.deep.equal([10, 0]); -// return tickingPromise; -// }); -// }); +let flecks; +let Entity; +beforeEach(async () => { + flecks = Flecks.bootstrap({ + config: { + '@avocado/entity:./src': {}, + '@avocado/graphics': {}, + '@avocado/resource': {}, + '@avocado/traits': {}, + '@flecks/core': {}, + '@flecks/react': {}, + '@flecks/socket': {}, + }, + }); + await Promise.all(flecks.invokeFlat('@flecks/core.starting')); + ({Entity} = flecks.get('$avocado/resource.resources')); +}); +describe('Mobile', () => { + let entity; + beforeEach(async () => { + entity = await Entity.load({ + traits: { + Mobile: {}, + Positioned: {}, + }, + }); + }); + it('exists', async () => { + expect(entity.is('Mobile')).to.be.true; + }); + it('can request movement', async () => { + entity.speed = 100; + entity.requestMovement([1, 0]); + entity.tick(1); + expect(entity.position).to.deep.equal([100, 0]); + entity.tick(1); + expect(entity.position).to.deep.equal([100, 0]); + entity.isMobile = false; + entity.requestMovement([1, 0]); + entity.tick(1); + expect(entity.position).to.deep.equal([100, 0]); + }); + it('can force movement', async () => { + expect(entity.speed).to.equal(0); + entity.forceMovement([10, 0]); + expect(entity.position).to.deep.equal([10, 0]); + }); + it('can move for a time', async () => { + entity.speed = 10; + const tickingPromise = entity.moveFor([1, 0], 1); + entity.addTickingPromise(tickingPromise); + expect(entity.position).to.deep.equal([0, 0]); + entity.tick(0.25); + expect(entity.position).to.deep.equal([2.5, 0]); + entity.tick(0.25); + expect(entity.position).to.deep.equal([5, 0]); + entity.tick(0.5); + expect(entity.position).to.deep.equal([10, 0]); + return tickingPromise; + }); +}); diff --git a/packages/entity/test/perishable.js b/packages/entity/test/perishable.js index d6c0852..342ea85 100644 --- a/packages/entity/test/perishable.js +++ b/packages/entity/test/perishable.js @@ -1,44 +1,49 @@ -// import {Flecks} from '@flecks/core'; -// import {expect} from 'chai'; +import {Flecks} from '@flecks/core/server'; +import {expect} from 'chai'; -// let flecks; -// let Entity; -// let EntityList; -// beforeEach(async () => { -// flecks = Flecks.mock({ -// '@avocado/entity': require('../src'), -// '@avocado/resource': require('@avocado/resource'), -// '@avocado/traits': require('@avocado/traits'), -// }); -// await Promise.all(flecks.invokeFlat('@flecks/core/starting')); -// ({Entity, EntityList} = flecks.get('$avocado/resource.resources')); -// }); -// describe('Perishable', () => { -// let entity; -// beforeEach(async () => { -// entity = await Entity.load({ -// traits: { -// Perishable: { -// params: { -// ttl: 10, -// }, -// }, -// }, -// }); -// }); -// it('exists', async () => { -// expect(entity.is('Perishable')).to.be.true; -// }); -// it('expires', async () => { -// const promise = Promise.all([ -// new Promise((resolve) => { -// entity.on('destroying', resolve); -// }), -// new Promise((resolve) => { -// entity.on('destroyed', resolve); -// }), -// ]); -// entity.tick(10); -// return promise; -// }); -// }); +let flecks; +let Entity; +beforeEach(async () => { + flecks = Flecks.bootstrap({ + config: { + '@avocado/entity:./src': {}, + '@avocado/graphics': {}, + '@avocado/resource': {}, + '@avocado/traits': {}, + '@flecks/core': {}, + '@flecks/react': {}, + '@flecks/socket': {}, + }, + }); + await Promise.all(flecks.invokeFlat('@flecks/core.starting')); + ({Entity} = flecks.get('$avocado/resource.resources')); +}); +describe('Perishable', () => { + let entity; + beforeEach(async () => { + entity = await Entity.load({ + traits: { + Perishable: { + params: { + ttl: 10, + }, + }, + }, + }); + }); + it('exists', async () => { + expect(entity.is('Perishable')).to.be.true; + }); + it('expires', async () => { + const promise = Promise.all([ + new Promise((resolve) => { + entity.on('destroying', resolve); + }), + new Promise((resolve) => { + entity.on('destroyed', resolve); + }), + ]); + entity.tick(10); + return promise; + }); +}); diff --git a/packages/entity/test/positioned.js b/packages/entity/test/positioned.js index 5fddc71..fca8720 100644 --- a/packages/entity/test/positioned.js +++ b/packages/entity/test/positioned.js @@ -1,48 +1,52 @@ -// import {Flecks} from '@flecks/core'; -// import {normalize} from '@flecks/socket'; -// import {expect} from 'chai'; +import {Flecks} from '@flecks/core/server'; +import {normalize} from '@flecks/socket'; +import {expect} from 'chai'; -// let flecks; -// let Entity; -// let EntityList; -// beforeEach(async () => { -// flecks = Flecks.mock({ -// '@avocado/entity': require('../src'), -// '@avocado/resource': require('@avocado/resource'), -// '@avocado/traits': require('@avocado/traits'), -// '@flecks/socket': require('@flecks/socket'), -// }); -// await Promise.all(flecks.invokeFlat('@flecks/core/starting')); -// ({Entity, EntityList} = flecks.get('$avocado/resource.resources')); -// }); -// describe('Positioned', () => { -// let entity; -// beforeEach(async () => { -// entity = await Entity.load({ -// traits: { -// Positioned: {}, -// }, -// }); -// }); -// it('exists', async () => { -// expect(entity.is('Positioned')).to.be.true; -// }); -// if ('http' !== process.env.FLECKS_CORE_BUILD_TARGET) { -// it('generates and accepts movement packets', async () => { -// entity.setPosition([1, 1]); -// const packets = entity.trait('Positioned').packetsFor(); -// expect(packets).to.have.lengthOf(1); -// expect(packets[0][0]).to.equal('TraitUpdatePositionedPosition'); -// expect(packets[0][1]).to.deep.equal([1, 1]); -// const entity2 = await Entity.load({ -// traits: { -// Positioned: {}, -// }, -// }); -// expect(entity2.position).to.deep.equal([0, 0]); -// const trait = entity2.trait('Positioned'); -// trait.acceptPacket(normalize(flecks, packets[0])); -// expect(trait.serverPosition).to.deep.equal([1, 1]); -// }); -// } -// }); +let flecks; +let Entity; +beforeEach(async () => { + flecks = Flecks.bootstrap({ + config: { + '@avocado/entity:./src': {}, + '@avocado/graphics': {}, + '@avocado/resource': {}, + '@avocado/traits': {}, + '@flecks/core': {}, + '@flecks/react': {}, + '@flecks/socket': {}, + }, + }); + await Promise.all(flecks.invokeFlat('@flecks/core.starting')); + ({Entity} = flecks.get('$avocado/resource.resources')); +}); +describe('Positioned', () => { + let entity; + beforeEach(async () => { + entity = await Entity.load({ + traits: { + Positioned: {}, + }, + }); + }); + it('exists', async () => { + expect(entity.is('Positioned')).to.be.true; + }); + if ('http' !== process.env.FLECKS_CORE_BUILD_TARGET) { + it('generates and accepts movement packets', async () => { + entity.setPosition([1, 1]); + const packets = entity.trait('Positioned').packetsFor(); + expect(packets).to.have.lengthOf(1); + expect(packets[0][0]).to.equal('TraitUpdatePositionedPosition'); + expect(packets[0][1]).to.deep.equal([1, 1]); + const entity2 = await Entity.load({ + traits: { + Positioned: {}, + }, + }); + expect(entity2.position).to.deep.equal([0, 0]); + const trait = entity2.trait('Positioned'); + trait.acceptPacket(normalize(flecks, packets[0])); + expect(trait.serverPosition).to.deep.equal([1, 1]); + }); + } +}); diff --git a/packages/entity/test/spawner.js b/packages/entity/test/spawner.js index ba97336..ac76218 100644 --- a/packages/entity/test/spawner.js +++ b/packages/entity/test/spawner.js @@ -1,89 +1,95 @@ -// import {Flecks} from '@flecks/core'; -// import {expect} from 'chai'; +import {Flecks} from '@flecks/core/server'; +import {expect} from 'chai'; -// let flecks; -// let Entity; -// let EntityList; -// beforeEach(async () => { -// flecks = Flecks.mock({ -// '@avocado/behavior': require('@avocado/behavior'), -// '@avocado/entity': require('../src'), -// '@avocado/resource': require('@avocado/resource'), -// '@avocado/traits': require('@avocado/traits'), -// }); -// await Promise.all(flecks.invokeFlat('@flecks/core/starting')); -// ({Entity, EntityList} = flecks.get('$avocado/resource.resources')); -// }); -// describe('Spawner', () => { -// let entity; -// let list; -// beforeEach(async () => { -// entity = await Entity.load({ -// traits: { -// Spawner: { -// params: { -// spawns: { -// testy: { -// traits: { -// Alive: {}, -// Positioned: {}, -// }, -// }, -// }, -// }, -// }, -// }, -// }); -// list = new EntityList(); -// list.addEntity(entity); -// }); -// it('exists', async () => { -// expect(entity.is('Spawner')).to.be.true; -// }); -// it('can spawn from key', async () => { -// const spawned = await entity.spawn('testy'); -// expect(spawned.is('Alive')).to.be.true; -// const spawned2 = await entity.spawn('testy', { -// traits: { -// Alive: { -// state: { -// life: 50, -// }, -// }, -// }, -// }); -// expect(spawned2.life).to.equal(50); -// const spawned3 = await entity.spawnAt('testy', [69, 420]); -// expect(spawned3.position).to.deep.equal([69, 420]); -// }); -// it('can spawn from arbitrary JSON', async () => { -// const spawned = await entity.spawnRaw({ -// traits: { -// Mobile: {}, -// }, -// }); -// expect(spawned.is('Mobile')).to.be.true; -// const spawned2 = await entity.spawnRawAt( -// { -// traits: { -// Mobile: {}, -// }, -// }, -// [311, 200], -// ); -// expect(spawned2.position).to.deep.equal([311, 200]); -// }); -// it('can kill all children', async () => { -// const COUNT = 15; -// for (let i = 0; i < COUNT; ++i) { -// await entity.spawnRaw({ -// traits: { -// Mobile: {}, -// }, -// }); -// } -// expect(Object.keys(list.entities)).to.have.lengthOf(COUNT + 1); -// await entity.killAllChildren(); -// expect(Object.keys(list.entities)).to.have.lengthOf(1); -// }); -// }); +let flecks; +let Entity; +let EntityList; +beforeEach(async () => { + flecks = Flecks.bootstrap({ + config: { + '@avocado/behavior': {}, + '@avocado/entity:./src': {}, + '@avocado/graphics': {}, + '@avocado/resource': {}, + '@avocado/traits': {}, + '@flecks/core': {}, + '@flecks/react': {}, + '@flecks/socket': {}, + }, + }); + await Promise.all(flecks.invokeFlat('@flecks/core.starting')); + ({Entity, EntityList} = flecks.get('$avocado/resource.resources')); +}); +describe('Spawner', () => { + let entity; + let list; + beforeEach(async () => { + entity = await Entity.load({ + traits: { + Spawner: { + params: { + spawns: { + testy: { + traits: { + Alive: {}, + Positioned: {}, + }, + }, + }, + }, + }, + }, + }); + list = new EntityList(); + list.addEntity(entity); + }); + it('exists', async () => { + expect(entity.is('Spawner')).to.be.true; + }); + it('can spawn from key', async () => { + const spawned = await entity.spawn('testy'); + expect(spawned.is('Alive')).to.be.true; + const spawned2 = await entity.spawn('testy', { + traits: { + Alive: { + state: { + life: 50, + }, + }, + }, + }); + expect(spawned2.life).to.equal(50); + const spawned3 = await entity.spawnAt('testy', [69, 420]); + expect(spawned3.position).to.deep.equal([69, 420]); + }); + it('can spawn from arbitrary JSON', async () => { + const spawned = await entity.spawnRaw({ + traits: { + Mobile: {}, + }, + }); + expect(spawned.is('Mobile')).to.be.true; + const spawned2 = await entity.spawnRawAt( + { + traits: { + Mobile: {}, + }, + }, + [311, 200], + ); + expect(spawned2.position).to.deep.equal([311, 200]); + }); + it('can kill all children', async () => { + const COUNT = 15; + await Promise.all(Array(COUNT).fill(0).map(() => ( + entity.spawnRaw({ + traits: { + Mobile: {}, + }, + }) + ))); + expect(Object.keys(list.entities)).to.have.lengthOf(COUNT + 1); + await entity.killAllChildren(); + expect(Object.keys(list.entities)).to.have.lengthOf(1); + }); +});