| 
									
										
										
										
											2010-02-13 10:26:15 -08:00
										 |  |  | require 'testing_env' | 
					
						
							| 
									
										
										
										
											2013-01-26 20:05:39 -06:00
										 |  |  | require 'dependency_collector' | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 20:32:51 -05:00
										 |  |  | class DependencyCollectorTests < Homebrew::TestCase | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  |   def find_dependency(name) | 
					
						
							| 
									
										
										
										
											2014-06-10 19:55:10 -05:00
										 |  |  |     @d.deps.find { |dep| dep.name == name } | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-02-13 10:26:15 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   def find_requirement(klass) | 
					
						
							| 
									
										
										
										
											2014-06-10 19:55:10 -05:00
										 |  |  |     @d.requirements.find { |req| klass === req } | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def setup | 
					
						
							| 
									
										
										
										
											2014-06-10 19:55:10 -05:00
										 |  |  |     @d = DependencyCollector.new | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-09 12:38:19 -05:00
										 |  |  |   def teardown | 
					
						
							| 
									
										
										
										
											2014-07-02 15:10:07 -05:00
										 |  |  |     DependencyCollector.clear_cache | 
					
						
							| 
									
										
										
										
											2014-03-09 12:38:19 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  |   def test_dependency_creation | 
					
						
							|  |  |  |     @d.add 'foo' => :build | 
					
						
							|  |  |  |     @d.add 'bar' => ['--universal', :optional] | 
					
						
							| 
									
										
										
										
											2014-06-10 19:55:10 -05:00
										 |  |  |     assert_instance_of Dependency, find_dependency("foo") | 
					
						
							|  |  |  |     assert_equal 2, find_dependency("bar").tags.length | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-27 16:53:42 -06:00
										 |  |  |   def test_add_returns_created_dep | 
					
						
							|  |  |  |     ret = @d.add 'foo' | 
					
						
							|  |  |  |     assert_equal Dependency.new('foo'), ret | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  |   def test_dependency_tags | 
					
						
							| 
									
										
										
										
											2014-06-11 12:21:03 -05:00
										 |  |  |     assert_predicate Dependency.new('foo', [:build]), :build? | 
					
						
							|  |  |  |     assert_predicate Dependency.new('foo', [:build, :optional]), :optional? | 
					
						
							| 
									
										
										
										
											2014-06-11 13:03:06 -05:00
										 |  |  |     assert_includes Dependency.new('foo', [:universal]).options, "--universal" | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  |     assert_empty Dependency.new('foo').tags | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_no_duplicate_dependencies | 
					
						
							|  |  |  |     @d.add 'foo' | 
					
						
							|  |  |  |     @d.add 'foo' => :build | 
					
						
							|  |  |  |     assert_equal 1, @d.deps.count | 
					
						
							| 
									
										
										
										
											2014-06-10 19:55:10 -05:00
										 |  |  |     assert_empty find_dependency("foo").tags | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_requirement_creation | 
					
						
							|  |  |  |     @d.add :x11 | 
					
						
							| 
									
										
										
										
											2014-06-10 19:55:10 -05:00
										 |  |  |     assert_instance_of X11Dependency, find_requirement(X11Dependency) | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_no_duplicate_requirements | 
					
						
							|  |  |  |     2.times { @d.add :x11 } | 
					
						
							| 
									
										
										
										
											2014-07-03 14:50:57 -05:00
										 |  |  |     assert_equal 1, @d.requirements.count | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_requirement_tags | 
					
						
							|  |  |  |     @d.add :x11 => '2.5.1' | 
					
						
							|  |  |  |     @d.add :xcode => :build | 
					
						
							| 
									
										
										
										
											2014-06-10 19:55:10 -05:00
										 |  |  |     assert_empty find_requirement(X11Dependency).tags | 
					
						
							| 
									
										
										
										
											2014-06-11 12:21:03 -05:00
										 |  |  |     assert_predicate find_requirement(XcodeDependency), :build? | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_x11_no_tag | 
					
						
							|  |  |  |     @d.add :x11 | 
					
						
							| 
									
										
										
										
											2014-06-10 19:55:10 -05:00
										 |  |  |     assert_empty find_requirement(X11Dependency).tags | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_x11_min_version | 
					
						
							|  |  |  |     @d.add :x11 => '2.5.1' | 
					
						
							| 
									
										
										
										
											2014-07-01 21:26:41 -05:00
										 |  |  |     assert_equal "2.5.1", find_requirement(X11Dependency).min_version.to_s | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_x11_tag | 
					
						
							|  |  |  |     @d.add :x11 => :optional | 
					
						
							| 
									
										
										
										
											2014-06-11 12:21:03 -05:00
										 |  |  |     assert_predicate find_requirement(X11Dependency), :optional? | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_x11_min_version_and_tag | 
					
						
							|  |  |  |     @d.add :x11 => ['2.5.1', :optional] | 
					
						
							| 
									
										
										
										
											2014-06-10 19:55:10 -05:00
										 |  |  |     dep = find_requirement(X11Dependency) | 
					
						
							| 
									
										
										
										
											2014-07-01 21:26:41 -05:00
										 |  |  |     assert_equal '2.5.1', dep.min_version.to_s | 
					
						
							| 
									
										
										
										
											2014-06-11 12:21:03 -05:00
										 |  |  |     assert_predicate dep, :optional? | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-02-10 19:25:22 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-04-13 21:11:14 -05:00
										 |  |  |   def test_ld64_dep_pre_leopard | 
					
						
							| 
									
										
										
										
											2013-06-15 09:33:30 -05:00
										 |  |  |     MacOS.stubs(:version).returns(MacOS::Version.new("10.4")) | 
					
						
							| 
									
										
										
										
											2013-04-13 21:11:14 -05:00
										 |  |  |     assert_equal LD64Dependency.new, @d.build(:ld64) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_ld64_dep_leopard_or_newer | 
					
						
							| 
									
										
										
										
											2013-06-15 09:33:30 -05:00
										 |  |  |     MacOS.stubs(:version).returns(MacOS::Version.new("10.5")) | 
					
						
							| 
									
										
										
										
											2013-04-13 21:11:14 -05:00
										 |  |  |     assert_nil @d.build(:ld64) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-06 16:08:49 -05:00
										 |  |  |   def test_raises_typeerror_for_unknown_classes | 
					
						
							|  |  |  |     assert_raises(TypeError) { @d.add(Class.new) } | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_raises_typeerror_for_unknown_types | 
					
						
							|  |  |  |     assert_raises(TypeError) { @d.add(Object.new) } | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-09-13 09:51:23 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_does_not_mutate_dependency_spec | 
					
						
							|  |  |  |     spec = { 'foo' => :optional } | 
					
						
							|  |  |  |     copy = spec.dup | 
					
						
							|  |  |  |     @d.add(spec) | 
					
						
							|  |  |  |     assert_equal copy, spec | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-09-28 16:37:05 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_resource_dep_git_url | 
					
						
							|  |  |  |     resource = Resource.new | 
					
						
							| 
									
										
										
										
											2014-06-12 17:58:12 -05:00
										 |  |  |     resource.url("git://example.com/foo/bar.git") | 
					
						
							| 
									
										
										
										
											2013-09-28 16:37:05 -05:00
										 |  |  |     assert_instance_of GitDependency, @d.add(resource) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_resource_dep_gzip_url | 
					
						
							|  |  |  |     resource = Resource.new | 
					
						
							| 
									
										
										
										
											2014-06-12 17:58:12 -05:00
										 |  |  |     resource.url("http://example.com/foo.tar.gz") | 
					
						
							| 
									
										
										
										
											2013-09-28 16:37:05 -05:00
										 |  |  |     assert_nil @d.add(resource) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_resource_dep_xz_url | 
					
						
							|  |  |  |     resource = Resource.new | 
					
						
							| 
									
										
										
										
											2014-06-12 17:58:12 -05:00
										 |  |  |     resource.url("http://example.com/foo.tar.xz") | 
					
						
							| 
									
										
										
										
											2013-09-28 16:37:05 -05:00
										 |  |  |     assert_equal Dependency.new("xz", [:build]), @d.add(resource) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_resource_dep_raises_for_unknown_classes | 
					
						
							|  |  |  |     resource = Resource.new | 
					
						
							|  |  |  |     resource.url "foo", :using => Class.new | 
					
						
							|  |  |  |     assert_raises(TypeError) { @d.add(resource) } | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  | end |