diff --git a/test/index.html b/test/index.html index 474340d..ce8fbd2 100644 --- a/test/index.html +++ b/test/index.html @@ -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; + } diff --git a/test/parser.spec.js b/test/parser.spec.js index 496e648..d15d621 100644 --- a/test/parser.spec.js +++ b/test/parser.spec.js @@ -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()', () => { }); @@ -18,7 +20,7 @@ describe('Класс LevelParser', () => { }); it('Вернет undefined, если передать символ которому не назначен конструктор движимого объекта', () => { - const parser = new LevelParser({ y: MyActor }); + const parser = new LevelParser({ y: Mushroom }); const actor = parser.actorFromSymbol('z'); @@ -26,11 +28,11 @@ describe('Класс LevelParser', () => { }); 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); }); }); @@ -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(); @@ -133,16 +142,48 @@ 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); @@ -150,11 +191,11 @@ describe('Класс LevelParser', () => { }); 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); @@ -179,7 +220,6 @@ describe('Класс LevelParser', () => { '!xzx!', ' oxo ' ]; - class MyActor {} it('Вернет объект уровня, Level', () => { const parser = new LevelParser(); @@ -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);