Skip to content

Commit

Permalink
Изменил и дополнил тесты парсера, так как объекты не Actor нельзя исп…
Browse files Browse the repository at this point in the history
…ользовать в большей части тестов.
  • Loading branch information
dfitiskin committed May 30, 2017
1 parent bd81592 commit ff9764b
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 14 deletions.
6 changes: 6 additions & 0 deletions test/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@
function loadLevels() {
return Promise.reject();
}

function extend(base, props = {}) {
const result = class extends base {};
Object.defineProperties(result.prototype, props);
return result;
}
</script>
<script src="../game.js"></script>

Expand Down
68 changes: 54 additions & 14 deletions test/parser.spec.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
'use strict';

describe('Класс LevelParser', () => {
class MyActor {}
const Mushroom = extend(Actor, { type: { value: 'mushroom' }});
const Gift = extend(Actor, { type: { value: 'gift' }});
class BadActor {}

describe('Конструктор new LevelParser()', () => {
});
Expand All @@ -18,19 +20,19 @@ describe('Класс LevelParser', () => {
});

it('Вернет undefined, если передать символ которому не назначен конструктор движимого объекта', () => {
const parser = new LevelParser({ y: MyActor });
const parser = new LevelParser({ y: Mushroom });

const actor = parser.actorFromSymbol('z');

expect(actor).to.be.undefined;
});

it('Вернет подходящий конструктор движимого объекта, если передать символ которому он назначен', () => {
const parser = new LevelParser({ y: MyActor });
const parser = new LevelParser({ y: Mushroom });

const actor = parser.actorFromSymbol('y');

expect(actor).to.equal(MyActor);
expect(actor).to.equal(Mushroom);
});
});

Expand Down Expand Up @@ -123,7 +125,14 @@ describe('Класс LevelParser', () => {
' z ',
'o o'
];
class MyActor {}

it('Вернет пустой массив, если передать пустой план', () => {
const parser = new LevelParser({ o: Gift, z: Mushroom });

const actors = parser.createActors([]);

expect(actors).to.eql([]);
});

it('Вернет пустой массив, если не определить символы движущихся объектов', () => {
const parser = new LevelParser();
Expand All @@ -133,28 +142,60 @@ describe('Класс LevelParser', () => {
expect(actors).to.eql([]);
});

it('Вернет пустой массив, если передать пустой план', () => {
const parser = new LevelParser({ o: Actor, z: MyActor });
it('Игнорирует символы, для которых в словаре не задан символ', () => {
const parser = new LevelParser({ z: 'mushroom' });

const actors = parser.createActors([]);
const actors = parser.createActors(['m']);

expect(actors).to.eql([]);
});

it('Игнорирует символы, для которых в словаре передана не функция', () => {
const parser = new LevelParser({ z: 'mushroom' });

const actors = parser.createActors(['z']);

expect(actors).to.eql([]);
});

it('Игнорирует символы, для которых в словаре передан конструктор не Actor', () => {
const parser = new LevelParser({ b: BadActor });

const actors = parser.createActors(['b']);

expect(actors).to.eql([]);
});

it('Создает движущиеся объекты для конструкторов типа Actor', () => {
const parser = new LevelParser({ z: Mushroom });

const actors = parser.createActors(['z']);

expect(actors).to.have.length(1);
});

it('Создает движущиеся объекты правильного типа для конструкторов типа Actor ', () => {
const parser = new LevelParser({ z: Mushroom });

const actors = parser.createActors(['z']);

expect(actors[0]).to.be.an.instanceof(Mushroom);
});

it('Вернет массив со всеми движущимися объектами, если передать план', () => {
const parser = new LevelParser({ o: Actor, z: MyActor });
const parser = new LevelParser({ o: Gift, z: Mushroom });

const actors = parser.createActors(plan);

expect(actors).to.have.length(5);
});

it('Каждый движущийся объект будет экземпляром своего класса', () => {
const parser = new LevelParser({ o: Actor, z: MyActor });
const parser = new LevelParser({ o: Gift, z: Mushroom });

const actors = parser.createActors(plan);
const oActors = actors.filter(actor => actor instanceof Actor);
const zActors = actors.filter(actor => actor instanceof MyActor);
const oActors = actors.filter(actor => actor instanceof Gift);
const zActors = actors.filter(actor => actor instanceof Mushroom);

expect(oActors).to.have.length(4);
expect(zActors).to.have.length(1);
Expand All @@ -179,7 +220,6 @@ describe('Класс LevelParser', () => {
'!xzx!',
' oxo '
];
class MyActor {}

it('Вернет объект уровня, Level', () => {
const parser = new LevelParser();
Expand All @@ -206,7 +246,7 @@ describe('Класс LevelParser', () => {
});

it('Создаст уровень с движущимися объектами из плана', () => {
const parser = new LevelParser({ x: Actor, z: MyActor });
const parser = new LevelParser({ o: Gift, z: Mushroom });

const level = parser.parse(plan);

Expand Down

0 comments on commit ff9764b

Please sign in to comment.