| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  | require 'testing_env' | 
					
						
							|  |  |  | require 'keg' | 
					
						
							|  |  |  | require 'stringio' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LinkTests < Test::Unit::TestCase | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |   include FileUtils | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |   def setup | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:18 -05:00
										 |  |  |     @keg = HOMEBREW_CELLAR/"foo/1.0" | 
					
						
							|  |  |  |     @keg.mkpath | 
					
						
							|  |  |  |     (@keg/"bin").mkpath | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     %w{hiworld helloworld goodbye_cruel_world}.each do |file| | 
					
						
							|  |  |  |       touch @keg/"bin/#{file}" | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:18 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @keg = Keg.new(@keg) | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     @mode = OpenStruct.new | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |     @old_stdout = $stdout | 
					
						
							|  |  |  |     $stdout = StringIO.new | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     mkpath HOMEBREW_PREFIX/"bin" | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:18 -05:00
										 |  |  |     mkpath HOMEBREW_PREFIX/"lib" | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_linking_keg | 
					
						
							| 
									
										
										
										
											2012-10-23 17:09:57 -05:00
										 |  |  |     assert_equal 3, @keg.link | 
					
						
							| 
									
										
										
										
											2014-03-27 09:59:54 -05:00
										 |  |  |     (HOMEBREW_PREFIX/"bin").children.each { |c| assert c.readlink.relative? } | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_unlinking_keg | 
					
						
							|  |  |  |     @keg.link | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:19 -05:00
										 |  |  |     assert_equal 4, @keg.unlink | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_link_dry_run | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     @mode.dry_run = true | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     assert_equal 0, @keg.link(@mode) | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |     assert !@keg.linked? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-23 17:09:57 -05:00
										 |  |  |     ['hiworld', 'helloworld', 'goodbye_cruel_world'].each do |file| | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:18 -05:00
										 |  |  |       assert_match "#{HOMEBREW_PREFIX}/bin/#{file}", $stdout.string | 
					
						
							| 
									
										
										
										
											2012-10-23 17:09:57 -05:00
										 |  |  |     end | 
					
						
							|  |  |  |     assert_equal 3, $stdout.string.lines.count | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_linking_fails_when_already_linked | 
					
						
							|  |  |  |     @keg.link | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:18 -05:00
										 |  |  |     assert_raise RuntimeError do | 
					
						
							| 
									
										
										
										
											2013-04-01 12:15:29 -05:00
										 |  |  |       shutup { @keg.link } | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_linking_fails_when_files_exist | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     touch HOMEBREW_PREFIX/"bin/helloworld" | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |     assert_raise RuntimeError do | 
					
						
							| 
									
										
										
										
											2013-04-01 12:15:29 -05:00
										 |  |  |       shutup { @keg.link } | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-27 09:35:10 -05:00
										 |  |  |   def test_link_ignores_broken_symlinks_at_target | 
					
						
							| 
									
										
										
										
											2014-03-27 09:59:54 -05:00
										 |  |  |     dst = HOMEBREW_PREFIX/"bin/helloworld" | 
					
						
							|  |  |  |     src = @keg/"bin/helloworld" | 
					
						
							|  |  |  |     ln_s "/some/nonexistent/path", dst | 
					
						
							| 
									
										
										
										
											2014-03-27 09:35:10 -05:00
										 |  |  |     shutup { @keg.link } | 
					
						
							| 
									
										
										
										
											2014-03-27 09:59:54 -05:00
										 |  |  |     assert_equal src.relative_path_from(dst.dirname), dst.readlink | 
					
						
							| 
									
										
										
										
											2014-03-27 09:35:10 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |   def test_link_overwrite | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     touch HOMEBREW_PREFIX/"bin/helloworld" | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     @mode.overwrite = true | 
					
						
							|  |  |  |     assert_equal 3, @keg.link(@mode) | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-27 15:21:17 -07:00
										 |  |  |   def test_link_overwrite_broken_symlinks | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     cd HOMEBREW_PREFIX/"bin" do | 
					
						
							|  |  |  |       ln_s "nowhere", "helloworld" | 
					
						
							| 
									
										
										
										
											2013-04-27 15:21:17 -07:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     @mode.overwrite = true | 
					
						
							|  |  |  |     assert_equal 3, @keg.link(@mode) | 
					
						
							| 
									
										
										
										
											2013-04-27 15:21:17 -07:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |   def test_link_overwrite_dryrun | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     touch HOMEBREW_PREFIX/"bin/helloworld" | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     @mode.overwrite = true | 
					
						
							|  |  |  |     @mode.dry_run = true | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     assert_equal 0, @keg.link(@mode) | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |     assert !@keg.linked? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:18 -05:00
										 |  |  |     assert_equal "#{HOMEBREW_PREFIX}/bin/helloworld\n", $stdout.string | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:19 -05:00
										 |  |  |   def test_unlink_prunes_empty_toplevel_directories | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:18 -05:00
										 |  |  |     mkpath HOMEBREW_PREFIX/"lib/foo/bar" | 
					
						
							|  |  |  |     mkpath @keg/"lib/foo/bar" | 
					
						
							|  |  |  |     touch @keg/"lib/foo/bar/file1" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @keg.unlink | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:19 -05:00
										 |  |  |     assert !File.directory?(HOMEBREW_PREFIX/"lib/foo") | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:18 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:19 -05:00
										 |  |  |   def test_unlink_ignores_DS_Store_when_pruning_empty_dirs | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:18 -05:00
										 |  |  |     mkpath HOMEBREW_PREFIX/"lib/foo/bar" | 
					
						
							|  |  |  |     touch HOMEBREW_PREFIX/"lib/foo/.DS_Store" | 
					
						
							|  |  |  |     mkpath @keg/"lib/foo/bar" | 
					
						
							|  |  |  |     touch @keg/"lib/foo/bar/file1" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @keg.unlink | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:19 -05:00
										 |  |  |     assert !File.directory?(HOMEBREW_PREFIX/"lib/foo") | 
					
						
							|  |  |  |     assert !File.exist?(HOMEBREW_PREFIX/"lib/foo/.DS_Store") | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:18 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |   def teardown | 
					
						
							|  |  |  |     @keg.unlink | 
					
						
							|  |  |  |     @keg.rmtree | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $stdout = @old_stdout | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-14 16:27:59 -05:00
										 |  |  |     rmtree HOMEBREW_PREFIX/"bin" | 
					
						
							| 
									
										
										
										
											2013-08-09 11:29:18 -05:00
										 |  |  |     rmtree HOMEBREW_PREFIX/"lib" | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | end |