1require 'rubygems/test_case'
2require 'rubygems/commands/dependency_command'
3
4class TestGemCommandsDependencyCommand < Gem::TestCase
5
6  def setup
7    super
8
9    @cmd = Gem::Commands::DependencyCommand.new
10    @cmd.options[:domain] = :local
11
12    util_setup_fake_fetcher true
13  end
14
15  def test_execute
16    quick_gem 'foo' do |gem|
17      gem.add_dependency 'bar', '> 1'
18      gem.add_dependency 'baz', '> 1'
19    end
20
21    @cmd.options[:args] = %w[foo]
22
23    use_ui @ui do
24      @cmd.execute
25    end
26
27    assert_equal "Gem foo-2\n  bar (> 1)\n  baz (> 1)\n\n",
28                 @ui.output
29    assert_equal '', @ui.error
30  end
31
32  def test_execute_no_args
33    @cmd.options[:args] = []
34
35    use_ui @ui do
36      @cmd.execute
37    end
38
39    expected = <<-EOF
40Gem a-1
41
42Gem a-2.a
43
44Gem a-2
45
46Gem a-3.a
47
48Gem a_evil-9
49
50Gem b-2
51
52Gem c-1.2
53
54Gem dep_x-1
55  x (>= 1)
56
57Gem pl-1-x86-linux
58
59Gem x-1
60
61    EOF
62
63    assert_equal expected, @ui.output
64    assert_equal '', @ui.error
65  end
66
67  def test_execute_no_match
68    @cmd.options[:args] = %w[foo]
69
70    assert_raises Gem::MockGemUi::TermError do
71      use_ui @ui do
72        @cmd.execute
73      end
74    end
75
76    assert_equal "No gems found matching foo (>= 0)\n", @ui.output
77    assert_equal '', @ui.error
78  end
79
80  def test_execute_pipe_format
81    quick_spec 'foo' do |gem|
82      gem.add_dependency 'bar', '> 1'
83    end
84
85    @cmd.options[:args] = %w[foo]
86    @cmd.options[:pipe_format] = true
87
88    use_ui @ui do
89      @cmd.execute
90    end
91
92    assert_equal "bar --version '> 1'\n", @ui.output
93    assert_equal '', @ui.error
94  end
95
96  def test_execute_regexp
97    @cmd.options[:args] = %w[/[ab]/]
98
99    use_ui @ui do
100      @cmd.execute
101    end
102
103    expected = <<-EOF
104Gem a-1
105
106Gem a-2.a
107
108Gem a-2
109
110Gem a-3.a
111
112Gem a_evil-9
113
114Gem b-2
115
116    EOF
117
118    assert_equal expected, @ui.output
119    assert_equal '', @ui.error
120  end
121
122  def test_execute_reverse
123    # FIX: this shouldn't need to write out, but fails if you switch it
124    quick_gem 'foo' do |gem|
125      gem.add_dependency 'bar', '> 1'
126    end
127
128    quick_gem 'baz' do |gem|
129      gem.add_dependency 'foo'
130    end
131
132    @cmd.options[:args] = %w[foo]
133    @cmd.options[:reverse_dependencies] = true
134
135    use_ui @ui do
136      @cmd.execute
137    end
138
139    expected = <<-EOF
140Gem foo-2
141  bar (> 1)
142  Used by
143    baz-2 (foo (>= 0))
144
145    EOF
146
147    assert_equal expected, @ui.output
148    assert_equal '', @ui.error
149  end
150
151  def test_execute_reverse_remote
152    @cmd.options[:args] = %w[foo]
153    @cmd.options[:reverse_dependencies] = true
154    @cmd.options[:domain] = :remote
155
156    assert_raises Gem::MockGemUi::TermError do
157      use_ui @ui do
158        @cmd.execute
159      end
160    end
161
162    expected = <<-EOF
163ERROR:  Only reverse dependencies for local gems are supported.
164    EOF
165
166    assert_equal '', @ui.output
167    assert_equal expected, @ui.error
168  end
169
170  def test_execute_remote
171    foo = quick_gem 'foo' do |gem|
172      gem.add_dependency 'bar', '> 1'
173    end
174
175    @fetcher = Gem::FakeFetcher.new
176    Gem::RemoteFetcher.fetcher = @fetcher
177
178    util_setup_spec_fetcher foo
179
180    FileUtils.rm File.join(@gemhome, 'specifications', foo.spec_name)
181
182    @cmd.options[:args] = %w[foo]
183    @cmd.options[:domain] = :remote
184
185    use_ui @ui do
186      @cmd.execute
187    end
188
189    assert_equal "Gem foo-2\n  bar (> 1)\n\n", @ui.output
190    assert_equal '', @ui.error
191  end
192
193  def test_execute_remote_version
194    @fetcher = Gem::FakeFetcher.new
195    Gem::RemoteFetcher.fetcher = @fetcher
196
197    util_setup_spec_fetcher @a1, @a2
198
199    @cmd.options[:args] = %w[a]
200    @cmd.options[:domain] = :remote
201    @cmd.options[:version] = req '= 1'
202
203    use_ui @ui do
204      @cmd.execute
205    end
206
207    assert_equal "Gem a-1\n\n", @ui.output
208    assert_equal '', @ui.error
209  end
210
211  def test_execute_prerelease
212    @fetcher = Gem::FakeFetcher.new
213    Gem::RemoteFetcher.fetcher = @fetcher
214
215    util_clear_gems
216    util_setup_spec_fetcher @a2_pre
217
218    @cmd.options[:args] = %w[a]
219    @cmd.options[:domain] = :remote
220    @cmd.options[:prerelease] = true
221
222    use_ui @ui do
223      @cmd.execute
224    end
225
226    assert_equal "Gem a-2.a\n\n", @ui.output
227    assert_equal '', @ui.error
228  end
229
230end
231
232