1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
# frozen_string_literal: true
RSpec.describe "bundle install" do
context "with duplicated gems" do
it "will display a warning" do
install_gemfile <<-G, raise_on_error: false
source "https://gem.repo1"
gem 'rails', '~> 4.0.0'
gem 'rails', '~> 4.0.0'
G
expect(err).to include("more than once")
end
end
context "with --gemfile" do
it "finds the gemfile" do
gemfile bundled_app("NotGemfile"), <<-G
source "https://gem.repo1"
gem 'myrack'
G
bundle :install, gemfile: bundled_app("NotGemfile")
# Specify BUNDLE_GEMFILE for `the_bundle`
# to retrieve the proper Gemfile
ENV["BUNDLE_GEMFILE"] = "NotGemfile"
expect(the_bundle).to include_gems "myrack 1.0.0"
end
end
context "with gemfile set via config" do
before do
gemfile bundled_app("NotGemfile"), <<-G
source "https://gem.repo1"
gem 'myrack'
G
bundle "config set --local gemfile #{bundled_app("NotGemfile")}"
end
it "uses the gemfile to install" do
bundle "install"
bundle "list"
expect(out).to include("myrack (1.0.0)")
end
it "uses the gemfile while in a subdirectory" do
bundled_app("subdir").mkpath
bundle "install", dir: bundled_app("subdir")
bundle "list", dir: bundled_app("subdir")
expect(out).to include("myrack (1.0.0)")
end
end
context "with deprecated features" do
it "reports that lib is an invalid option" do
gemfile <<-G
source "https://gem.repo1"
gem "myrack", :lib => "myrack"
G
bundle :install, raise_on_error: false
expect(err).to match(/You passed :lib as an option for gem 'myrack', but it is invalid/)
end
end
context "when an internal error happens" do
let(:bundler_bug) do
create_file("bundler_bug.rb", <<~RUBY)
require "bundler"
module Bundler
class Dsl
def source(source, *args, &blk)
nil.name
end
end
end
RUBY
bundled_app("bundler_bug.rb").to_s
end
it "shows culprit file and line" do
skip "ruby-core test setup has always \"lib\" in $LOAD_PATH so `require \"bundler\"` always activates the local version rather than using RubyGems gem activation stuff, causing conflicts" if ruby_core?
install_gemfile "source 'https://gem.repo1'", requires: [bundler_bug], artifice: nil, raise_on_error: false
expect(err).to include("bundler_bug.rb:6")
end
end
context "with engine specified in symbol", :jruby_only do
it "does not raise any error parsing Gemfile" do
install_gemfile <<-G
source "https://gem.repo1"
ruby "#{RUBY_VERSION}", :engine => :jruby, :engine_version => "#{RUBY_ENGINE_VERSION}"
G
expect(out).to match(/Bundle complete!/)
end
it "installation succeeds" do
install_gemfile <<-G
source "https://gem.repo1"
ruby "#{RUBY_VERSION}", :engine => :jruby, :engine_version => "#{RUBY_ENGINE_VERSION}"
gem "myrack"
G
expect(the_bundle).to include_gems "myrack 1.0.0"
end
end
context "with a Gemfile containing non-US-ASCII characters" do
it "reads the Gemfile with the UTF-8 encoding by default" do
install_gemfile <<-G
source "https://gem.repo1"
str = "Il était une fois ..."
puts "The source encoding is: " + str.encoding.name
G
expect(out).to include("The source encoding is: UTF-8")
expect(out).not_to include("The source encoding is: ASCII-8BIT")
expect(out).to include("Bundle complete!")
end
it "respects the magic encoding comment" do
# NOTE: This works thanks to #eval interpreting the magic encoding comment
install_gemfile <<-G
# encoding: iso-8859-1
source "https://gem.repo1"
str = "Il #{"\xE9".dup.force_encoding("binary")}tait une fois ..."
puts "The source encoding is: " + str.encoding.name
G
expect(out).to include("The source encoding is: ISO-8859-1")
expect(out).to include("Bundle complete!")
end
end
end
|