summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Rodríguez <deivid.rodriguez@riseup.net>2019-05-07 23:56:16 +0200
committerDavid Rodríguez <deivid.rodriguez@riseup.net>2019-05-16 15:44:53 -0400
commitd5729d251b54d7272fd1e0d675c37b7ac5618a35 (patch)
tree211709203dde6d3fc932db5d344347fd2fc5ec49
parent97c8e428318c6dab46ccef5c00d4c096d31d41fe (diff)
downloadbundler-better_test_specific_file_searching.tar.gz
Previous approach for not walking further up from test folderbetter_test_specific_file_searching
I tried monkeypatching the gemfile finder methods in hax.rb, but that resulted in loading parts of bundler too early, and getting redefinition warnings when loading them again from exe/bundle, resulting in actual errors in some cases. The fix for that required eagerly loading the monkeypatched parts of bundler, but that involves changing lib just for the sake of making existing tests pass, and that's what the original changes intend to avoid. So, I'm just reverting to the previous approach of setting an environment variable just for testing and check that. Reverts 11597fef24274bf1542384512faed697d7f41e3b.
-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 }