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
|
# frozen_string_literal: true
RSpec.describe "bundle console", bundler: "< 3", readline: true do
before :each do
build_repo2 do
# A minimal fake pry console
build_gem "pry" do |s|
s.write "lib/pry.rb", <<-RUBY
class Pry
class << self
def toplevel_binding
unless defined?(@toplevel_binding) && @toplevel_binding
TOPLEVEL_BINDING.eval %{
def self.__pry__; binding; end
Pry.instance_variable_set(:@toplevel_binding, __pry__)
class << self; undef __pry__; end
}
end
@toplevel_binding.eval('private')
@toplevel_binding
end
def __pry__
while line = gets
begin
puts eval(line, toplevel_binding).inspect.sub(/^"(.*)"$/, '=> \\1')
rescue Exception => e
puts "\#{e.class}: \#{e.message}"
puts e.backtrace.first
end
end
end
alias start __pry__
end
end
RUBY
end
end
install_gemfile <<-G
source "https://gem.repo2"
gem "myrack"
gem "activesupport", :group => :test
gem "myrack_middleware", :group => :development
G
end
it "starts IRB with the default group loaded" do
bundle "console" do |input, _, _|
input.puts("puts MYRACK")
input.puts("exit")
end
expect(out).to include("0.9.1")
end
it "uses IRB as default console" do
bundle "console" do |input, _, _|
input.puts("__FILE__")
input.puts("exit")
end
expect(out).to include("(irb)")
end
it "starts another REPL if configured as such" do
install_gemfile <<-G
source "https://gem.repo2"
gem "pry"
G
bundle "config set console pry"
bundle "console" do |input, _, _|
input.puts("__method__")
input.puts("exit")
end
expect(out).to include(":__pry__")
end
it "falls back to IRB if the other REPL isn't available" do
bundle "config set console pry"
# make sure pry isn't there
bundle "console" do |input, _, _|
input.puts("__FILE__")
input.puts("exit")
end
expect(out).to include("(irb)")
end
it "doesn't load any other groups" do
bundle "console" do |input, _, _|
input.puts("puts ACTIVESUPPORT")
input.puts("exit")
end
expect(out).to include("NameError")
end
describe "when given a group" do
it "loads the given group" do
bundle "console test" do |input, _, _|
input.puts("puts ACTIVESUPPORT")
input.puts("exit")
end
expect(out).to include("2.3.5")
end
it "loads the default group" do
bundle "console test" do |input, _, _|
input.puts("puts MYRACK")
input.puts("exit")
end
expect(out).to include("0.9.1")
end
it "doesn't load other groups" do
bundle "console test" do |input, _, _|
input.puts("puts MYRACK_MIDDLEWARE")
input.puts("exit")
end
expect(out).to include("NameError")
end
end
it "performs an automatic bundle install" do
gemfile <<-G
source "https://gem.repo2"
gem "myrack"
gem "activesupport", :group => :test
gem "myrack_middleware", :group => :development
gem "foo"
G
bundle "config set auto_install 1"
bundle :console do |input, _, _|
input.puts("puts 'hello'")
input.puts("exit")
end
expect(out).to include("Installing foo 1.0")
expect(out).to include("hello")
expect(the_bundle).to include_gems "foo 1.0"
end
end
|