153 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "testing_env"
 | |
| require "requirement"
 | |
| 
 | |
| class RequirementTests < Homebrew::TestCase
 | |
|   class TestRequirement < Requirement; end
 | |
| 
 | |
|   def test_accepts_single_tag
 | |
|     dep = Requirement.new(%w[bar])
 | |
|     assert_equal %w[bar], dep.tags
 | |
|   end
 | |
| 
 | |
|   def test_accepts_multiple_tags
 | |
|     dep = Requirement.new(%w[bar baz])
 | |
|     assert_equal %w[bar baz].sort, dep.tags.sort
 | |
|   end
 | |
| 
 | |
|   def test_option_names
 | |
|     dep = TestRequirement.new
 | |
|     assert_equal %w[test], dep.option_names
 | |
|   end
 | |
| 
 | |
|   def test_preserves_symbol_tags
 | |
|     dep = Requirement.new([:build])
 | |
|     assert_equal [:build], dep.tags
 | |
|   end
 | |
| 
 | |
|   def test_accepts_symbol_and_string_tags
 | |
|     dep = Requirement.new([:build, "bar"])
 | |
|     assert_equal [:build, "bar"], dep.tags
 | |
|   end
 | |
| 
 | |
|   def test_dsl_fatal
 | |
|     req = Class.new(Requirement) { fatal true }.new
 | |
|     assert_predicate req, :fatal?
 | |
|   end
 | |
| 
 | |
|   def test_satisfy_true
 | |
|     req = Class.new(Requirement) do
 | |
|       satisfy(build_env: false) { true }
 | |
|     end.new
 | |
|     assert_predicate req, :satisfied?
 | |
|   end
 | |
| 
 | |
|   def test_satisfy_false
 | |
|     req = Class.new(Requirement) do
 | |
|       satisfy(build_env: false) { false }
 | |
|     end.new
 | |
|     refute_predicate req, :satisfied?
 | |
|   end
 | |
| 
 | |
|   def test_satisfy_with_boolean
 | |
|     req = Class.new(Requirement) do
 | |
|       satisfy true
 | |
|     end.new
 | |
|     assert_predicate req, :satisfied?
 | |
|   end
 | |
| 
 | |
|   def test_satisfy_sets_up_build_env_by_default
 | |
|     req = Class.new(Requirement) do
 | |
|       satisfy { true }
 | |
|     end.new
 | |
| 
 | |
|     ENV.expects(:with_build_environment).yields.returns(true)
 | |
| 
 | |
|     assert_predicate req, :satisfied?
 | |
|   end
 | |
| 
 | |
|   def test_satisfy_build_env_can_be_disabled
 | |
|     req = Class.new(Requirement) do
 | |
|       satisfy(build_env: false) { true }
 | |
|     end.new
 | |
| 
 | |
|     ENV.expects(:with_build_environment).never
 | |
| 
 | |
|     assert_predicate req, :satisfied?
 | |
|   end
 | |
| 
 | |
|   def test_infers_path_from_satisfy_result
 | |
|     which_path = Pathname.new("/foo/bar/baz")
 | |
|     req = Class.new(Requirement) do
 | |
|       satisfy { which_path }
 | |
|     end.new
 | |
| 
 | |
|     ENV.expects(:with_build_environment).yields.returns(which_path)
 | |
|     ENV.expects(:append_path).with("PATH", which_path.parent)
 | |
| 
 | |
|     req.satisfied?
 | |
|     req.modify_build_environment
 | |
|   end
 | |
| 
 | |
|   def test_dsl_build
 | |
|     req = Class.new(Requirement) { build true }.new
 | |
|     assert_predicate req, :build?
 | |
|   end
 | |
| 
 | |
|   def test_infer_name_from_class
 | |
|     const = :FooRequirement
 | |
|     klass = self.class
 | |
| 
 | |
|     klass.const_set(const, Class.new(Requirement))
 | |
| 
 | |
|     begin
 | |
|       assert_equal "foo", klass.const_get(const).new.name
 | |
|     ensure
 | |
|       klass.send(:remove_const, const)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def test_dsl_default_formula
 | |
|     req = Class.new(Requirement) { default_formula "foo" }.new
 | |
|     assert_predicate req, :default_formula?
 | |
|   end
 | |
| 
 | |
|   def test_to_dependency
 | |
|     req = Class.new(Requirement) { default_formula "foo" }.new
 | |
|     assert_equal Dependency.new("foo"), req.to_dependency
 | |
|   end
 | |
| 
 | |
|   def test_to_dependency_calls_requirement_modify_build_environment
 | |
|     error = Class.new(StandardError)
 | |
| 
 | |
|     req = Class.new(Requirement) do
 | |
|       default_formula "foo"
 | |
|       satisfy { true }
 | |
|       env { raise error }
 | |
|     end.new
 | |
| 
 | |
|     assert_raises(error) do
 | |
|       req.to_dependency.modify_build_environment
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def test_modify_build_environment_without_env_proc
 | |
|     assert_nil Class.new(Requirement).new.modify_build_environment
 | |
|   end
 | |
| 
 | |
|   def test_eql
 | |
|     a = Requirement.new
 | |
|     b = Requirement.new
 | |
|     assert_equal a, b
 | |
|     assert_eql a, b
 | |
|     assert_equal a.hash, b.hash
 | |
|   end
 | |
| 
 | |
|   def test_not_eql
 | |
|     a = Requirement.new([:optional])
 | |
|     b = Requirement.new
 | |
|     refute_equal a, b
 | |
|     refute_eql a, b
 | |
|     refute_equal a.hash, b.hash
 | |
|   end
 | |
| end
 | 
