require File.dirname(__FILE__) + '/test_helper.rb'

class TestResult < Test::Unit::TestCase
  include REXML

  def test_can_parse_xml
    verify_results(10, 4, 2, 1)
    verify_results(10, 0, 0, 0)
    verify_results(10, 2, 3, 1)
    verify_results(100, 200, 22, 51)
  end

  def test_message
    verify_message(100, 200, 1, 0)
    verify_message(12, 22, 1, 7)
    verify_message(13, 5, 0, 3)
  end

  def test_image_when_all_passed
    result = create_result(100, 100, 0, 0)

    assert_equal(Autotestforphp::Notification::Config.success_image, result.image)
  end

  def test_image_when_failed
#    result = create_result(100, 100, 0, 0)
#
#    assert_equal(Autotestforphp::Notification::Config.success_image)
  end

private

  def create_result(num_tests, num_assertions, num_errors, num_failures)
    xml = build_xml(num_tests, num_assertions, num_errors, num_failures)
    Autotestforphp::Result.build_from_xml(xml)
  end

  def verify_message(num_tests, num_assertions, num_errors, num_failures)
    result = create_result(num_tests, num_assertions, num_errors, num_failures)

    assert_equal("#{num_tests} tests, #{num_assertions} assertions, #{num_failures} failures, #{num_errors} errors", result.message)
  end

  def verify_results(num_tests, num_assertions, num_errors, num_failures)
    result = create_result(num_tests, num_assertions, num_errors, num_failures)

    assert_equal(num_tests, result.num_tests)
    assert_equal(num_assertions, result.num_assertions)
    assert_equal(num_errors, result.num_errors)
    assert_equal(num_failures, result.num_failures)
  end

  def build_xml(num_tests, num_assertions, num_errors, num_failures)
    <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
  <testsuite name="FailureErrorTest" file="/home/sb/FailureErrorTest.php" tests="#{num_tests}" assertions="#{num_assertions}" failures="#{num_failures}" errors="#{num_errors}" time="0.019744">
    <testcase name="testFailure" class="FailureErrorTest" file="/home/sb/FailureErrorTest.php" line="6" assertions="1" time="0.011456">
      <failure type="PHPUnit_Framework_ExpectationFailedException">
failure description
</failure>
    </testcase>
    <testcase name="testError" class="FailureErrorTest" file="/home/sb/FailureErrorTest.php" line="11" assertions="0" time="0.008288">
      <error type="Exception">testError(FailureErrorTest)
exception description
</error>
    </testcase>
  </testsuite>
</testsuites>
EOF
  end
end