Skip to content

Commit

Permalink
add more entity unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
minecrawler committed Feb 9, 2024
1 parent c546c17 commit b03a6dd
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/entity/entity.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,14 @@ export interface IReadOnlyEntity {
*/
hasComponent(component: typeof Object | TObjectProto): boolean

/**
* Check if an event listener already exists on the entity
* Mostly intersting for testing the lib
* @param event
* @param handler
*/
hasEventListener<T extends keyof IEventMap>(event: T, handler: IEventMap[T]): void

/**
* Check if this entity has a given tag
* @param tag
Expand Down
92 changes: 92 additions & 0 deletions src/entity/entity.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@ describe('Test Entity', () => {
assert.equal(Array.from(entity.getComponents()).length, 1);
});

it('addTag', () => {
const entity = new Entity();
const tag = 'TEST';

entity.addTag(tag);
assert.equal(entity.getTagCount(), 1);
});

it('clone', () => {
const component = { a: 42 };
const entity = new Entity('1');
Expand All @@ -31,6 +39,69 @@ describe('Test Entity', () => {
assert.equal(entity.getTags().next().value, clonedEntity.getTags().next().value);
});

it('getComponent', () => {
const entity = new Entity();

entity.addComponent(new Number(0));
assert.equal(entity.getComponent(Number).toString(), '0');

entity.addComponent(new Date());
assert.instanceOf(entity.getComponent(Date), Date);
});

it('getTag', () => {
const entity = new Entity();
const tag = 'TEST';

entity.addTag(tag);
assert.equal(entity.getTags().next().value, tag);
});

it('getTags', () => {
const entity = new Entity();
const tag1 = 'TEST1';
const tag2 = 'TEST2';
const tag3 = 'TEST3';

entity.addTag(tag1);
entity.addTag(tag2);
entity.addTag(tag3);

// order should be equal!
const tags = entity.getTags()
assert.equal(tags.next().value, tag1);
assert.equal(tags.next().value, tag2);
assert.equal(tags.next().value, tag3);
});

it('hasComponent', () => {
const entity = new Entity();
const component = new Date();

entity.addComponent(component);
assert.equal(entity.hasComponent(Date), true);
assert.equal(entity.hasComponent(component), true);
});

it('hasEvent', () => {
const entity = new Entity();
const event = () => {};

entity.addEventListener('addTag', event);
assert.equal(entity.hasEventListener('addTag', event), true);
assert.equal(entity.hasEventListener('addTag', () => {}), false);
assert.equal(entity.hasEventListener('clone', event), false);
});

it('hasTag', () => {
const entity = new Entity();
const tag = 'TEST';

entity.addTag(tag);
assert.equal(entity.hasTag(tag), true);
assert.equal(entity.hasTag('DOESNOTEXIST!!!'), false);
});

it('removeComponent', () => {
const component = {};
const entity = new Entity();
Expand All @@ -40,6 +111,27 @@ describe('Test Entity', () => {
assert.equal(Array.from(entity.getComponents()).length, 0);
});

it ('removeEvent', () => {
const entity = new Entity();
const event = () => {};

entity.addEventListener('addComponent', event);
entity.removeEventListener('addComponent', event);

assert.equal(entity.hasEventListener('addComponent', event), false);
});

it('removeTag', () => {
const entity = new Entity();
const tag = 'TEST';

entity.addTag(tag);
entity.removeTag(tag);

assert.equal(entity.hasTag(tag), false);
assert.equal(Array.from(entity.getTags()).length, 0);
});

it('Unique components', () => {
const component = {};
const entity = new Entity();
Expand Down
17 changes: 17 additions & 0 deletions src/entity/entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,23 @@ export class Entity implements IEntity {
return this.components.has(this.getConstructor(component));
}

hasEventListener<T extends keyof IEventMap>(event: T, handler: IEventMap[T]): boolean {
switch (event) {
case "addComponent":
return this.eventHandlers.addComponent.has(handler as TAddComponentEventHandler);
case "addTag":
return this.eventHandlers.addTag.has(handler as TAddTagEventHandler);
case "clone":
return this.eventHandlers.clone.has(handler as TCloneEventHandler);
case "removeComponent":
return this.eventHandlers.removeComponent.has(handler as TRemoveComponentEventHandler);
case "removeTag":
return this.eventHandlers.removeTag.has(handler as TRemoveTagEventHandler);
default:
return false;
}
}

hasTag(tag: TTag): boolean {
return this.tags.has(tag);
}
Expand Down

0 comments on commit b03a6dd

Please sign in to comment.