class Spring::Test::AcceptanceTest

def app

def app
  @app ||= Spring::Test::Application.new("#{Spring::Test.root}/apps/tmp")
end

def assert_failure(command, expected_output = nil)

def assert_failure(command, expected_output = nil)
  artifacts = app.run(*Array(command))
  assert !artifacts[:status].success?, "expected unsuccessful exit status\n\n#{app.debug(artifacts)}"
  assert_output artifacts, expected_output if expected_output
end

def assert_output(artifacts, expected)

def assert_output(artifacts, expected)
  expected.each do |stream, output|
    assert artifacts[stream].include?(output),
           "expected #{stream} to include '#{output}'.\n\n#{app.debug(artifacts)}"
  end
end

def assert_speedup(ratio = DEFAULT_SPEEDUP)

def assert_speedup(ratio = DEFAULT_SPEEDUP)
  if ENV['CI']
    yield
  else
    app.with_timing do
      yield
      assert app.timing_ratio < ratio, "#{app.last_time} was not less than #{ratio} of #{app.first_time}"
    end
  end
end

def assert_success(command, expected_output = nil)

def assert_success(command, expected_output = nil)
  artifacts = app.run(*Array(command))
  assert artifacts[:status].success?, "expected successful exit status\n\n#{app.debug(artifacts)}"
  assert_output artifacts, expected_output if expected_output
end

def generator

def generator
  @@generator ||= generator_klass.new(rails_version)
end

def generator_klass

Extension point for spring-watchers-listen
def generator_klass
  Spring::Test::ApplicationGenerator
end

def rails_version

def rails_version
  ENV['RAILS_VERSION'] || '~> 4.2.0'
end

def refute_output_includes(command, not_expected)

def refute_output_includes(command, not_expected)
  artifacts = app.run(*Array(command))
  not_expected.each do |stream, output|
    assert !artifacts[stream].include?(output),
           "expected #{stream} to not include '#{output}'.\n\n#{app.debug(artifacts)}"
  end
end

def without_gem(name)

def without_gem(name)
  gem_home = app.gem_home.join('gems')
  FileUtils.mv(gem_home.join(name), app.root)
  yield
ensure
  FileUtils.mv(app.root.join(name), gem_home)
end