test/unit/result_tests.rb in assert-2.18.2 vs test/unit/result_tests.rb in assert-2.18.3

- old
+ new

@@ -4,434 +4,421 @@ require "assert/file_line" module Assert::Result class UnitTests < Assert::Context desc "Assert::Result" - setup do - @test = Factory.test("a test name") - end - subject{ Assert::Result } + subject { Assert::Result } + let(:test1) { Factory.test("a test name") } + should have_imeths :types, :new should "know its types" do exp = { :pass => Pass, :fail => Fail, :ignore => Ignore, :skip => Skip, :error => Error } - assert_equal exp, subject.types + assert_that(subject.types).equals(exp) - assert_equal Base, subject.types[Factory.string] + assert_that(subject.types[Factory.string]).equals(Base) end should "create results from data hashes" do type = Assert::Result.types.keys.sample exp = Assert::Result.types[type].new(:type => type) - assert_equal exp, Assert::Result.new(:type => type) + assert_that(Assert::Result.new(:type => type)).equals(exp) end - - private - - def build_backtrace - assert_lib_path = File.join(ROOT_PATH, "lib/#{Factory.string}:#{Factory.integer}") - (Factory.integer(3).times.map{ Factory.string } + [assert_lib_path]).shuffle - end end class BaseTests < UnitTests desc "Base" - setup do - @given_data = { + subject { result1 } + + let(:given_data1) { + { :type => Factory.string, :name => Factory.string, :test_name => Factory.string, :test_file_line => Assert::FileLine.new(Factory.string, Factory.integer), :message => Factory.string, :output => Factory.text, - :backtrace => Backtrace.new(build_backtrace) + :backtrace => Backtrace.new(Factory.backtrace) } - @result = Base.new(@given_data) - end - subject{ @result } + } + let(:result1) { Base.new(given_data1) } should have_cmeths :type, :name, :for_test should have_imeths :type, :name, :test_name, :test_file_line should have_imeths :test_file_name, :test_line_num, :test_id should have_imeths :message, :output should have_imeths :backtrace, :trace should have_imeths :set_backtrace, :set_with_bt, :with_bt_set? should have_imeths :src_line, :file_line, :file_name, :line_num - should have_imeths *Assert::Result.types.keys.map{ |k| "#{k}?" } + should have_imeths(*Assert::Result.types.keys.map{ |k| "#{k}?" }) should have_imeths :to_sym, :to_s should "know its class-level type/name" do - assert_equal :unknown, subject.class.type - assert_equal "", subject.class.name + assert_that(subject.class.type).equals(:unknown) + assert_that(subject.class.name).equals("") end should "know how to build a result for a given test" do message = Factory.text bt = Factory.integer(3).times.map{ Factory.string } - result = Base.for_test(@test, message, bt) + result = Base.for_test(test1, message, bt) exp_backtrace = Backtrace.new(bt) exp_trace = exp_backtrace.filtered.first.to_s - assert_equal @test.name, result.test_name - assert_equal @test.file_line.to_s, result.test_id + assert_that(result.test_name).equals(test1.name) + assert_that(result.test_id).equals(test1.file_line.to_s) - assert_equal message, result.message - assert_equal exp_backtrace, result.backtrace - assert_equal exp_trace, result.trace + assert_that(result.message).equals(message) + assert_that(result.backtrace).equals(exp_backtrace) + assert_that(result.trace).equals(exp_trace) - assert_false result.with_bt_set? + assert_that(result.with_bt_set?).is_false end should "use any given attrs" do - assert_equal @given_data[:type].to_sym, subject.type - assert_equal @given_data[:name], subject.name - assert_equal @given_data[:test_name], subject.test_name - assert_equal @given_data[:test_file_line], subject.test_file_line - assert_equal @given_data[:message], subject.message - assert_equal @given_data[:output], subject.output - assert_equal @given_data[:backtrace], subject.backtrace + assert_that(subject.type).equals(given_data1[:type].to_sym) + assert_that(subject.name).equals(given_data1[:name]) + assert_that(subject.test_name).equals(given_data1[:test_name]) + assert_that(subject.test_file_line).equals(given_data1[:test_file_line]) + assert_that(subject.message).equals(given_data1[:message]) + assert_that(subject.output).equals(given_data1[:output]) + assert_that(subject.backtrace).equals(given_data1[:backtrace]) end should "default its attrs" do result = Base.new({}) - assert_equal :unknown, result.type - assert_equal "", result.name - assert_equal "", result.test_name - assert_equal Assert::FileLine.parse(""), result.test_file_line - assert_equal "", result.message - assert_equal "", result.output - assert_equal Backtrace.new([]), result.backtrace - assert_equal "", result.trace + assert_that(result.type).equals(:unknown) + assert_that(result.name).equals("") + assert_that(result.test_name).equals("") + assert_that(result.test_file_line).equals(Assert::FileLine.parse("")) + assert_that(result.message).equals("") + assert_that(result.output).equals("") + assert_that(result.backtrace).equals(Backtrace.new([])) + assert_that(result.trace).equals("") end should "know its test file line attrs" do - exp = @given_data[:test_file_line] - assert_equal exp.file, subject.test_file_name - assert_equal exp.line.to_i, subject.test_line_num - assert_equal exp.to_s, subject.test_id + exp = given_data1[:test_file_line] + assert_that(subject.test_file_name).equals(exp.file) + assert_that(subject.test_line_num).equals(exp.line.to_i) + assert_that(subject.test_id).equals(exp.to_s) end should "allow setting a new backtrace" do - new_bt = build_backtrace + new_bt = Factory.backtrace exp_backtrace = Backtrace.new(new_bt) exp_trace = exp_backtrace.filtered.first.to_s subject.set_backtrace(new_bt) - assert_equal exp_backtrace, subject.backtrace - assert_equal exp_trace, subject.trace + assert_that(subject.backtrace).equals(exp_backtrace) + assert_that(subject.trace).equals(exp_trace) # test that the first bt line is used if filtered is empty assert_lib_path = File.join(ROOT_PATH, "lib/#{Factory.string}:#{Factory.integer}") new_bt = (Factory.integer(3)+1).times.map{ assert_lib_path } exp_backtrace = Backtrace.new(new_bt) exp_trace = exp_backtrace.first.to_s subject.set_backtrace(new_bt) - assert_equal exp_backtrace, subject.backtrace - assert_equal exp_trace, subject.trace + assert_that(subject.backtrace).equals(exp_backtrace) + assert_that(subject.trace).equals(exp_trace) end should "allow setting a with bt backtrace and know if one has been set" do - assert_false subject.with_bt_set? + assert_that(subject.with_bt_set?).is_false orig_backtrace = subject.backtrace - with_bt = build_backtrace + with_bt = Factory.backtrace subject.set_with_bt(with_bt) - assert_true subject.with_bt_set? - assert_equal orig_backtrace, subject.backtrace - assert_equal with_bt.first, subject.src_line + assert_that(subject.with_bt_set?).is_true + assert_that(subject.backtrace).equals(orig_backtrace) + assert_that(subject.src_line).equals(with_bt.first) exp = Backtrace.to_s(with_bt + [orig_backtrace.filtered.first]) - assert_equal exp, subject.trace + assert_that(subject.trace).equals(exp) end should "know its src/file line attrs" do - new_bt = build_backtrace + new_bt = Factory.backtrace subject.set_backtrace(new_bt) exp = Backtrace.new(new_bt).filtered.first.to_s - assert_equal exp, subject.src_line + assert_that(subject.src_line).equals(exp) exp = Assert::FileLine.parse(subject.src_line) - assert_equal exp, subject.file_line - assert_equal exp.file, subject.file_name - assert_equal exp.line.to_i, subject.line_num + assert_that(subject.file_line).equals(exp) + assert_that(subject.file_name).equals(exp.file) + assert_that(subject.line_num).equals(exp.line.to_i) # test you get the same file line attrs using `set_with_bt` subject.set_with_bt(new_bt) - assert_equal new_bt.first.to_s, subject.src_line + assert_that(subject.src_line).equals(new_bt.first.to_s) exp = Assert::FileLine.parse(subject.src_line) - assert_equal exp, subject.file_line - assert_equal exp.file, subject.file_name - assert_equal exp.line.to_i, subject.line_num + assert_that(subject.file_line).equals(exp) + assert_that(subject.file_name).equals(exp.file) + assert_that(subject.line_num).equals(exp.line.to_i) # test that the first bt line is used if filtered is empty assert_lib_path = File.join(ROOT_PATH, "lib/#{Factory.string}:#{Factory.integer}") new_bt = (Factory.integer(3)+1).times.map{ assert_lib_path } subject.set_backtrace(new_bt) exp = new_bt.first.to_s - assert_equal exp, subject.src_line + assert_that(subject.src_line).equals(exp) exp = Assert::FileLine.parse(subject.src_line) - assert_equal exp, subject.file_line - assert_equal exp.file, subject.file_name - assert_equal exp.line.to_i, subject.line_num + assert_that(subject.file_line).equals(exp) + assert_that(subject.file_name).equals(exp.file) + assert_that(subject.line_num).equals(exp.line.to_i) end should "know if it is a certain type of result" do Assert::Result.types.keys.each do |type| - assert_false subject.send("#{type}?") + assert_that(subject.send("#{type}?")).is_false Assert.stub(subject, :type){ type } - assert_true subject.send("#{type}?") + assert_that(subject.send("#{type}?")).is_true end end should "know its symbol representation" do - assert_equal subject.type, subject.to_sym + assert_that(subject.to_sym).equals(subject.type) end should "know its string representation" do str = subject.to_s - assert_includes subject.name.upcase, str - assert_includes subject.test_name, str - assert_includes subject.message, str - assert_includes subject.trace, str + assert_that(str).includes(subject.name.upcase) + assert_that(str).includes(subject.test_name) + assert_that(str).includes(subject.message) + assert_that(str).includes(subject.trace) - assert_equal 3, str.split("\n").count + assert_that(str.split("\n").count).equals(3) Assert.stub(subject, :message){ "" } Assert.stub(subject, :trace){ "" } - assert_equal 1, subject.to_s.split("\n").count + assert_that(subject.to_s.split("\n").count).equals(1) end should "know if it is equal to another result" do - other = Assert::Result::Base.new(@given_data) - assert_equal other, subject + other = Assert::Result::Base.new(given_data1) + assert_that(subject).equals(other) Assert.stub(other, [:type, :message].sample){ Factory.string } assert_not_equal other, subject end should "show only its class and message when inspected" do exp = "#<#{subject.class}:#{"0x0%x" % (subject.object_id << 1)} "\ "@message=#{subject.message.inspect} "\ "@file_line=#{subject.file_line.to_s.inspect} "\ "@test_file_line=#{subject.test_file_line.to_s.inspect}>" - assert_equal exp, subject.inspect + assert_that(subject.inspect).equals(exp) end end class PassTests < UnitTests desc "Pass" - setup do - @result = Pass.new({}) - end - subject { @result } + subject { result1 } + let(:result1) { Pass.new({}) } + should "know its type/name" do - assert_equal :pass, subject.type - assert_equal :pass, subject.class.type - assert_equal "Pass", subject.class.name + assert_that(subject.type).equals(:pass) + assert_that(subject.class.type).equals(:pass) + assert_that(subject.class.name).equals("Pass") end end class IgnoreTests < UnitTests desc "Ignore" - setup do - @result = Ignore.new({}) - end - subject { @result } + subject { result1 } + let(:result1) { Ignore.new({}) } + should "know its type/name" do - assert_equal :ignore, subject.type - assert_equal :ignore, subject.class.type - assert_equal "Ignore", subject.class.name + assert_that(subject.type).equals(:ignore) + assert_that(subject.class.type).equals(:ignore) + assert_that(subject.class.name).equals("Ignore") end end class HaltingTestResultErrorTests < UnitTests desc "HaltingTestResultError" - subject{ HaltingTestResultError.new } + subject { HaltingTestResultError.new } should have_accessors :assert_with_bt should "be a runtime error" do - assert_kind_of RuntimeError, subject + assert_that(subject).is_kind_of(RuntimeError) end end class TestFailureTests < UnitTests desc "TestFailure" - subject{ TestFailure } + subject { TestFailure } should "be a halting test result error" do - assert_kind_of HaltingTestResultError, subject.new + assert_that(subject.new).is_kind_of(HaltingTestResultError) end end class FailTests < UnitTests desc "Fail" - setup do - @result = Fail.new({}) - end - subject { @result } + subject { result1 } + let(:result1) { Fail.new({}) } + should "know its type/name" do - assert_equal :fail, subject.type - assert_equal :fail, subject.class.type - assert_equal "Fail", subject.class.name + assert_that(subject.type).equals(:fail) + assert_that(subject.class.type).equals(:fail) + assert_that(subject.class.name).equals("Fail") end should "allow creating for a test with TestFailure exceptions" do err = TestFailure.new - err.set_backtrace(build_backtrace) - result = Fail.for_test(@test, err) + err.set_backtrace(Factory.backtrace) + result = Fail.for_test(test1, err) - assert_equal err.message, result.message + assert_that(result.message).equals(err.message) err_backtrace = Backtrace.new(err.backtrace) - assert_equal err_backtrace, result.backtrace + assert_that(result.backtrace).equals(err_backtrace) # test assert with bt errors - err.assert_with_bt = build_backtrace - result = Fail.for_test(@test, err) + err.assert_with_bt = Factory.backtrace + result = Fail.for_test(test1, err) - assert_equal err.message, result.message - assert_equal err.backtrace, result.backtrace - assert_equal err.assert_with_bt.first, result.src_line + assert_that(result.message).equals(err.message) + assert_that(result.backtrace).equals(err.backtrace) + assert_that(result.src_line).equals(err.assert_with_bt.first) exp = Backtrace.to_s(err.assert_with_bt + [err_backtrace.filtered.first]) - assert_equal exp, result.trace + assert_that(result.trace).equals(exp) end should "not allow creating for a test with non-TestFailure exceptions" do - assert_raises(ArgumentError){ Fail.for_test(@test, RuntimeError.new) } + assert_that(-> { Fail.for_test(test1, RuntimeError.new) }).raises(ArgumentError) end end class TestSkippedTests < UnitTests desc "TestSkipped" - subject{ TestSkipped } + subject { TestSkipped } should "be a halting test result error" do - assert_kind_of HaltingTestResultError, subject.new + assert_that(subject.new).is_kind_of(HaltingTestResultError) end end class SkipTests < UnitTests desc "Skip" - setup do - @result = Skip.new({}) - end - subject { @result } + subject { result1 } + let(:result1) { Skip.new({}) } + should "know its type/name" do - assert_equal :skip, subject.type - assert_equal :skip, subject.class.type - assert_equal "Skip", subject.class.name + assert_that(subject.type).equals(:skip) + assert_that(subject.class.type).equals(:skip) + assert_that(subject.class.name).equals("Skip") end should "allow creating for a test with TestSkipped exceptions" do err = TestSkipped.new - err.set_backtrace(build_backtrace) - result = Skip.for_test(@test, err) + err.set_backtrace(Factory.backtrace) + result = Skip.for_test(test1, err) - assert_equal err.message, result.message + assert_that(result.message).equals(err.message) err_backtrace = Backtrace.new(err.backtrace) - assert_equal err_backtrace, result.backtrace + assert_that(result.backtrace).equals(err_backtrace) # test assert with bt errors - err.assert_with_bt = build_backtrace - result = Skip.for_test(@test, err) + err.assert_with_bt = Factory.backtrace + result = Skip.for_test(test1, err) - assert_equal err.message, result.message - assert_equal err.backtrace, result.backtrace - assert_equal err.assert_with_bt.first, result.src_line + assert_that(result.message).equals(err.message) + assert_that(result.backtrace).equals(err.backtrace) + assert_that(result.src_line).equals(err.assert_with_bt.first) exp = Backtrace.to_s(err.assert_with_bt + [err_backtrace.filtered.first]) - assert_equal exp, result.trace + assert_that(result.trace).equals(exp) end should "not allow creating for a test with non-TestSkipped exceptions" do - assert_raises(ArgumentError){ Skip.for_test(@test, RuntimeError.new) } + assert_that(-> { Skip.for_test(test1, RuntimeError.new) }).raises(ArgumentError) end end class ErrorTests < UnitTests desc "Error" - setup do - @result = Error.new({}) - end - subject { @result } + subject { result1 } + let(:result1) { Error.new({}) } + should "know its class-level type/name" do - assert_equal :error, subject.class.type - assert_equal "Error", subject.class.name + assert_that(subject.class.type).equals(:error) + assert_that(subject.class.name).equals("Error") end should "allow creating for a test with exceptions" do err = Exception.new - err.set_backtrace(build_backtrace) - result = Error.for_test(@test, err) + err.set_backtrace(Factory.backtrace) + result = Error.for_test(test1, err) exp_msg = "#{err.message} (#{err.class.name})" - assert_equal exp_msg, result.message + assert_that(result.message).equals(exp_msg) exp_bt = Backtrace.new(err.backtrace) - assert_equal exp_bt, result.backtrace - assert_equal Backtrace.to_s(exp_bt), result.trace + assert_that(result.backtrace).equals(exp_bt) + assert_that(result.trace).equals(Backtrace.to_s(exp_bt)) end should "not allow creating for a test without an exception" do - assert_raises(ArgumentError){ Error.for_test(@test, Factory.string) } + assert_that(-> { Error.for_test(test1, Factory.string) }).raises(ArgumentError) end end class BacktraceTests < UnitTests desc "Backtrace" - setup do - @backtrace = Backtrace.new(build_backtrace) - end - subject { @backtrace } + subject { backtrace1 } + let(:backtrace1) { Backtrace.new(Factory.backtrace) } + should have_cmeths :parse, :to_s should have_imeths :filtered should "be parseable from its string representation" do - assert_equal subject, Backtrace.parse(Backtrace.to_s(subject)) + assert_that(Backtrace.parse(Backtrace.to_s(subject))).equals(subject) end should "render as a string by joining on the newline" do - assert_equal subject.join(Backtrace::DELIM), Backtrace.to_s(subject) + assert_that(Backtrace.to_s(subject)).equals(subject.join(Backtrace::DELIM)) end should "be an Array" do - assert_kind_of ::Array, subject + assert_that(subject).is_kind_of(::Array) end should "know its DELIM" do - assert_equal "\n", Backtrace::DELIM + assert_that(Backtrace::DELIM).equals("\n") end should "another backtrace when filtered" do - assert_kind_of Backtrace, subject + assert_that(subject).is_kind_of(Backtrace) end should "default itself when created from nil" do - assert_equal ["No backtrace"], Backtrace.new + assert_that(Backtrace.new).equals(["No backtrace"]) end end end