aboutsummaryrefslogtreecommitdiffstats
path: root/spec/bundler/spec_helper.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/bundler/spec_helper.rb')
-rw-r--r--spec/bundler/spec_helper.rb156
1 files changed, 156 insertions, 0 deletions
diff --git a/spec/bundler/spec_helper.rb b/spec/bundler/spec_helper.rb
new file mode 100644
index 0000000000..7293f0e57b
--- /dev/null
+++ b/spec/bundler/spec_helper.rb
@@ -0,0 +1,156 @@
+# frozen_string_literal: true
+$:.unshift File.expand_path("..", __FILE__)
+$:.unshift File.expand_path("../../lib", __FILE__)
+
+require "bundler/psyched_yaml"
+require "fileutils"
+require "uri"
+require "digest/sha1"
+require File.expand_path("../support/path.rb", __FILE__)
+
+begin
+ require "rubygems"
+ spec = Gem::Specification.load(Spec::Path.gemspec.to_s)
+ rspec = spec.dependencies.find {|d| d.name == "rspec" }
+ gem "rspec", rspec.requirement.to_s
+ require "rspec"
+rescue LoadError
+ abort "Run rake spec:deps to install development dependencies"
+end
+
+if File.expand_path(__FILE__) =~ %r{([^\w/\.])}
+ abort "The bundler specs cannot be run from a path that contains special characters (particularly #{$1.inspect})"
+end
+
+require "bundler"
+
+# Require the correct version of popen for the current platform
+if RbConfig::CONFIG["host_os"] =~ /mingw|mswin/
+ begin
+ require "win32/open3"
+ rescue LoadError
+ abort "Run `gem install win32-open3` to be able to run specs"
+ end
+else
+ require "open3"
+end
+
+Dir["#{File.expand_path("../support", __FILE__)}/*.rb"].each do |file|
+ require file unless file.end_with?("hax.rb")
+end
+
+$debug = false
+
+Spec::Rubygems.setup
+FileUtils.rm_rf(Spec::Path.gem_repo1)
+ENV["RUBYOPT"] = "#{ENV["RUBYOPT"]} -r#{Spec::Path.spec_dir}/support/hax.rb"
+ENV["BUNDLE_SPEC_RUN"] = "true"
+ENV["BUNDLE_PLUGINS"] = "true"
+
+# Don't wrap output in tests
+ENV["THOR_COLUMNS"] = "10000"
+
+Spec::CodeClimate.setup
+
+module Gem
+ def self.ruby= ruby
+ @ruby = ruby
+ end
+end
+
+RSpec.configure do |config|
+ config.include Spec::Builders
+ config.include Spec::Helpers
+ config.include Spec::Indexes
+ config.include Spec::Matchers
+ config.include Spec::Path
+ config.include Spec::Rubygems
+ config.include Spec::Platforms
+ config.include Spec::Sudo
+ config.include Spec::Permissions
+
+ # Enable flags like --only-failures and --next-failure
+ config.example_status_persistence_file_path = ".rspec_status"
+
+ config.disable_monkey_patching!
+
+ # Since failures cause us to keep a bunch of long strings in memory, stop
+ # once we have a large number of failures (indicative of core pieces of
+ # bundler being broken) so that running the full test suite doesn't take
+ # forever due to memory constraints
+ config.fail_fast ||= 25
+
+ if ENV["BUNDLER_SUDO_TESTS"] && Spec::Sudo.present?
+ config.filter_run :sudo => true
+ else
+ config.filter_run_excluding :sudo => true
+ end
+
+ if ENV["BUNDLER_REALWORLD_TESTS"]
+ config.filter_run :realworld => true
+ else
+ config.filter_run_excluding :realworld => true
+ end
+
+ git_version = Bundler::Source::Git::GitProxy.new(nil, nil, nil).version
+
+ config.filter_run_excluding :ruby => LessThanProc.with(RUBY_VERSION)
+ config.filter_run_excluding :rubygems => LessThanProc.with(Gem::VERSION)
+ config.filter_run_excluding :git => LessThanProc.with(git_version)
+ config.filter_run_excluding :rubygems_master => (ENV["RGV"] != "master")
+ config.filter_run_excluding :ruby_repo => !!(ENV["BUNDLE_RUBY"] && ENV["BUNDLE_GEM"])
+
+ config.filter_run_when_matching :focus unless ENV["CI"]
+
+ original_wd = Dir.pwd
+ original_env = ENV.to_hash
+
+ config.expect_with :rspec do |c|
+ c.syntax = :expect
+ end
+
+ config.before :suite do
+ @orig_ruby = if ENV['BUNDLE_RUBY']
+ ruby = Gem.ruby
+ Gem.ruby = ENV['BUNDLE_RUBY']
+ ruby
+ end
+ end
+
+ config.before :all do
+ build_repo1
+ # HACK: necessary until rspec-mocks > 3.5.0 is used
+ # see https://github.com/bundler/bundler/pull/5363#issuecomment-278089256
+ if RUBY_VERSION < "1.9"
+ FileUtils.module_eval do
+ alias_method :mkpath, :mkdir_p
+ module_function :mkpath
+ end
+ end
+ end
+
+ config.before :each do
+ reset!
+ system_gems []
+ in_app_root
+ @all_output = String.new
+ end
+
+ config.after :each do |example|
+ @all_output.strip!
+ if example.exception && !@all_output.empty?
+ warn @all_output unless config.formatters.grep(RSpec::Core::Formatters::DocumentationFormatter).empty?
+ message = example.exception.message + "\n\nCommands:\n#{@all_output}"
+ (class << example.exception; self; end).send(:define_method, :message) do
+ message
+ end
+ end
+
+ Dir.chdir(original_wd)
+ ENV.replace(original_env)
+ end
+
+ config.after :suite do
+ Gem.ruby = @orig_ruby
+ end
+end