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