273 lines
8.4 KiB
CoffeeScript
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
|
|
|
|
|
|
"""
|