spec/spec_helper.rb in foreman-0.63.0-java vs spec/spec_helper.rb in foreman-0.64.0

- old
+ new

@@ -8,10 +8,19 @@ require "fakefs/safe" require "fakefs/spec_helpers" $:.unshift File.expand_path("../../lib", __FILE__) +begin + def running_ruby_18? + defined?(RUBY_VERSION) and RUBY_VERSION =~ /^1\.8\.\d+/ + end + require 'posix/spawn' if running_ruby_18? +rescue LoadError + STDERR.puts "WARNING: foreman requires gem `posix-spawn` on Ruby #{RUBY_VERSION}. Please `gem install posix-spawn`." +end + def mock_export_error(message) lambda { yield }.should raise_error(Foreman::Export::Exception, message) end def mock_error(subject, message) @@ -19,28 +28,36 @@ mock(subject).puts("ERROR: #{message}") yield end end +def make_pipe + IO.method(:pipe).arity.zero? ? IO.pipe : IO.pipe("BINARY") +end + def foreman(args) capture_stdout do begin Foreman::CLI.start(args.split(" ")) rescue SystemExit end end end def forked_foreman(args) - rd, wr = IO.pipe("BINARY") - Process.spawn("bundle exec bin/foreman #{args}", :out => wr, :err => wr) + rd, wr = make_pipe + if running_ruby_18? + POSIX::Spawn.spawn({}, "bundle exec bin/foreman #{args}", :out => wr, :err => wr) + else + Process.spawn("bundle exec bin/foreman #{args}", :out => wr, :err => wr) + end wr.close rd.read end def fork_and_capture(&blk) - rd, wr = IO.pipe("BINARY") + rd, wr = make_pipe pid = fork do rd.close wr.sync = true $stdout.reopen wr $stderr.reopen wr @@ -55,11 +72,15 @@ buffer += rd.gets end end def fork_and_get_exitstatus(args) - pid = Process.spawn("bundle exec bin/foreman #{args}", :out => "/dev/null", :err => "/dev/null") + pid = if running_ruby_18? + POSIX::Spawn.spawn({}, "bundle exec bin/foreman #{args}", :out => "/dev/null", :err => "/dev/null") + else + Process.spawn("bundle exec bin/foreman #{args}", :out => "/dev/null", :err => "/dev/null") + end Process.wait(pid) $?.exitstatus end def mock_exit(&block) @@ -139,11 +160,11 @@ s.gsub(/\n[\n\s]*/, "\n") end def capture_stdout old_stdout = $stdout.dup - rd, wr = IO.method(:pipe).arity.zero? ? IO.pipe : IO.pipe("BINARY") + rd, wr = make_pipe $stdout = wr yield wr.close rd.read ensure @@ -154,6 +175,7 @@ config.treat_symbols_as_metadata_keys_with_true_values = true config.color_enabled = true config.order = 'rand' config.include FakeFS::SpecHelpers, :fakefs config.mock_with :rr + config.backtrace_clean_patterns = [] end