diff options
author | Misty De Meo <mistydemeo@github.com> | 2016-07-05 15:15:28 +1000 |
---|---|---|
committer | Misty De Meo <mistydemeo@github.com> | 2016-08-02 11:21:16 +1000 |
commit | c1f6dd96f899b97ae1a3972cef7e453776df1dd6 (patch) | |
tree | 38fe09b2db9905128ed1ff66d0ea6bcb7c20b3d7 /spec/commands/doctor_spec.rb | |
parent | 7f82490b82680c1786bd0af7f014d7ddab07629f (diff) | |
download | bundler-c1f6dd96f899b97ae1a3972cef7e453776df1dd6.tar.gz |
Add command to diagnose common issues
This new command, doctor, checks for common problems.
Currently, it looks for broken dynamic library links in C
extensions.
It scans all of the specifications in the bundle for .bundle files in C
extensions. If any of the dynamic libraries linked against no longer
exist, bundler will report a message to the console.
Diffstat (limited to 'spec/commands/doctor_spec.rb')
-rw-r--r-- | spec/commands/doctor_spec.rb | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/spec/commands/doctor_spec.rb b/spec/commands/doctor_spec.rb new file mode 100644 index 0000000000..236138a6c8 --- /dev/null +++ b/spec/commands/doctor_spec.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true +require "spec_helper" +require "stringio" +require "bundler/cli" +require "bundler/cli/doctor" + +describe "bundle doctor" do + before(:each) do + @stdout = StringIO.new + + [:error, :warn].each do |method| + allow(Bundler.ui).to receive(method).and_wrap_original do |m, message| + m.call message + @stdout.puts message + end + end + end + + it "exits with no message if the installed gem has no C extensions" do + gemfile <<-G + source "file://#{gem_repo1}" + gem "rack" + G + + bundle :install + Bundler::CLI::Doctor.new({}).run + expect(@stdout.string).to be_empty + end + + it "exits with no message if the installed gem's C extension dylib breakage is fine" do + gemfile <<-G + source "file://#{gem_repo1}" + gem "rack" + G + + bundle :install + doctor = Bundler::CLI::Doctor.new({}) + expect(doctor).to receive(:bundles_for_gem).exactly(2).times.and_return ["/path/to/rack/rack.bundle"] + expect(doctor).to receive(:dylibs).exactly(2).times.and_return ["/usr/lib/libSystem.dylib"] + allow(File).to receive(:exist?).and_call_original + allow(File).to receive(:exist?).with("/usr/lib/libSystem.dylib").and_return(true) + doctor.run + expect(@stdout.string).to be_empty + end + + it "exits with a message if one of the linked libraries is missing" do + gemfile <<-G + source "file://#{gem_repo1}" + gem "rack" + G + + bundle :install + doctor = Bundler::CLI::Doctor.new({}) + expect(doctor).to receive(:bundles_for_gem).exactly(2).times.and_return ["/path/to/rack/rack.bundle"] + expect(doctor).to receive(:dylibs).exactly(2).times.and_return ["/usr/local/opt/icu4c/lib/libicui18n.57.1.dylib"] + allow(File).to receive(:exist?).and_call_original + allow(File).to receive(:exist?).with("/usr/local/opt/icu4c/lib/libicui18n.57.1.dylib").and_return(false) + expect { doctor.run }.to raise_error SystemExit + expect(@stdout.string).to include("libicui18n.57.1.dylib") + end +end |