BattleSim/test/server/conditions/sleep_clause_spec.coffee

96 lines
3.2 KiB
CoffeeScript

require '../../helpers'
shared = require '../../shared'
{Conditions} = require '../../../shared/conditions'
{Attachment, Status} = require '../../../server/bw/attachment'
{Protocol} = require '../../../shared/protocol'
{Factory} = require '../../factory'
describe "Sleep Clause", ->
it "prevents Sleep if the opponent was already slept by this team", ->
conditions = [ Conditions.SLEEP_CLAUSE ]
team1 = [ Factory("Magikarp"), Factory("Magikarp") ]
team2 = [ Factory("Magikarp"), Factory("Magikarp") ]
shared.create.call(this, {conditions, team1, team2})
spore = @battle.getMove("Spore")
@battle.performMove(@p1, spore)
@battle.performSwitch(@p2, 1)
mock = @sandbox.mock(spore).expects('fail').once()
@battle.performMove(@p1, spore)
mock.verify()
@team2.at(0).has(Status.Sleep).should.be.false
@team2.at(1).has(Status.Sleep).should.be.true
it "prevents Sleep from Yawn", ->
conditions = [ Conditions.SLEEP_CLAUSE ]
team1 = [ Factory("Magikarp"), Factory("Magikarp") ]
team2 = [ Factory("Magikarp"), Factory("Magikarp") ]
shared.create.call(this, {conditions, team1, team2})
yawn = @battle.getMove("Yawn")
@battle.performMove(@p1, yawn)
@battle.endTurn()
@battle.endTurn()
@battle.performSwitch(@p2, 1)
@battle.performMove(@p1, yawn)
@battle.endTurn()
@battle.endTurn()
@team2.at(0).has(Status.Sleep).should.be.false
@team2.at(1).has(Status.Sleep).should.be.true
it "doesn't prevent other statuses", ->
conditions = [ Conditions.SLEEP_CLAUSE ]
team1 = [ Factory("Magikarp"), Factory("Magikarp") ]
team2 = [ Factory("Magikarp"), Factory("Magikarp") ]
shared.create.call(this, {conditions, team1, team2})
thunderWave = @battle.getMove("Thunder Wave")
@battle.performMove(@p1, thunderWave)
@battle.performSwitch(@p2, 1)
mock = @sandbox.mock(thunderWave).expects('fail').never()
@battle.performMove(@p1, thunderWave)
mock.verify()
@team2.at(0).has(Status.Paralyze).should.be.true
@team2.at(1).has(Status.Paralyze).should.be.true
it "doesn't prevent Sleep if the opponent was slept, but not by this team", ->
conditions = [ Conditions.SLEEP_CLAUSE ]
team1 = [ Factory("Magikarp"), Factory("Magikarp") ]
team2 = [ Factory("Magikarp"), Factory("Magikarp") ]
shared.create.call(this, {conditions, team1, team2})
@team2.at(1).attach(Status.Sleep)
spore = @battle.getMove("Spore")
mock = @sandbox.mock(spore).expects('fail').never()
@battle.performMove(@p1, spore)
mock.verify()
@team2.at(0).has(Status.Sleep).should.be.true
@team2.at(1).has(Status.Sleep).should.be.true
it "doesn't prevent Sleep if the opponent was slept, but fainted", ->
conditions = [ Conditions.SLEEP_CLAUSE ]
team1 = [ Factory("Magikarp"), Factory("Magikarp") ]
team2 = [ Factory("Magikarp"), Factory("Magikarp") ]
shared.create.call(this, {conditions, team1, team2})
spore = @battle.getMove("Spore")
@battle.performMove(@p1, spore)
@battle.performSwitch(@p2, 1)
@p2.faint()
mock = @sandbox.mock(spore).expects('fail').never()
@battle.performMove(@p1, spore)
mock.verify()
@team2.at(0).has(Status.Sleep).should.be.true