require '../spec_helper'

describe "Freakset Acceptance", ->

  beforeEach ->
    @freakset = new Freakset()
    @set = null
    @result = false
    @result2 = false


  it 'should emit "beforeRunningActor" events during compilation', ->

    @freakset.on 'beforeRunningActor', (set, actor) =>
      @result = true

    @freakset.on 'beforeRunningActor', (set, actor) =>
      @result2 = true

    @freakset.step (set) ->
      set.commit()

    @set = @freakset.compile {}

    waitsFor -> !@set.isRunning()

    runs ->
      expect(@result).toBe true
      expect(@result2).toBe true


  it 'should emit "afterRunningActor" events during compilation', ->

    @freakset.on 'afterRunningActor', (set, actor) =>
      @result = true

    @freakset.on 'afterRunningActor', (set, actor) =>
      @result2 = true

    @freakset.step (set) ->
      set.commit()

    @set = @freakset.compile {}

    waitsFor -> !@set.isRunning()

    runs ->
      expect(@result).toBe true
      expect(@result2).toBe true


  it 'should emit "aroundRunningActor" events during compilation', ->
    stepOrderControl = []

    @freakset.on 'aroundRunningActor', (set, actor, cb) =>
      stepOrderControl.push("1")
      cb()
      stepOrderControl.push("1x")

    @freakset.on 'aroundRunningActor', (set, actor, cb) =>
      stepOrderControl.push("2")
      cb()
      stepOrderControl.push("2x")

    @freakset.on 'aroundRunningActor', (set, actor, cb) =>
      stepOrderControl.push("3")
      cb()
      stepOrderControl.push("3x")

    @freakset.step (set) ->
      stepOrderControl.push("X")
      set.commit()

    @set = @freakset.compile {}

    waitsFor -> !@set.isRunning()

    runs ->
      expect(stepOrderControl).toEqual ["1", "2", "3", "X", "3x", "2x", "1x"]
