BattleSim/test/xy/battle.coffee

118 lines
5.2 KiB
CoffeeScript

{Attachment} = require('../../server/xy/attachment')
{Battle} = require('../../server/xy/battle')
{BattleController} = require('../../server/xy/battle_controller')
{Pokemon} = require('../../server/xy/pokemon')
{Weather} = require('../../shared/weather')
{Ability} = require('../../server/xy/data/abilities')
{Factory} = require('../factory')
{Player} = require('../../server/player')
{Protocol} = require '../../shared/protocol'
should = require 'should'
sinon = require 'sinon'
shared = require '../shared'
require '../helpers'
describe "XY Battle:", ->
describe "mega evolution", ->
it "gets recorded when recording a move", ->
shared.create.call this,
gen: 'xy'
team1: [ Factory("Charizard", moves: ["Fire Blast"], item: "Charizardite X") ]
@battle.pokemonActions.filter((o) -> o.type == 'mega').should.have.length(0)
@battle.recordMove(@id1, @battle.getMove("Fire Blast"), 0, megaEvolve: true)
megas = @battle.pokemonActions.filter((o) -> o.type == 'mega')
megas.should.have.length(1)
megas[0].pokemon.should.equal(@p1)
it "doesn't get recorded if the pokemon can't mega evolve", ->
shared.create.call this,
gen: 'xy'
team1: [ Factory("Magikarp", item: "Charizardite X") ]
@battle.pokemonActions.filter((o) -> o.type == 'mega').should.have.length(0)
@battle.recordMove(@id1, @battle.getMove("Splash"), 0, megaEvolve: true)
@battle.pokemonActions.filter((o) -> o.type == 'mega').should.have.length(0)
it "cannot happen if your partner is already going to mega-evolve", ->
shared.create.call this,
gen: 'xy'
numActive: 2
team1: (Factory("Charizard", moves: ["Fire Blast"], item: "Charizardite X") for x in [0..1])
@battle.pokemonActions.filter((o) -> o.type == 'mega').should.have.length(0)
@battle.recordMove(@id1, @battle.getMove("Fire Blast"), 0, megaEvolve: true)
@battle.pokemonActions.filter((o) -> o.type == 'mega').should.have.length(1)
@battle.recordMove(@id1, @battle.getMove("Fire Blast"), 1, megaEvolve: true)
@battle.pokemonActions.filter((o) -> o.type == 'mega').should.have.length(1)
it "happens after switches", ->
shared.create.call this,
gen: 'xy'
team1: [ Factory("Charizard", moves: ["Fire Blast"], item: "Charizardite X") ]
team2: (Factory("Magikarp") for x in [0..1])
@battle.recordMove(@id1, @battle.getMove("Fire Blast"), 0, megaEvolve: true)
@battle.recordSwitch(@id2, 1)
megaSpy = @sandbox.spy(@battle, 'performMegaEvolution')
switchSpy = @sandbox.spy(@battle, 'performSwitch')
@battle.continueTurn()
switchSpy.calledBefore(megaSpy).should.be.true
it "changes the pokemon's forme", ->
shared.create.call this,
gen: 'xy'
team1: [ Factory("Charizard", moves: ["Fire Blast"], item: "Charizardite X") ]
team2: (Factory("Magikarp") for x in [0..1])
@battle.recordMove(@id1, @battle.getMove("Fire Blast"), 0, megaEvolve: true)
@battle.continueTurn()
@p1.forme.should.equal('mega-x')
it "changes the pokemon's ability", ->
shared.create.call this,
gen: 'xy'
team1: [ Factory("Kangaskhan", moves: ["Return"], item: "Kangaskhanite") ]
@battle.recordMove(@id1, @battle.getMove("Fire Blast"), 0, megaEvolve: true)
@battle.continueTurn()
should.exist(@p1.ability)
@p1.ability.should.equal(Ability.ParentalBond)
it "does not activate a switchout ability while changing ability", ->
shared.create.call this,
gen: 'xy'
team1: [ Factory("Gardevoir", ability: "Regenerator", item: "Gardevoirite") ]
@p1.currentHP = 1
@battle.recordMove(@id1, @battle.getMove("Fire Blast"), 0, megaEvolve: true)
@battle.continueTurn()
should.exist(@p1.ability)
@p1.ability.should.equal(Ability.Pixilate)
@p1.currentHP.should.equal 1
it "retains the changed ability upon switching back in", ->
shared.create.call this,
gen: 'xy'
team1: [ Factory("Kangaskhan", moves: ["Return"], item: "Kangaskhanite"), Factory("Magikarp") ]
@battle.recordMove(@id1, @battle.getMove("Fire Blast"), 0, megaEvolve: true)
@battle.continueTurn()
should.exist(@p1.ability)
@p1.ability.should.equal(Ability.ParentalBond)
@battle.performSwitch(@team1.first(), 1)
@battle.performSwitch(@team1.first(), 1)
should.exist(@p1.ability)
@p1.ability.should.equal(Ability.ParentalBond)
describe "#getAction", ->
it "does not consider mega evolutions", ->
shared.create.call this,
gen: 'xy'
team1: [ Factory("Charizard", moves: ["Fire Blast"], item: "Charizardite X") ]
@battle.recordMove(@id1, @battle.getMove("Fire Blast"), 0, megaEvolve: true)
@battle.getAction(@p1).type.should.equal("move")
describe "#undoCompletedRequest", ->
it "cancels mega evolutions properly", ->
shared.create.call this,
gen: 'xy'
team1: [ Factory("Charizard", moves: ["Fire Blast"], item: "Charizardite X") ]
@battle.recordMove(@id1, @battle.getMove("Fire Blast"), 0, megaEvolve: true)
@battle.pokemonActions.should.not.be.empty
(=> @battle.undoCompletedRequest(@id1)).should.not.throw()
@battle.pokemonActions.should.be.empty