| 
									
										
										
										
											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
										 |  |  | require 'extend/set' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module DependencyCollectorTestExtension | 
					
						
							|  |  |  |   def find_dependency(name) | 
					
						
							|  |  |  |     deps.find { |dep| dep.name == name } | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-02-13 10:26:15 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   def find_requirement(klass) | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  |     requirements.find { |req| klass === req } | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  | class DependencyCollectorTests < Test::Unit::TestCase | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   def setup | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  |     @d = DependencyCollector.new.extend(DependencyCollectorTestExtension) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-09 12:38:19 -05:00
										 |  |  |   def teardown | 
					
						
							|  |  |  |     DependencyCollector::CACHE.clear | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  |   def test_dependency_creation | 
					
						
							|  |  |  |     @d.add 'foo' => :build | 
					
						
							|  |  |  |     @d.add 'bar' => ['--universal', :optional] | 
					
						
							| 
									
										
										
										
											2013-04-02 15:33:34 -05:00
										 |  |  |     assert_instance_of Dependency, @d.find_dependency('foo') | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  |     assert_equal 2, @d.find_dependency('bar').tags.length | 
					
						
							|  |  |  |   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 | 
					
						
							| 
									
										
										
										
											2013-05-06 16:08:50 -05:00
										 |  |  |     assert Dependency.new('foo', [:build]).build? | 
					
						
							| 
									
										
										
										
											2013-01-13 20:05:09 -06:00
										 |  |  |     assert Dependency.new('foo', [:build, :optional]).optional? | 
					
						
							|  |  |  |     assert Dependency.new('foo', [:universal]).options.include? '--universal' | 
					
						
							|  |  |  |     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 | 
					
						
							|  |  |  |     assert_empty @d.find_dependency('foo').tags | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_requirement_creation | 
					
						
							|  |  |  |     @d.add :x11 | 
					
						
							| 
									
										
										
										
											2013-04-02 15:33:34 -05:00
										 |  |  |     assert_instance_of X11Dependency, @d.find_requirement(X11Dependency) | 
					
						
							| 
									
										
										
										
											2012-10-24 18:17:43 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_no_duplicate_requirements | 
					
						
							|  |  |  |     2.times { @d.add :x11 } | 
					
						
							|  |  |  |     assert_equal 1, @d.requirements.length | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_requirement_tags | 
					
						
							|  |  |  |     @d.add :x11 => '2.5.1' | 
					
						
							|  |  |  |     @d.add :xcode => :build | 
					
						
							|  |  |  |     assert_empty @d.find_requirement(X11Dependency).tags | 
					
						
							|  |  |  |     assert @d.find_requirement(XcodeDependency).build? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_x11_no_tag | 
					
						
							|  |  |  |     @d.add :x11 | 
					
						
							|  |  |  |     assert_empty @d.find_requirement(X11Dependency).tags | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_x11_min_version | 
					
						
							|  |  |  |     @d.add :x11 => '2.5.1' | 
					
						
							|  |  |  |     assert_equal '2.5.1', @d.find_requirement(X11Dependency).min_version | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_x11_tag | 
					
						
							|  |  |  |     @d.add :x11 => :optional | 
					
						
							|  |  |  |     assert @d.find_requirement(X11Dependency).optional? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_x11_min_version_and_tag | 
					
						
							|  |  |  |     @d.add :x11 => ['2.5.1', :optional] | 
					
						
							|  |  |  |     dep = @d.find_requirement(X11Dependency) | 
					
						
							|  |  |  |     assert_equal '2.5.1', dep.min_version | 
					
						
							|  |  |  |     assert dep.optional? | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-02-10 19:25:22 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-10 19:26:18 -06:00
										 |  |  |   def test_libltdl_not_build_dep | 
					
						
							|  |  |  |     MacOS::Xcode.stubs(:provides_autotools?).returns(false) | 
					
						
							|  |  |  |     dep = @d.build(:libltdl) | 
					
						
							|  |  |  |     assert_equal Dependency.new("libtool"), dep | 
					
						
							|  |  |  |     assert !dep.build? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-10 19:25:22 -06:00
										 |  |  |   def test_autotools_dep_no_system_autotools | 
					
						
							|  |  |  |     MacOS::Xcode.stubs(:provides_autotools?).returns(false) | 
					
						
							|  |  |  |     dep = @d.build(:libtool) | 
					
						
							|  |  |  |     assert_equal Dependency.new("libtool"), dep | 
					
						
							|  |  |  |     assert dep.build? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_autotools_dep_system_autotools | 
					
						
							|  |  |  |     MacOS::Xcode.stubs(:provides_autotools?).returns(true) | 
					
						
							|  |  |  |     assert_nil @d.build(:libtool) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  |     resource.url("git://github.com/foo/bar.git") | 
					
						
							|  |  |  |     assert_instance_of GitDependency, @d.add(resource) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_resource_dep_gzip_url | 
					
						
							|  |  |  |     resource = Resource.new | 
					
						
							|  |  |  |     resource.url("http://foo.com/bar.tar.gz") | 
					
						
							|  |  |  |     assert_nil @d.add(resource) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_resource_dep_xz_url | 
					
						
							|  |  |  |     resource = Resource.new | 
					
						
							|  |  |  |     resource.url("http://foo.com/bar.tar.xz") | 
					
						
							|  |  |  |     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 |