BattleSim/test/team_parsing_spec.coffee

273 lines
8.4 KiB
CoffeeScript

require './helpers'
should = require 'should'
{PokeBattle} = require '../client/app/js/helpers/team_parsing'
describe "Client", ->
describe "parsing teams", ->
beforeEach ->
@teamString = """
Swampert @ Leftovers
Trait: Torrent
EVs: 252 HP / 252 Def / 4 SDef
Relaxed Nature
- Surf
- Ice Beam
- Earthquake
- Protect
Poop (Blissey) (F) @ Leftovers
Trait: Natural Cure
Shiny: Yes
EVs: 176 HP / 252 Def / 80 SDef
Bold Nature
- Seismic Toss
- Aromatherapy
Skarmory (M)
Tyranitar @ Never-Melt Ice
Ability: Lightning Rod
Level: 1
Happiness: 3
EVs: 252 HP / 80 Def / 176 SDef
- Hidden Power [Grass]
- Extreme Speed
Articuno
IVs: 30 HP / 29 Def
- Hidden Power Fire
Claydol
EVs: 252 SpA / 176 SpD
"""
it "converts a team to an array readable by this simulator", ->
team = PokeBattle.parseTeam(@teamString)
pokemon = team[0]
pokemon.species.should.equal("Swampert")
pokemon.should.not.have.property('gender')
pokemon.item.should.equal("Leftovers")
pokemon.ability.should.equal("Torrent")
pokemon.nature.should.equal("Relaxed")
pokemon.should.not.have.property('level')
pokemon.should.not.have.property('happiness')
pokemon.should.not.have.property('shiny')
pokemon.should.not.have.property('ivs')
pokemon.evs.should.eql(hp: 252, defense: 252, specialDefense: 4)
pokemon.moves.should.eql([ "Surf", "Ice Beam", "Earthquake", "Protect"])
pokemon = team[1]
pokemon.name.should.equal("Poop")
pokemon.species.should.equal("Blissey")
pokemon.gender.should.equal("F")
pokemon.item.should.equal("Leftovers")
pokemon.ability.should.equal("Natural Cure")
pokemon.nature.should.equal("Bold")
pokemon.should.not.have.property('level')
pokemon.should.not.have.property('happiness')
pokemon.shiny.should.be.true
pokemon.should.not.have.property('ivs')
pokemon.evs.should.eql(hp: 176, defense: 252, specialDefense: 80)
pokemon.moves.should.eql(["Seismic Toss", "Aromatherapy"])
pokemon = team[2]
pokemon.species.should.equal("Skarmory")
pokemon.gender.should.equal("M")
pokemon.should.not.have.property('item')
pokemon.should.not.have.property('ability')
pokemon.should.not.have.property('nature')
pokemon.should.not.have.property('level')
pokemon.should.not.have.property('happiness')
pokemon.should.not.have.property('shiny')
pokemon.should.not.have.property('ivs')
pokemon.should.not.have.property('evs')
pokemon.should.not.have.property('moves')
pokemon = team[3]
pokemon.species.should.equal("Tyranitar")
pokemon.should.not.have.property('gender')
pokemon.should.not.have.property('nature')
pokemon.level.should.equal(1)
pokemon.happiness.should.equal(3)
pokemon.should.not.have.property('shiny')
pokemon.ivs.should.eql(attack: 30, specialAttack: 30)
pokemon.evs.should.eql(hp: 252, defense: 80, specialDefense: 176)
pokemon.moves.should.eql(["Hidden Power", "ExtremeSpeed"])
pokemon.item.should.eql("NeverMeltIce")
pokemon.ability.should.eql("Lightningrod")
pokemon = team[4]
pokemon.species.should.equal("Articuno")
pokemon.should.not.have.property('gender')
pokemon.should.not.have.property('item')
pokemon.should.not.have.property('ability')
pokemon.should.not.have.property('nature')
pokemon.should.not.have.property('level')
pokemon.should.not.have.property('happiness')
pokemon.should.not.have.property('shiny')
# IVs that were explicitly set override Hidden Power!
pokemon.ivs.should.eql(hp: 30, defense: 29)
pokemon.should.not.have.property('evs')
pokemon.moves.should.eql(['Hidden Power'])
pokemon = team[5]
pokemon.species.should.equal("Claydol")
pokemon.evs.should.eql(specialAttack: 252, specialDefense: 176)
describe "parsing formes", ->
it "takes into account differing styles of formes", ->
formes =
"Thundurus-Therian": ["Thundurus", "therian"]
"Thundurus-T": ["Thundurus", "therian"]
"Thundurus": ["Thundurus", null]
"Landorus-Therian": ["Landorus", "therian"]
"Landorus-T": ["Landorus", "therian"]
"Landorus": ["Landorus", null]
"Tornadus-Therian": ["Tornadus", "therian"]
"Tornadus-T": ["Tornadus", "therian"]
"Tornadus": ["Tornadus", null]
"Shaymin-Sky": ["Shaymin", "sky"]
"Shaymin-S": ["Shaymin", "sky"]
"Shaymin": ["Shaymin", null]
"Giratina-Origin": ["Giratina", "origin"]
"Giratina-O": ["Giratina", "origin"]
"Giratina": ["Giratina", null]
"Arceus-Dark": ["Arceus", null]
"Arceus": ["Arceus", null]
"Kyurem-Black": ["Kyurem", "black"]
"Kyurem-B": ["Kyurem", "black"]
"Kyurem-White": ["Kyurem", "white"]
"Kyurem-W": ["Kyurem", "white"]
"Kyurem": ["Kyurem", null]
"Rotom-Wash": ["Rotom", "wash"]
"Rotom-W": ["Rotom", "wash"]
"Rotom-Fan": ["Rotom", "fan"]
"Rotom-S": ["Rotom", "fan"]
"Rotom-Heat": ["Rotom", "heat"]
"Rotom-H": ["Rotom", "heat"]
"Rotom-Frost": ["Rotom", "frost"]
"Rotom-F": ["Rotom", "frost"]
"Rotom-Mow": ["Rotom", "mow"]
"Rotom-C": ["Rotom", "mow"]
"Rotom": ["Rotom", null]
"Deoxys-Attack": ["Deoxys", "attack"]
"Deoxys-A": ["Deoxys", "attack"]
"Deoxys-Defense": ["Deoxys", "defense"]
"Deoxys-D": ["Deoxys", "defense"]
"Deoxys-Speed": ["Deoxys", "speed"]
"Deoxys-S": ["Deoxys", "speed"]
"Deoxys": ["Deoxys", null]
"Basculin-Blue-Striped": ["Basculin", "blue-striped"]
"Basculin-A": ["Basculin", "blue-striped"]
"Basculin": ["Basculin", null]
"Keldeo-Resolute": ["Keldeo", "resolute"]
"Keldeo-R": ["Keldeo", "resolute"]
"Keldeo": ["Keldeo", null]
# TODO: "Shellos-East": ["Shellos", "east"]
"Shellos-East": ["Shellos", "default"]
"Shellos": ["Shellos", null]
# TODO: "Gastrodon-East": ["Gastrodon", "east"]
"Gastrodon-East": ["Gastrodon", "default"]
"Gastrodon": ["Gastrodon", null]
"Wormadam-G": ["Wormadam", "sandy"]
"Wormadam-Sandy": ["Wormadam", "sandy"]
"Wormadam-S": ["Wormadam", "trash"]
"Wormadam-Trash": ["Wormadam", "trash"]
"Wormadam": ["Wormadam", null]
# TODO: fix these
"Deerling-Summer": ["Deerling", null]
"Deerling-Autumn": ["Deerling", null]
"Deerling-Spring": ["Deerling", null]
"Deerling": ["Deerling", null]
"Sawsbuck-Summer": ["Sawsbuck", null]
"Sawsbuck-Autumn": ["Sawsbuck", null]
"Sawsbuck-Spring": ["Sawsbuck", null]
"Sawsbuck": ["Sawsbuck", null]
"Unown-A": ["Unown", null]
"Unown": ["Unown", null]
teamArray = (pokemonName for pokemonName of formes)
teamFormes = (forme for forme in teamArray)
teamArray.unshift('')
teamArray.push('')
teamString = teamArray.join('\n\n')
team = PokeBattle.parseTeam(teamString)
for member, i in team
[species, forme] = formes[teamFormes[i]]
should.exist(member)
member.should.have.property('species')
member.species.should.equal(species)
if forme
member.should.have.property('forme')
member.forme.should.equal(forme)
describe "exporting teams", ->
it "exports properly", ->
team = [
{
species: "Pikachu"
moves: ["Substitute", "Thunderbolt", "Hidden Power", "Grass Knot"]
item: "Light Ball"
ability: "Lightningrod"
gender: "F"
level: 99
shiny: true
happiness: 20
ivs: { attack: 30, defense: 30 }
evs: { hp: 4, specialAttack: 252, speed: 252 }
}
{
name: "Kyboo"
species: "Kyurem"
forme: "black"
item: "Choice Band"
nature: "Adamant"
moves: ["Ice Beam", "Fusion Bolt", "Outrage", "Dragon Claw"]
ability: "Turboblaze"
}
]
PokeBattle.exportTeam(team).should.equal """
Pikachu (F) @ Light Ball
Ability: Lightningrod
EVs: 4 HP / 252 SAtk / 252 Spe
IVs: 30 Atk / 30 Def
Level: 99
Shiny: Yes
Happiness: 20
- Substitute
- Thunderbolt
- Hidden Power
- Grass Knot
Kyboo (Kyurem-B) @ Choice Band
Ability: Turboblaze
Adamant nature
- Ice Beam
- Fusion Bolt
- Outrage
- Dragon Claw
"""