hive-game-core
Version:
Various stuff implementing the game and rules of Hive, the strategy game
120 lines (105 loc) • 5.04 kB
JavaScript
const { Move } = require('../Move')
describe('constructor', () => {
test('disallows malformed move string', () => {
expect(() => new Move('2>1,0')).toThrowError('INVALID_MOVE_STRING')
expect(() => new Move('C>2,0')).toThrowError('INVALID_MOVE_STRING')
expect(() => new Move('B*2,0')).toThrowError('INVALID_MOVE_STRING')
expect(() => new Move('B(1,0)>2,0')).toThrowError('INVALID_MOVE_STRING')
expect(() => new Move('B[1,0>2,0')).toThrowError('INVALID_MOVE_STRING')
expect(() => new Move('B1,0]>2,0')).toThrowError('INVALID_MOVE_STRING')
expect(() => new Move('B[1]>2,0')).toThrowError('INVALID_MOVE_STRING')
expect(() => new Move('B>[2,0]')).toThrowError('INVALID_MOVE_STRING')
})
test('disallows negative movement origin Z', () => {
expect(() => new Move('B[0,0,-1]>1,0,0')).toThrowError('NEGATIVE_MOVEMENT_ORIGIN_Z')
expect(() => new Move('B[0,0,-2]>1,0,0')).toThrowError('NEGATIVE_MOVEMENT_ORIGIN_Z')
})
test('disallows negative movement target Z', () => {
expect(() => new Move('B[0,0]>1,0,-1')).toThrowError('NEGATIVE_MOVEMENT_TARGET_Z')
expect(() => new Move('B[4,3,1]>4,4,-2')).toThrowError('NEGATIVE_MOVEMENT_TARGET_Z')
})
})
describe('isPlacement', () => {
test('correctly identifies a placement move', () => {
expect(new Move('Q+0,0').isPlacement).toBe(true)
expect(new Move('B+-1,2').isPlacement).toBe(true)
expect(new Move('B+1,-2').isPlacement).toBe(true)
expect(new Move('S+-100,-2').isPlacement).toBe(true)
})
test('correctly identifies a movement move', () => {
expect(new Move('Q>0,0').isPlacement).toBe(false)
expect(new Move('S[10,-1]>13,-1').isPlacement).toBe(false)
expect(new Move('B[0,0]>-1,0,1').isPlacement).toBe(false)
expect(new Move('B[0,0,2]>-1,-1,1').isPlacement).toBe(false)
})
})
describe('isMovement', () => {
test('correctly identifies a placement move', () => {
expect(new Move('Q+0,0').isMovement).toBe(false)
expect(new Move('B+-1,2').isMovement).toBe(false)
expect(new Move('B+1,-2').isMovement).toBe(false)
expect(new Move('S+-100,-2').isMovement).toBe(false)
})
test('correctly identifies a movement move', () => {
expect(new Move('Q>0,0').isMovement).toBe(true)
expect(new Move('S[10,-1]>13,-1').isMovement).toBe(true)
expect(new Move('B[0,0]>-1,0,1').isMovement).toBe(true)
expect(new Move('B[0,0,2]>-1,-1,1').isMovement).toBe(true)
})
})
describe('piece', () => {
test('correctly identifies a placement move', () => {
expect(new Move('Q+0,0').piece).toBe('Q')
expect(new Move('B+-1,2').piece).toBe('B')
expect(new Move('B+1,-2').piece).toBe('B')
expect(new Move('S+-100,-2').piece).toBe('S')
})
test('correctly identifies a movement move', () => {
expect(new Move('Q>0,0').piece).toBe('Q')
expect(new Move('S[10,-1]>13,-1').piece).toBe('S')
expect(new Move('B[0,0]>-1,0,1').piece).toBe('B')
expect(new Move('B[0,0,2]>-1,-1,1').piece).toBe('B')
})
})
describe('placementCoords', () => {
test('correctly identifies a placement move', () => {
expect(new Move('Q+0,0').placementCoords).toEqual([0, 0])
expect(new Move('B+-1,2').placementCoords).toEqual([-1, 2])
expect(new Move('B+1,-2').placementCoords).toEqual([1, -2])
expect(new Move('S+-100,-2').placementCoords).toEqual([-100, -2])
})
})
describe('movementOriginCoords', () => {
test('correctly identifies a movement move', () => {
expect(new Move('Q>0,0').movementOriginCoords).toBe(null)
expect(new Move('S[10,-1]>13,-1').movementOriginCoords).toEqual([10, -1, 0])
expect(new Move('B[0,0]>-1,0,1').movementOriginCoords).toEqual([0, 0, 0])
expect(new Move('B[0,0,2]>-1,-1,1').movementOriginCoords).toEqual([0, 0, 2])
})
})
describe('hasImplicitOrigin', () => {
test('correctly identifies a move', () => {
expect(new Move('Q>0,0').hasImplicitOrigin).toBe(true)
expect(new Move('B>-10,-25,1').hasImplicitOrigin).toBe(true)
expect(new Move('S[10,-1]>13,-1').hasImplicitOrigin).toEqual(false)
expect(new Move('B[0,0]>-1,0,1').hasImplicitOrigin).toEqual(false)
expect(new Move('B[0,0,2]>-1,-1,1').hasImplicitOrigin).toEqual(false)
})
})
describe('hasExplicitOrigin', () => {
test('correctly identifies a move', () => {
expect(new Move('Q>0,0').hasExplicitOrigin).toBe(false)
expect(new Move('B>-10,-25,1').hasExplicitOrigin).toBe(false)
expect(new Move('S[10,-1]>13,-1').hasExplicitOrigin).toEqual(true)
expect(new Move('B[0,0]>-1,0,1').hasExplicitOrigin).toEqual(true)
expect(new Move('B[0,0,2]>-1,-1,1').hasExplicitOrigin).toEqual(true)
})
})
describe('movementTargetCoords', () => {
test('correctly identifies a movement move', () => {
expect(new Move('Q>0,0').movementTargetCoords).toEqual([0, 0, 0])
expect(new Move('S[10,-1]>13,-1').movementTargetCoords).toEqual([13, -1, 0])
expect(new Move('B[0,0]>-1,0,1').movementTargetCoords).toEqual([-1, 0, 1])
expect(new Move('B[0,0,2]>-1,-1,1').movementTargetCoords).toEqual([-1, -1, 1])
})
})