105 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| 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
 | |
| 
 | |
|   alias safe_system `
 | |
|   
 | |
|   def expectations_met?
 | |
|     @expect.keys.sort == @called.sort
 | |
|   end
 | |
|   
 | |
|   def inspect
 | |
|     "#<#{self.class.name} #{object_id}>"
 | |
|   end
 | |
| end
 | |
| 
 | |
| 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
 | |
|       updater.in_prefix_expect(RefreshBrew::INIT_COMMAND)
 | |
|       updater.in_prefix_expect(RefreshBrew::UPDATE_COMMAND, "Already up-to-date.\n")
 | |
|       
 | |
|       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
 | |
|       updater.in_prefix_expect(RefreshBrew::INIT_COMMAND)
 | |
|       output = fixture('update_git_pull_output_without_formulae_changes')
 | |
|       updater.in_prefix_expect(RefreshBrew::UPDATE_COMMAND, output)
 | |
|       
 | |
|       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
 | |
|       updater.in_prefix_expect(RefreshBrew::INIT_COMMAND)
 | |
|       output = fixture('update_git_pull_output_with_formulae_changes')
 | |
|       updater.in_prefix_expect(RefreshBrew::UPDATE_COMMAND, output)
 | |
|       
 | |
|       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
 | |
|       updater.in_prefix_expect(RefreshBrew::REVISION_COMMAND, 'the-revision-hash')
 | |
|       assert_equal 'the-revision-hash', updater.current_revision
 | |
|     end
 | |
|   end
 | |
| end
 | 
