summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBundlerbot <bot@bundler.io>2019-05-16 20:51:24 +0000
committerBundlerbot <bot@bundler.io>2019-05-16 20:51:24 +0000
commit3ec8165eec0a1af8c45ee258d3e7cb61fba875a2 (patch)
tree211709203dde6d3fc932db5d344347fd2fc5ec49
parent97c8e428318c6dab46ccef5c00d4c096d31d41fe (diff)
parentd5729d251b54d7272fd1e0d675c37b7ac5618a35 (diff)
downloadbundler-3ec8165eec0a1af8c45ee258d3e7cb61fba875a2.tar.gz
Merge #7166
7166: Better test specific file searching r=deivid-rodriguez a=deivid-rodriguez ### What was the end-user problem that led to this PR? The problem was that in #7138 I removed some test specific code from lib, but it's not quite working. ### What was your diagnosis of the problem? My diagnosis was that the mocking I used to fix the issue of bundler looking for files outside of bundler's clone doesn't work inside subprocesses, which many of our specs use. That means some specs were currently failing if you have Gemfile's on `.bundle` folders up in the directory hierarchy ascending from your bundler's clone ### What is your fix for the problem, implemented in this PR? My fix is revert to the previous approach of using a test specific environment variable to prevent search up higher than the test directory when running our specs. ### Why did you choose this fix out of the possible options? I initially tried to monkeypatch the gemfile finding helpers only inside specs, but that caused load order issues (I monkeypatched the helpers insde `support/hax.rb`, that caused the monkeypatched lib code to be loaded _before_ the rest of `bundler`, which caused issues in some specs). Overall, the old approach is the only one that works without issues, so I'm reverting to it, at least for now. Co-authored-by: David Rodríguez <deivid.rodriguez@riseup.net>
-rw-r--r--lib/bundler/shared_helpers.rb13
-rw-r--r--spec/bundler/cli_spec.rb1
-rw-r--r--spec/bundler/settings_spec.rb1
-rw-r--r--spec/bundler/shared_helpers_spec.rb1
-rw-r--r--spec/commands/check_spec.rb1
-rw-r--r--spec/commands/config_spec.rb4
-rw-r--r--spec/other/cli_dispatch_spec.rb2
-rw-r--r--spec/runtime/gem_tasks_spec.rb2
-rw-r--r--spec/runtime/load_spec.rb14
-rw-r--r--spec/spec_helper.rb1
-rw-r--r--spec/support/helpers.rb6
11 files changed, 30 insertions, 16 deletions
diff --git a/lib/bundler/shared_helpers.rb b/lib/bundler/shared_helpers.rb
index da2a384d29..d259f20e6b 100644
--- a/lib/bundler/shared_helpers.rb
+++ b/lib/bundler/shared_helpers.rb
@@ -253,6 +253,19 @@ module Bundler
current = File.expand_path(SharedHelpers.pwd).untaint
until !File.directory?(current) || current == previous
+ if ENV["BUNDLE_SPEC_RUN"]
+ # avoid stepping above the tmp directory when testing
+ gemspec = if ENV["BUNDLE_RUBY"] && ENV["BUNDLE_GEM"]
+ # for Ruby Core
+ "lib/bundler/bundler.gemspec"
+ else
+ "bundler.gemspec"
+ end
+
+ # avoid stepping above the tmp directory when testing
+ return nil if File.file?(File.join(current, gemspec))
+ end
+
names.each do |name|
filename = File.join(current, name)
yield filename
diff --git a/spec/bundler/cli_spec.rb b/spec/bundler/cli_spec.rb
index eca911cc15..2e12fbfc6b 100644
--- a/spec/bundler/cli_spec.rb
+++ b/spec/bundler/cli_spec.rb
@@ -141,7 +141,6 @@ To install the latest version, run `gem install bundler`
bundle! "config get --parseable foo"
expect(last_command.stdboth).to eq ""
- ensure_no_gemfile
bundle "platform --ruby"
expect(last_command.stdboth).to eq "Could not locate Gemfile"
end
diff --git a/spec/bundler/settings_spec.rb b/spec/bundler/settings_spec.rb
index f105770c17..339428eb48 100644
--- a/spec/bundler/settings_spec.rb
+++ b/spec/bundler/settings_spec.rb
@@ -10,7 +10,6 @@ RSpec.describe Bundler::Settings do
subject(:settings) { described_class.new(nil) }
it "raises a GemfileNotFound error with explanation" do
- ensure_no_gemfile
expect { subject.set_local("foo", "bar") }.
to raise_error(Bundler::GemfileNotFound, "Could not locate Gemfile")
end
diff --git a/spec/bundler/shared_helpers_spec.rb b/spec/bundler/shared_helpers_spec.rb
index a9bf67b0d5..8e82d1b910 100644
--- a/spec/bundler/shared_helpers_spec.rb
+++ b/spec/bundler/shared_helpers_spec.rb
@@ -25,7 +25,6 @@ RSpec.describe Bundler::SharedHelpers do
before { ENV["BUNDLE_GEMFILE"] = nil }
it "raises a GemfileNotFound error" do
- ensure_no_gemfile
expect { subject.default_gemfile }.to raise_error(
Bundler::GemfileNotFound, "Could not locate Gemfile"
)
diff --git a/spec/commands/check_spec.rb b/spec/commands/check_spec.rb
index d724ea79fa..cf88736612 100644
--- a/spec/commands/check_spec.rb
+++ b/spec/commands/check_spec.rb
@@ -199,7 +199,6 @@ RSpec.describe "bundle check" do
end
it "outputs an error when the default Gemfile is not found" do
- ensure_no_gemfile
bundle :check
expect(exitstatus).to eq(10) if exitstatus
expect(err).to include("Could not locate Gemfile")
diff --git a/spec/commands/config_spec.rb b/spec/commands/config_spec.rb
index abe31b1955..40fab95803 100644
--- a/spec/commands/config_spec.rb
+++ b/spec/commands/config_spec.rb
@@ -391,10 +391,10 @@ E
describe "subcommands" do
it "list", :ruby_repo do
bundle! "config list"
- expect(out).to eq "Settings are listed in order of priority. The top value will be used."
+ expect(out).to eq "Settings are listed in order of priority. The top value will be used.\nspec_run\nSet via BUNDLE_SPEC_RUN: \"true\""
bundle! "config list", :parseable => true
- expect(out).to be_empty
+ expect(out).to eq "spec_run=true"
end
it "get" do
diff --git a/spec/other/cli_dispatch_spec.rb b/spec/other/cli_dispatch_spec.rb
index 1d4489acc3..548539ac89 100644
--- a/spec/other/cli_dispatch_spec.rb
+++ b/spec/other/cli_dispatch_spec.rb
@@ -2,14 +2,12 @@
RSpec.describe "bundle command names" do
it "work when given fully" do
- ensure_no_gemfile
bundle "install"
expect(err).to eq("Could not locate Gemfile")
expect(last_command.stdboth).not_to include("Ambiguous command")
end
it "work when not ambiguous" do
- ensure_no_gemfile
bundle "ins"
expect(err).to eq("Could not locate Gemfile")
expect(last_command.stdboth).not_to include("Ambiguous command")
diff --git a/spec/runtime/gem_tasks_spec.rb b/spec/runtime/gem_tasks_spec.rb
index f0f48a01ac..eb9db56ead 100644
--- a/spec/runtime/gem_tasks_spec.rb
+++ b/spec/runtime/gem_tasks_spec.rb
@@ -19,7 +19,7 @@ RSpec.describe "require 'bundler/gem_tasks'" do
it "includes the relevant tasks" do
with_gem_path_as(Spec::Path.base_system_gems.to_s) do
- sys_exec "#{rake} -T"
+ sys_exec "#{rake} -T", "RUBYOPT" => "-I#{bundler_path}"
end
expect(err).to eq("")
diff --git a/spec/runtime/load_spec.rb b/spec/runtime/load_spec.rb
index 05ed076b6d..b74dbde3f6 100644
--- a/spec/runtime/load_spec.rb
+++ b/spec/runtime/load_spec.rb
@@ -45,7 +45,6 @@ RSpec.describe "Bundler.load" do
describe "without a gemfile" do
it "raises an exception if the default gemfile is not found" do
- ensure_no_gemfile
expect do
Bundler.load
end.to raise_error(Bundler::GemfileNotFound, /could not locate gemfile/i)
@@ -57,6 +56,19 @@ RSpec.describe "Bundler.load" do
Bundler.load
end.to raise_error(Bundler::GemfileNotFound, /omg\.rb/)
end
+
+ it "does not find a Gemfile above the testing directory" do
+ bundler_gemfile = tmp.join("../Gemfile")
+ unless File.exist?(bundler_gemfile)
+ FileUtils.touch(bundler_gemfile)
+ @remove_bundler_gemfile = true
+ end
+ begin
+ expect { Bundler.load }.to raise_error(Bundler::GemfileNotFound)
+ ensure
+ bundler_gemfile.rmtree if @remove_bundler_gemfile
+ end
+ end
end
describe "when called twice" do
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index ba7b362b5b..35cf8bfefb 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -25,6 +25,7 @@ $debug = false
Spec::Manpages.setup unless Gem.win_platform?
Spec::Rubygems.setup
ENV["RUBYOPT"] = "#{ENV["RUBYOPT"]} -r#{Spec::Path.spec_dir}/support/hax.rb"
+ENV["BUNDLE_SPEC_RUN"] = "true"
# Don't wrap output in tests
ENV["THOR_COLUMNS"] = "10000"
diff --git a/spec/support/helpers.rb b/spec/support/helpers.rb
index 0567b26c01..478fe60822 100644
--- a/spec/support/helpers.rb
+++ b/spec/support/helpers.rb
@@ -313,12 +313,6 @@ module Spec
bundle :lock, opts
end
- # Makes tests that require absence of any Gemfiles pass, even if the running
- # system has a Gemfile further up from the specs folder
- def ensure_no_gemfile
- allow(Bundler::SharedHelpers).to receive(:search_up).and_return(nil)
- end
-
def install_gems(*gems)
options = gems.last.is_a?(Hash) ? gems.pop : {}
gem_repo = options.fetch(:gem_repo) { gem_repo1 }