BattleSim/test/bw/priorities.coffee

36 lines
1.6 KiB
CoffeeScript

require '../helpers'
{Ability} = require('../../server/bw/data/abilities')
{Item} = require('../../server/bw/data/items')
{Attachment, Status} = require('../../server/bw/attachment')
Priorities = require('../../server/bw/priorities')
Query = require('../../server/bw/queries')
shared = require('../shared')
describe "BW Priorities:", ->
ensureAttachments = (arrayOfAttachments, eventName) ->
attachments = (a for a in arrayOfAttachments when a.prototype[eventName]? && a not in Priorities[eventName])
attachments = attachments.map((a) -> a.displayName || a::name)
if attachments.length > 0
throw new Error("#{attachments.join(', ')} must specify their #{eventName} priority.")
it "ensures all relevant attachments have their specified event names", ->
for eventName of Priorities
ensureAttachments((klass for name, klass of Attachment), eventName)
ensureAttachments((klass for name, klass of Item), eventName)
ensureAttachments((klass for name, klass of Ability), eventName)
describe "Queries", ->
it "execute priorities in order", ->
shared.create.call(this)
@battle.attach(Attachment.TrickRoom)
@team2.attach(Attachment.Reflect)
@p1.attach(Attachment.Ingrain)
spy1 = @sandbox.spy(Attachment.TrickRoom.prototype, 'endTurn')
spy2 = @sandbox.spy(Attachment.Reflect.prototype, 'endTurn')
spy3 = @sandbox.spy(Attachment.Ingrain.prototype, 'endTurn')
Query("endTurn", @battle.getAllAttachments())
spy3.calledBefore(spy2).should.be.true
spy2.calledBefore(spy1).should.be.true