# NOTE: I usually support `STANDALONE` mode in specs for Rails projects' components # to be able to test them without loading the environment. This project does not # depend on Rails *BUT* I still want a consistent RSpec file structure. # If this is confusing, feel free to propose something better. :) # No Rails, we're always standalone... and free! :) STANDALONE = 1 if STANDALONE # Provide root path object. module Standalone eval <<-EOT def self.root # This is an absolute path, it's perfectly safe to do a `+` and then `require`. Pathname("#{File.expand_path('../..', __FILE__)}") end EOT end # Load stuff. [ "lib/hack_tree/**/*.rb", ].each do |fmask| Dir[Standalone.root + fmask].each do |fn| require fn end end end # When this becomes a gem, use gem instead of direct copy. module RSpec module PrintOnFailure module Helpers # Output message before the failed tests in block. Useful when input and expected data # are defined as collections. # # sets = [ # ["hello", "HELLO"], # ["123", "456"], # ] # # sets.each do |input, expected| # print_on_failure("-- input:'#{input}'") do # input.upcase.should == expected # end # end def print_on_failure(message, &block) begin yield rescue Exception # Catch just everything, report and then re-run. The test may fail due to an exception, not necessarily unmatched expectation. puts message yield end end end end end begin # 2.x. RSpec.configure do |config| config.include ::RSpec::PrintOnFailure::Helpers end rescue NameError # 1.3. Spec::Runner.configure do |config| config.include ::RSpec::PrintOnFailure::Helpers end end