#!/usr/local/bin/ruby -w require 'test/unit' require 'stringio' $TESTING = true require 'unit_diff' class TestUnitDiff < Test::Unit::TestCase def setup @diff = UnitDiff.new end def test_input header = "Loaded suite ./blah\nStarted\nFF\nFinished in 0.035332 seconds.\n\n" input = "#{header} 1) Failure:\ntest_test1(TestBlah) [./blah.rb:25]:\n<\"line1\\nline2\\nline3\\n\"> expected but was\n<\"line4\\nline5\\nline6\\n\">.\n\n 2) Failure:\ntest_test2(TestBlah) [./blah.rb:29]:\n<\"line1\"> expected but was\n<\"line2\\nline3\\n\\n\">.\n\n2 tests, 2 assertions, 2 failures, 0 errors\n" # TODO: I think I'd like a separate footer array as well expected = [[[" 1) Failure:\n", "test_test1(TestBlah) [./blah.rb:25]:\n", "<\"line1\\nline2\\nline3\\n\"> expected but was\n", "<\"line4\\nline5\\nline6\\n\">.\n"], [" 2) Failure:\n", "test_test2(TestBlah) [./blah.rb:29]:\n", "<\"line1\"> expected but was\n", "<\"line2\\nline3\\n\\n\">.\n"]], ["\n", "2 tests, 2 assertions, 2 failures, 0 errors\n"]] util_unit_diff(header, input, expected, :parse_input) end def test_unit_diff_empty # simulates broken pipe at the least input = "" expected = "" util_unit_diff("", "", "") end def test_parse_diff_angles input = [" 1) Failure:\n", "test_test1(TestBlah) [./blah.rb:25]:\n", "<\"\"> expected but was\n", "<\"\">.\n" ] expected = [[" 1) Failure:\n", "test_test1(TestBlah) [./blah.rb:25]:\n"], [""], [""]] assert_equal expected, @diff.parse_diff(input) end def test_parse_diff1 input = [" 1) Failure:\n", "test_test1(TestBlah) [./blah.rb:25]:\n", "<\"line1\\nline2\\nline3\\n\"> expected but was\n", "<\"line4\\nline5\\nline6\\n\">.\n" ] expected = [[" 1) Failure:\n", "test_test1(TestBlah) [./blah.rb:25]:\n"], ["line1\\nline2\\nline3\\n"], ["line4\\nline5\\nline6\\n"]] assert_equal expected, @diff.parse_diff(input) end def test_parse_diff2 input = [" 2) Failure:\n", "test_test2(TestBlah) [./blah.rb:29]:\n", "<\"line1\"> expected but was\n", "<\"line2\\nline3\\n\\n\">.\n" ] expected = [[" 2) Failure:\n", "test_test2(TestBlah) [./blah.rb:29]:\n"], ["line1"], ["line2\\nline3\\n\\n"] ] assert_equal expected, @diff.parse_diff(input) end def test_parse_diff3 input = [" 13) Failure:\n", "test_case_stmt(TestRubyToRubyC) [./r2ctestcase.rb:1198]:\n", "Unknown expected data.\n", " is not true.\n"] expected = [[" 13) Failure:\n", "test_case_stmt(TestRubyToRubyC) [./r2ctestcase.rb:1198]:\n", "Unknown expected data.\n"], [" is not true.\n"], nil] assert_equal expected, @diff.parse_diff(input) end def test_parse_diff_suspect_equals input = ["1) Failure:\n", "test_util_capture(AssertionsTest) [test/test_zentest_assertions.rb:53]:\n", "<\"out\"> expected but was\n", "<\"out\">.\n"] expected = [["1) Failure:\n", "test_util_capture(AssertionsTest) [test/test_zentest_assertions.rb:53]:\n"], ["out"], ["out"]] assert_equal expected, @diff.parse_diff(input) end def test_parse_diff_NOT_suspect_equals input = ["1) Failure:\n", "test_util_capture(AssertionsTest) [test/test_zentest_assertions.rb:53]:\n", "<\"out\"> expected but was\n", "<\"out\\n\">.\n"] expected = [["1) Failure:\n", "test_util_capture(AssertionsTest) [test/test_zentest_assertions.rb:53]:\n"], ["out"], ["out\\n"]] assert_equal expected, @diff.parse_diff(input) end def test_unit_diff_angles header = "Loaded suite ./blah\nStarted\nF\nFinished in 0.035332 seconds.\n\n" input = "#{header} 1) Failure:\ntest_test1(TestBlah) [./blah.rb:25]:\n<\"\"> expected but was\n<\"\">.\n\n1 tests, 1 assertions, 1 failures, 0 errors\n" expected = "1) Failure:\ntest_test1(TestBlah) [./blah.rb:25]:\n1c1\n< \n---\n> \n\n1 tests, 1 assertions, 1 failures, 0 errors" util_unit_diff(header, input, expected) end def test_unit_diff1 header = "Loaded suite ./blah\nStarted\nF\nFinished in 0.035332 seconds.\n\n" input = "#{header} 1) Failure:\ntest_test1(TestBlah) [./blah.rb:25]:\n<\"line1\\nline2\\nline3\\n\"> expected but was\n<\"line4\\nline5\\nline6\\n\">.\n\n1 tests, 1 assertions, 1 failures, 0 errors\n" expected = "1) Failure:\ntest_test1(TestBlah) [./blah.rb:25]:\n1,3c1,3\n< line1\n< line2\n< line3\n---\n> line4\n> line5\n> line6\n\n1 tests, 1 assertions, 1 failures, 0 errors" util_unit_diff(header, input, expected) end def test_unit_diff2 header = "Loaded suite ./blah\nStarted\nFF\nFinished in 0.035332 seconds.\n\n" input = "#{header} 1) Failure:\ntest_test1(TestBlah) [./blah.rb:25]:\n<\"line1\\nline2\\nline3\\n\"> expected but was\n<\"line4\\nline5\\nline6\\n\">.\n\n 2) Failure:\ntest_test2(TestBlah) [./blah.rb:29]:\n<\"line1\"> expected but was\n<\"line2\\nline3\\n\\n\">.\n\n2 tests, 2 assertions, 2 failures, 0 errors\n" expected = "1) Failure:\ntest_test1(TestBlah) [./blah.rb:25]:\n1,3c1,3\n< line1\n< line2\n< line3\n---\n> line4\n> line5\n> line6\n\n2) Failure:\ntest_test2(TestBlah) [./blah.rb:29]:\n1c1,4\n< line1\n---\n> line2\n> line3\n> \n> \n\n2 tests, 2 assertions, 2 failures, 0 errors" util_unit_diff(header, input, expected) end def test_unit_diff3 header = "" input = " 13) Failure:\ntest_case_stmt(TestRubyToRubyC) [./r2ctestcase.rb:1198]:\nUnknown expected data.\n is not true.\n" expected = "13) Failure:\ntest_case_stmt(TestRubyToRubyC) [./r2ctestcase.rb:1198]:\nUnknown expected data.\n is not true." util_unit_diff(header, input, expected) end def test_unit_diff_suspect_equals header = "Loaded suite ./blah\nStarted\n.............................................F............................................\nFinished in 0.834671 seconds.\n\n" footer = "90 tests, 241 assertions, 1 failures, 0 errors" input = "#{header} 1) Failure:\ntest_unit_diff_suspect_equals(TestUnitDiff) [./test/test_unit_diff.rb:122]:\n<\"out\"> expected but was\n<\"out\">.\n\n#{footer}" expected = "1) Failure:\ntest_unit_diff_suspect_equals(TestUnitDiff) [./test/test_unit_diff.rb:122]:\n[no difference--suspect ==]\n\n#{footer}" util_unit_diff(header, input, expected) end def test_unit_diff_NOT_suspect_equals header = "Loaded suite ./blah\nStarted\n.\nFinished in 0.0 seconds.\n\n" input = "#{header} 1) Failure:\ntest_blah(TestBlah)\n<\"out\"> expected but was\n<\"out\\n\">.\n\n1 tests, 1 assertions, 1 failures, 0 errors" expected = "1) Failure:\ntest_blah(TestBlah)\n1a2\n> \n\n1 tests, 1 assertions, 1 failures, 0 errors" util_unit_diff(header, input, expected) end def util_unit_diff(header, input, expected, msg=:unit_diff) output = StringIO.new("") actual = @diff.send(msg, StringIO.new(input), output) assert_equal header, output.string assert_equal expected, actual end end