aboutsummaryrefslogtreecommitdiff
path: root/src/Tile/Tile.test.ts
diff options
context:
space:
mode:
authoreug-vs <eugene@eug-vs.xyz>2022-03-12 15:10:54 +0300
committereug-vs <eugene@eug-vs.xyz>2022-03-12 15:10:54 +0300
commit2e6a4a8761bf037283f7eb8dbfd57ab7b9e977a9 (patch)
tree22012ec08067f92d8baf9ab3039f3f7cda3e7402 /src/Tile/Tile.test.ts
parent8aa2213390e01996e3f9682abfd5910c698df0e2 (diff)
downloadcarcassonne-engine-ts-2e6a4a8761bf037283f7eb8dbfd57ab7b9e977a9.tar.gz
refactor: rename Cell -> Tile, Item -> Feature
Diffstat (limited to 'src/Tile/Tile.test.ts')
-rw-r--r--src/Tile/Tile.test.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/Tile/Tile.test.ts b/src/Tile/Tile.test.ts
new file mode 100644
index 0000000..62ac51e
--- /dev/null
+++ b/src/Tile/Tile.test.ts
@@ -0,0 +1,56 @@
+import assert from 'assert';
+import Tile, { Direction, Feature } from './Tile';
+
+const { North, East, South, West } = Direction;
+const { Road, Town, Empty, River } = Feature;
+
+describe('Tile', () => {
+ describe('getSide', () => {
+ it('Should get North, East, South and West sides correctly', () => {
+ const cell = new Tile(Empty, [Road, Town, Empty, River]);
+
+ assert.strictEqual(cell.getSide(North), Road);
+ assert.strictEqual(cell.getSide(East), Town);
+ assert.strictEqual(cell.getSide(South), Empty);
+ assert.strictEqual(cell.getSide(West), River);
+ });
+
+ it('Should respect cell orientation', () => {
+ const cell = new Tile(Empty, [Road, Town, Empty, River]);
+ cell.rotate(5);
+
+ assert.strictEqual(cell.getSide(North), River);
+ assert.strictEqual(cell.getSide(East), Road);
+ assert.strictEqual(cell.getSide(South), Town);
+ assert.strictEqual(cell.getSide(West), Empty);
+ });
+
+ it('Should work with negative orientation', () => {
+ const cell = new Tile(Empty, [Road, Town, Empty, River]);
+ cell.rotate(-7);
+
+ assert.strictEqual(cell.getSide(North), River);
+ assert.strictEqual(cell.getSide(East), Road);
+ assert.strictEqual(cell.getSide(South), Town);
+ assert.strictEqual(cell.getSide(West), Empty);
+ });
+ });
+
+ describe('getAttachments', () => {
+ it('Should correclty list legal attachments', () => {
+ const attachTo = new Tile(Town, [Road, Town, Town, Road])
+ const cell = new Tile(Road, [Empty, Road, Road, Empty])
+
+ cell.print();
+ attachTo.print();
+
+ const attachments = attachTo.getAttachments(cell);
+ assert.strictEqual(attachments.length, 4);
+ assert.deepStrictEqual(attachments[0], { side: 0, rotation: 0, cell, attachTo });
+ assert.deepStrictEqual(attachments[1], { side: 0, rotation: 1, cell, attachTo });
+ assert.deepStrictEqual(attachments[2], { side: 3, rotation: 0, cell, attachTo });
+ assert.deepStrictEqual(attachments[3], { side: 3, rotation: 3, cell, attachTo });
+ });
+ });
+});
+