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 "#{file_uri_for(gem_repo2)}"
gem "rack"
gem "activesupport", :group => :test
gem "rack_middleware", :group => :development
G
end
it "starts IRB with the default group loaded" do
bundle "console" do |input, _, _|
input.puts("puts RACK")
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("__method__")
input.puts("exit")
end
expect(out).to include(":irb_binding")
end
it "starts another REPL if configured as such" do
install_gemfile <<-G
source "#{file_uri_for(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("__method__")
input.puts("exit")
end
expect(out).to include(":irb_binding")
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 RACK")
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 RACK_MIDDLEWARE")
input.puts("exit")
end
expect(out).to include("NameError")
end
end
it "performs an automatic bundle install" do
gemfile <<-G
source "#{file_uri_for(gem_repo2)}"
gem "rack"
gem "activesupport", :group => :test
gem "rack_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
|