require "selftest_utils"

class CMDTEST_raise < Cmdtest::Testcase

  include SelftestUtils

  def test_raise_TEST
    create_file "CMDTEST_foo.rb", [
      "class CMDTEST_foo < Cmdtest::Testcase",
      "  def setup",
      "    raise 'error in setup' if ENV['CMDTEST_RAISE'] == 'setup'",
      "  end",
      "",
      "  def teardown",
      "    raise 'error in teardown' if ENV['CMDTEST_RAISE'] == 'teardown'",
      "  end",
      "",
      "  def test_foo",
      "    raise 'error in test' if ENV['CMDTEST_RAISE'] == 'test'",
      "    puts '123'",
      "  end",
      "end",
    ]

    cmd_cmdtest do
      stdout_equal [
        "123",
      ]
    end

    ENV['CMDTEST_RAISE'] = 'setup'
    cmd_cmdtest do
      exit_nonzero
      stdout_equal /--- CAUGHT EXCEPTION:/
      stdout_equal /---   error in setup/
    end

    ENV['CMDTEST_RAISE'] = 'test'
    cmd_cmdtest do
      exit_nonzero
      stdout_equal /--- CAUGHT EXCEPTION:/
      stdout_equal /---   error in test/
    end

    ENV['CMDTEST_RAISE'] = 'teardown'
    cmd_cmdtest do
      exit_nonzero
      stdout_equal /--- CAUGHT EXCEPTION:/
      stdout_equal /---   error in teardown/
    end

    ENV['CMDTEST_RAISE'] = nil
    cmd_cmdtest do
      stdout_equal "123\n"
    end
  end

end