UNPKG

3.97 kBJavaScriptView Raw
1import chai from 'chai';
2import Floor from '../src/Floor';
3import Unit from '../src/units/Unit';
4
5const should = chai.should();
6
7describe('Position', function () {
8 beforeEach(function () {
9 this.unit = new Unit();
10 this.floor = new Floor(6, 5);
11 this.floor.addUnit(this.unit, 1, 2, 'north');
12 this.position = this.unit.position;
13 });
14
15 it('should rotate clockwise', function () {
16 this.position.direction.should.equal('north');
17 ['east', 'south', 'west', 'north', 'east'].forEach((direction) => {
18 this.position.rotate(1);
19 this.position.direction.should.equal(direction);
20 });
21 });
22
23 it('should rotate counterclockwise', function () {
24 this.position.direction.should.equal('north');
25 ['west', 'south', 'east', 'north', 'west'].forEach((direction) => {
26 this.position.rotate(-1);
27 this.position.direction.should.equal(direction);
28 });
29 });
30
31 it('should get relative space in front', function () {
32 this.floor.addUnit(new Unit(), 1, 1);
33 this.position.getRelativeSpace(1).isEmpty().should.be.false;
34 });
35
36 it('should get relative object in front when rotated', function () {
37 this.floor.addUnit(new Unit(), 2, 2);
38 this.position.rotate(1);
39 this.position.getRelativeSpace(1).isEmpty().should.be.false;
40 });
41
42 it('should get relative object diagonally', function () {
43 this.floor.addUnit(new Unit(), 0, 1);
44 this.position.getRelativeSpace(1, -1).isEmpty().should.be.false;
45 });
46
47 it('should get relative object diagonally when rotating', function () {
48 this.floor.addUnit(new Unit(), 0, 1);
49 this.position.rotate(2);
50 this.position.getRelativeSpace(-1, 1).isEmpty().should.be.false;
51 });
52
53 it('should move object on floor relatively', function () {
54 this.floor.getUnitAt(1, 2).should.equal(this.unit);
55 this.position.move(-1, 2);
56 should.equal(this.floor.getUnitAt(1, 2), undefined);
57 this.floor.getUnitAt(3, 3).should.equal(this.unit);
58 this.position.rotate(1);
59 this.position.move(-1);
60 should.equal(this.floor.getUnitAt(3, 3), undefined);
61 this.floor.getUnitAt(2, 3).should.equal(this.unit);
62 });
63
64 it('should return distance from stairs as 0 when on stairs', function () {
65 this.floor.placeStairs(1, 2);
66 this.position.getDistanceFromStairs().should.equal(0);
67 });
68
69 it('should return distance from stairs in both directions', function () {
70 this.floor.placeStairs(0, 3);
71 this.position.getDistanceFromStairs().should.equal(2);
72 });
73
74 it('should return relative direction of stairs', function () {
75 this.floor.placeStairs(0, 0);
76 this.position.getRelativeDirectionOfStairs().should.equal('forward');
77 });
78
79 it('should return relative direction of given space', function () {
80 this.position.getRelativeDirectionOf(this.floor.getSpaceAt(5, 3)).should.equal('right');
81 this.position.rotate(1);
82 this.position.getRelativeDirectionOf(this.floor.getSpaceAt(1, 4)).should.equal('right');
83 });
84
85 it('should be able to determine relative direction', function () {
86 this.position.getRelativeDirection('north').should.equal('forward');
87 this.position.getRelativeDirection('south').should.equal('backward');
88 this.position.getRelativeDirection('west').should.equal('left');
89 this.position.getRelativeDirection('east').should.equal('right');
90 this.position.rotate(1);
91 this.position.getRelativeDirection('north').should.equal('left');
92 this.position.rotate(1);
93 this.position.getRelativeDirection('north').should.equal('backward');
94 this.position.rotate(1);
95 this.position.getRelativeDirection('north').should.equal('right');
96 });
97
98 it('should return a space at the same location as position', function () {
99 this.position.space.location.should.eql([1, 2]);
100 });
101
102 it('should return distance of given space', function () {
103 this.position.getDistanceOf(this.floor.getSpaceAt(5, 3)).should.equal(5);
104 this.position.getDistanceOf(this.floor.getSpaceAt(4, 2)).should.equal(3);
105 });
106});