| 
									
										
										
										
											2013-05-10 23:45:05 -05:00
										 |  |  | require 'testing_env' | 
					
						
							|  |  |  | require 'dependency' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 20:32:51 -05:00
										 |  |  | class DependencyExpansionTests < Homebrew::TestCase | 
					
						
							| 
									
										
										
										
											2013-06-07 22:27:30 -05:00
										 |  |  |   def build_dep(name, tags=[], deps=[]) | 
					
						
							|  |  |  |     dep = Dependency.new(name.to_s, tags) | 
					
						
							| 
									
										
										
										
											2014-02-27 14:22:42 -06:00
										 |  |  |     dep.stubs(:to_formula).returns(stub(:deps => deps, :name => name)) | 
					
						
							| 
									
										
										
										
											2013-05-10 23:45:05 -05:00
										 |  |  |     dep | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def setup | 
					
						
							|  |  |  |     @foo = build_dep(:foo) | 
					
						
							|  |  |  |     @bar = build_dep(:bar) | 
					
						
							|  |  |  |     @baz = build_dep(:baz) | 
					
						
							|  |  |  |     @qux = build_dep(:qux) | 
					
						
							|  |  |  |     @deps = [@foo, @bar, @baz, @qux] | 
					
						
							| 
									
										
										
										
											2014-02-27 14:22:42 -06:00
										 |  |  |     @f    = stub(:deps => @deps, :name => "f") | 
					
						
							| 
									
										
										
										
											2013-05-10 23:45:05 -05:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_expand_yields_dependent_and_dep_pairs | 
					
						
							|  |  |  |     i = 0
 | 
					
						
							|  |  |  |     Dependency.expand(@f) do |dependent, dep| | 
					
						
							|  |  |  |       assert_equal @f, dependent | 
					
						
							|  |  |  |       assert_equal dep, @deps[i] | 
					
						
							|  |  |  |       i += 1
 | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_expand_no_block | 
					
						
							|  |  |  |     assert_equal @deps, Dependency.expand(@f) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_expand_prune_all | 
					
						
							|  |  |  |     assert_empty Dependency.expand(@f) { Dependency.prune } | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_expand_selective_pruning | 
					
						
							|  |  |  |     deps = Dependency.expand(@f) do |_, dep| | 
					
						
							| 
									
										
										
										
											2013-06-07 21:54:27 -05:00
										 |  |  |       Dependency.prune if dep.name == 'foo' | 
					
						
							| 
									
										
										
										
											2013-05-10 23:45:05 -05:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     assert_equal [@bar, @baz, @qux], deps | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_expand_preserves_dependency_order | 
					
						
							| 
									
										
										
										
											2014-02-27 14:22:42 -06:00
										 |  |  |     @foo.stubs(:to_formula).returns(stub(:name => "f", :deps => [@qux, @baz])) | 
					
						
							| 
									
										
										
										
											2013-05-10 23:45:05 -05:00
										 |  |  |     assert_equal [@qux, @baz, @foo, @bar], Dependency.expand(@f) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_expand_skips_optionals_by_default | 
					
						
							|  |  |  |     @foo.expects(:optional?).returns(true) | 
					
						
							| 
									
										
										
										
											2014-02-27 14:22:42 -06:00
										 |  |  |     @f = stub(:deps => @deps, :build => stub(:with? => false), :name => "f") | 
					
						
							| 
									
										
										
										
											2013-05-10 23:45:05 -05:00
										 |  |  |     assert_equal [@bar, @baz, @qux], Dependency.expand(@f) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_expand_keeps_recommendeds_by_default | 
					
						
							|  |  |  |     @foo.expects(:recommended?).returns(true) | 
					
						
							| 
									
										
										
										
											2014-02-27 14:22:42 -06:00
										 |  |  |     @f = stub(:deps => @deps, :build => stub(:with? => true), :name => "f") | 
					
						
							| 
									
										
										
										
											2013-05-10 23:45:05 -05:00
										 |  |  |     assert_equal @deps, Dependency.expand(@f) | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-06-07 22:27:30 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_merges_repeated_deps_with_differing_options | 
					
						
							|  |  |  |     @foo2 = build_dep(:foo, ['option']) | 
					
						
							|  |  |  |     @baz2 = build_dep(:baz, ['option']) | 
					
						
							|  |  |  |     @deps << @foo2 << @baz2 | 
					
						
							|  |  |  |     deps = [@foo2, @bar, @baz2, @qux] | 
					
						
							| 
									
										
										
										
											2013-06-24 08:52:41 -05:00
										 |  |  |     deps.zip(Dependency.expand(@f)) do |expected, actual| | 
					
						
							|  |  |  |       assert_equal expected.tags, actual.tags | 
					
						
							|  |  |  |       assert_equal expected, actual | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2013-06-07 22:27:30 -05:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-06-24 08:52:41 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_merger_preserves_env_proc | 
					
						
							| 
									
										
										
										
											2014-02-27 14:22:43 -06:00
										 |  |  |     env_proc = stub | 
					
						
							|  |  |  |     dep = Dependency.new("foo", [], env_proc) | 
					
						
							|  |  |  |     dep.stubs(:to_formula).returns(stub(:deps => [])) | 
					
						
							|  |  |  |     @deps.replace [dep] | 
					
						
							| 
									
										
										
										
											2013-06-24 08:52:41 -05:00
										 |  |  |     assert_equal env_proc, Dependency.expand(@f).first.env_proc | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-06-25 10:12:14 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_merged_tags_no_dupes | 
					
						
							|  |  |  |     @foo2 = build_dep(:foo, ['option']) | 
					
						
							|  |  |  |     @foo3 = build_dep(:foo, ['option']) | 
					
						
							|  |  |  |     @deps << @foo2 << @foo3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     assert_equal %w{option}, Dependency.expand(@f).first.tags | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-07-22 21:36:11 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_skip_skips_parent_but_yields_children | 
					
						
							| 
									
										
										
										
											2014-02-27 14:22:42 -06:00
										 |  |  |     f = stub(:name => "f", :deps => [ | 
					
						
							| 
									
										
										
										
											2013-07-22 21:36:11 -05:00
										 |  |  |       build_dep(:foo, [], [@bar, @baz]), | 
					
						
							|  |  |  |       build_dep(:foo, [], [@baz]), | 
					
						
							|  |  |  |     ]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     deps = Dependency.expand(f) do |dependent, dep| | 
					
						
							|  |  |  |       Dependency.skip if %w{foo qux}.include? dep.name | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     assert_equal [@bar, @baz], deps | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-11-13 10:38:14 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_keep_dep_but_prune_recursive_deps | 
					
						
							| 
									
										
										
										
											2014-02-27 14:22:42 -06:00
										 |  |  |     f = stub(:name => "f", :deps => [ | 
					
						
							| 
									
										
										
										
											2013-11-13 10:38:14 -06:00
										 |  |  |       build_dep(:foo, [:build], [@bar]), | 
					
						
							|  |  |  |       build_dep(:baz, [:build]), | 
					
						
							|  |  |  |     ]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     deps = Dependency.expand(f) do |dependent, dep| | 
					
						
							|  |  |  |       Dependency.keep_but_prune_recursive_deps if dep.build? | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     assert_equal [@foo, @baz], deps | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-12-09 14:36:10 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_deps_with_collection_argument | 
					
						
							|  |  |  |     assert_equal [@foo, @bar, @baz, @qux], @f.deps | 
					
						
							|  |  |  |     assert_equal [@bar, @baz], Dependency.expand(@f, [@bar, @baz]) | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-05-10 23:45:05 -05:00
										 |  |  | end |