# This file was generated by the `rspec --init` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# Require this file using `require "spec_helper"` to ensure that it is only
# loaded once.
#
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
require 'rtanque'

RSpec.configure do |config|
  config.run_all_when_everything_filtered = true

  # Run specs in random order to surface order dependencies. If you find an
  # order dependency and want to debug it, you can fix the order by providing
  # the seed, which is printed after each run.
  #     --seed 1234
  config.order = 'random'

  config.expect_with :rspec do |c|
    # disable the `should` syntax
    c.syntax = :expect
  end

  config.before(:all) do
    @arena = RTanque::Arena.new(100, 100)
    RTanque::Configuration.config do
      raise_brain_tick_errors false # errors should be correctly captured
    end
  end

  module BrainHelper
    def on_brain_tick!(&block)
      Class.new(RTanque::Bot::Brain).tap do |test_brain|
        test_brain.send(:define_method, :tick!, &block)
      end
    end

    def brain_bot(&tick)
      RTanque::Bot.new(@arena, on_brain_tick!(&tick))
    end
  end
  config.include BrainHelper

  module BotHelper
    def mockbot(x = 0, y = 0, name = 'testbot')
      double('bot', :position => RTanque::Point.new(x, y, @arena), :name => name, :arena => @arena)
    end
  end

  config.include BotHelper
end
