matthewjwhite / crystal-skull

:skull: Highly-configurable, telnet-compatible, text-based RPG
MIT License
0 stars 0 forks source link

Add unit tests #19

Open matthewjwhite opened 3 years ago

matthewjwhite commented 3 years ago

This project desperately needs some unit tests, especially given the additional complexity added by navigation.

matthewjwhite commented 3 years ago

Here are some mandatory navigation tests that should be integrated into whatever testbed is developed:

Using configuration:

player:
  class:
    - Mage
    - Barbarian
    - Paladin
monster:
  - name: Hellhound
    strength: 2
    health: 10
  - name: Wizard
    strength: 4
    health: 20
map:
  - name: West Dungeon
    monsters:
      - Hellhound
    dim:
      xMin: 0
      yMin: 0
      xMax: 200
      yMax: 200
  - name: Central Dungeon
    monsters:
      - Wizard
    dim:
      xMin: 201
      yMin: 100
      xMax: 400
      yMax: 300
  - name: East Dungeon
    monsters:
      - Wizard
    dim:
      xMin: 401
      yMin: 0
      xMax: 600
      yMax: 300
  - name: North Dungeon
    monsters:
      - Wizard
    dim:
      xMin: 300
      yMin: 301
      xMax: 450
      yMax: 500
  - name: South Dungeon
    monsters:
      - Wizard
    dim:
      xMin: 250
      yMin: 50
      xMax: 380
      yMax: 99
from game.user import User, BadMove
from game.map import Location, Map

xyz = {'name': 'Bob', 'health': 100, 'strength': 100}

### LEFT/RIGHT

# WEST TO CENTRAL
bob = User(cls='Paladin', key='key', location=Location(mp=Map.get('West Dungeon'), x=200, y=198), **xyz)
bob.move('e')
assert bob.location.map.name == 'Central Dungeon'
assert bob.location.x == 0
assert bob.location.y == 98

# CENTRAL TO EAST
bob.location = Location(mp=Map.get('Central Dungeon'), x=199, y=198)
bob.move('e')
assert bob.location.map.name == 'East Dungeon'
assert bob.location.x == 0
assert bob.location.y == 298

# EAST TO CENTRAL
bob.location = Location(mp=Map.get('East Dungeon'), x=0, y=198)
bob.move('w')
assert bob.location.map.name == 'Central Dungeon'
assert bob.location.x == 199
assert bob.location.y == 98

### UP/ DOWN

# MIDDLE OF CENTRAL
bob.location = Location(mp=Map.get('Central Dungeon'), x=50, y=50)
bob.move('n')
assert bob.location.map.name == 'Central Dungeon'
assert bob.location.x == 50
assert bob.location.y == 51

# CENTRAL TO NORTH
bob.location = Location(mp=Map.get('Central Dungeon'), x=105, y=200)
bob.move('n')
assert bob.location.map.name == 'North Dungeon'
assert bob.location.x == 6
assert bob.location.y == 0

# CENTRAL TO SOUTH
bob.location = Location(mp=Map.get('Central Dungeon'), x=150, y=0)
bob.move('s')
assert bob.location.map.name == 'South Dungeon'
assert bob.location.x == 101
assert bob.location.y == 49

# EAST TO NORTH
bob.location = Location(mp=Map.get('East Dungeon'), x=40, y=300)
bob.move('n')
assert bob.location.map.name == 'North Dungeon'
assert bob.location.x == 141
assert bob.location.y == 0

# MULTIMAP CORNER WALK
bob.location = Location(mp=Map.get('Central Dungeon'), x=199, y=200)
bob.move('n')
assert bob.location.map.name == 'North Dungeon'
assert bob.location.x == 100
assert bob.location.y == 0
bob.move('e')
assert bob.location.map.name == 'North Dungeon'
assert bob.location.x == 101
assert bob.location.y == 0
bob.move('s')
assert bob.location.map.name == 'East Dungeon'
assert bob.location.x == 0
assert bob.location.y == 300
bob.move('w')
assert bob.location.map.name == 'Central Dungeon'
assert bob.location.x == 199
assert bob.location.y == 200

### EDGE/BOUNDARY (LITERAL) CASES

# NORTH, NO NEIGHBOR
bob.location = Location(mp=Map.get('North Dungeon'), x=75, y=199)
try:
    bob.move('n')
    raise Exception('Should have failed!')
except Exception as error:
    assert type(error) is BadMove

# SOUTH, NO NEIGHBOR
bob.location = Location(mp=Map.get('South Dungeon'), x=100, y=0)
try:
    bob.move('s')
    raise Exception('Should have failed!')
except Exception as error:
    assert type(error) is BadMove

# WEST, NO NEIGHBOR
bob.location = Location(mp=Map.get('West Dungeon'), x=0, y=50)
try:
    bob.move('w')
    raise Exception('Should have failed!')
except Exception as error:
    assert type(error) is BadMove

# EAST, NO NEIGHBOR
bob.location = Location(mp=Map.get('East Dungeon'), x=199, y=299)
try:
    bob.move('e')
    raise Exception('Should have failed!')
except Exception as error:
    assert type(error) is BadMove
matthewjwhite commented 3 years ago

Some other great ideas for tests: