require File.dirname(__FILE__) + "/test_helper"

unit_tests do
  test "run yields name for start and finished of underlying suite" do
    suite = Test::Unit::TestSuite.new("name")
    supervised_suite = DeepTest::SupervisedTestSuite.new(suite, stub_everything)

    yielded = []
    supervised_suite.run(stub_everything) do |channel,name|
      yielded << [channel,name]
    end

    assert_equal [[Test::Unit::TestSuite::STARTED, "name"],
                  [Test::Unit::TestSuite::FINISHED, "name"]], yielded
  end

  test "run adds test suite to supervisor" do
    suite = Test::Unit::TestSuite.new("name")
    supervisor = stub_everything
    supervised_suite = DeepTest::SupervisedTestSuite.new(suite, supervisor)
    supervisor.expects(:add_tests).with(suite)
    supervised_suite.run(stub_everything) {|channel,name|}
  end


  test "run tells supervisor to read resuts with passed in results" do
    suite = Test::Unit::TestSuite.new("name")
    results = stub_everything
    supervisor = stub_everything
    supervised_suite = DeepTest::SupervisedTestSuite.new(suite, supervisor)
    supervisor.expects(:read_results).with(results)
    supervised_suite.run(results) {|channel,name|}
  end


  test "run passes progress block on to supervisor" do
    suite = Test::Unit::TestSuite.new("name")
    supervisor = stub_everything
    supervised_suite = DeepTest::SupervisedTestSuite.new(suite, supervisor)
    supervisor.stubs(:read_results).yields("from_supervisor", "event")
    yielded = []
    supervised_suite.run(stub_everything) do |channel,name|
      yielded << [channel, name]
    end

    assert_equal true, yielded.include?(["from_supervisor", "event"])
  end

  test "has same size as underlyng suite" do
    suite = Test::Unit::TestSuite.new("name")
    suite << "test"
    supervisor = stub_everything
    supervised_suite = DeepTest::SupervisedTestSuite.new(suite, supervisor)
    
    assert_equal suite.size, supervised_suite.size
  end
  
  test "defaults to using DeepTest::Supervisor" do
    DeepTest::Supervisor.stubs(:new).returns(:supervisor)
    supervised_suite = DeepTest::SupervisedTestSuite.new(stub)
    assert_equal :supervisor, supervised_suite.instance_variable_get("@supervisor")
  end
end