| 
									
										
										
										
											2010-02-12 14:56:01 -08:00
										 |  |  | abort if ARGV.include? "--skip-update" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require 'testing_env' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require 'extend/ARGV' # needs to be after test/unit to avoid conflict with OptionsParser | 
					
						
							|  |  |  | ARGV.extend(HomebrewArgvExtension) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require 'formula' | 
					
						
							|  |  |  | require 'utils' | 
					
						
							|  |  |  | require 'update' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RefreshBrewMock < RefreshBrew | 
					
						
							|  |  |  |   def in_prefix_expect(expect, returns = '') | 
					
						
							|  |  |  |     @expect ||= {} | 
					
						
							|  |  |  |     @expect[expect] = returns | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   def `(cmd) | 
					
						
							|  |  |  |     if Dir.pwd == HOMEBREW_PREFIX.to_s and @expect.has_key?(cmd) | 
					
						
							|  |  |  |       (@called ||= []) << cmd | 
					
						
							|  |  |  |       @expect[cmd] | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       raise "#{inspect} Unexpectedly called backticks in pwd `#{HOMEBREW_PREFIX}' and command `#{cmd}'" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-05-08 15:35:06 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |   alias safe_system `
 | 
					
						
							| 
									
										
										
										
											2010-02-12 14:56:01 -08:00
										 |  |  |    | 
					
						
							|  |  |  |   def expectations_met? | 
					
						
							|  |  |  |     @expect.keys.sort == @called.sort | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   def inspect | 
					
						
							|  |  |  |     "#<#{self.class.name} #{object_id}>" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-29 10:41:03 -08:00
										 |  |  | class UpdaterTests < Test::Unit::TestCase | 
					
						
							|  |  |  |   OUTSIDE_PREFIX = '/tmp' | 
					
						
							|  |  |  |   def outside_prefix | 
					
						
							|  |  |  |     Dir.chdir(OUTSIDE_PREFIX) { yield } | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   def fixture(name) | 
					
						
							|  |  |  |     self.class.fixture_data[name] | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   def self.fixture_data | 
					
						
							|  |  |  |     unless @fixture_data | 
					
						
							|  |  |  |       require 'yaml' | 
					
						
							|  |  |  |       @fixture_data = YAML.load_file(Pathname.new(ABS__FILE__).parent.realpath + 'fixtures/updater_fixture.yaml') | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     @fixture_data | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_update_homebrew_without_any_changes | 
					
						
							|  |  |  |     outside_prefix do | 
					
						
							|  |  |  |       updater = RefreshBrewMock.new | 
					
						
							| 
									
										
										
										
											2010-05-08 15:35:06 +10:00
										 |  |  |       updater.in_prefix_expect(RefreshBrew::INIT_COMMAND) | 
					
						
							|  |  |  |       updater.in_prefix_expect(RefreshBrew::UPDATE_COMMAND, "Already up-to-date.\n") | 
					
						
							| 
									
										
										
										
											2010-01-29 10:41:03 -08:00
										 |  |  |        | 
					
						
							|  |  |  |       assert_equal false, updater.update_from_masterbrew! | 
					
						
							|  |  |  |       assert updater.expectations_met? | 
					
						
							|  |  |  |       assert updater.updated_formulae.empty? | 
					
						
							|  |  |  |       assert updater.added_formulae.empty? | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   def test_update_homebrew_without_formulae_changes | 
					
						
							|  |  |  |     outside_prefix do | 
					
						
							|  |  |  |       updater = RefreshBrewMock.new | 
					
						
							| 
									
										
										
										
											2010-05-08 15:35:06 +10:00
										 |  |  |       updater.in_prefix_expect(RefreshBrew::INIT_COMMAND) | 
					
						
							| 
									
										
										
										
											2010-01-29 10:41:03 -08:00
										 |  |  |       output = fixture('update_git_pull_output_without_formulae_changes') | 
					
						
							| 
									
										
										
										
											2010-05-08 15:35:06 +10:00
										 |  |  |       updater.in_prefix_expect(RefreshBrew::UPDATE_COMMAND, output) | 
					
						
							| 
									
										
										
										
											2010-01-29 10:41:03 -08:00
										 |  |  |        | 
					
						
							|  |  |  |       assert_equal true, updater.update_from_masterbrew! | 
					
						
							|  |  |  |       assert !updater.pending_formulae_changes? | 
					
						
							|  |  |  |       assert updater.updated_formulae.empty? | 
					
						
							|  |  |  |       assert updater.added_formulae.empty? | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   def test_update_homebrew_with_formulae_changes | 
					
						
							|  |  |  |     outside_prefix do | 
					
						
							|  |  |  |       updater = RefreshBrewMock.new | 
					
						
							| 
									
										
										
										
											2010-05-08 15:35:06 +10:00
										 |  |  |       updater.in_prefix_expect(RefreshBrew::INIT_COMMAND) | 
					
						
							| 
									
										
										
										
											2010-01-29 10:41:03 -08:00
										 |  |  |       output = fixture('update_git_pull_output_with_formulae_changes') | 
					
						
							| 
									
										
										
										
											2010-05-08 15:35:06 +10:00
										 |  |  |       updater.in_prefix_expect(RefreshBrew::UPDATE_COMMAND, output) | 
					
						
							| 
									
										
										
										
											2010-01-29 10:41:03 -08:00
										 |  |  |        | 
					
						
							|  |  |  |       assert_equal true, updater.update_from_masterbrew! | 
					
						
							|  |  |  |       assert updater.pending_formulae_changes? | 
					
						
							|  |  |  |       assert_equal %w{ xar yajl }, updater.updated_formulae | 
					
						
							|  |  |  |       assert_equal %w{ antiword bash-completion ddrescue dict lua }, updater.added_formulae | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   def test_updater_returns_current_revision | 
					
						
							|  |  |  |     outside_prefix do | 
					
						
							|  |  |  |       updater = RefreshBrewMock.new | 
					
						
							| 
									
										
										
										
											2010-05-08 15:35:06 +10:00
										 |  |  |       updater.in_prefix_expect(RefreshBrew::REVISION_COMMAND, 'the-revision-hash') | 
					
						
							| 
									
										
										
										
											2010-01-29 10:41:03 -08:00
										 |  |  |       assert_equal 'the-revision-hash', updater.current_revision | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |