2015-08-03 13:09:07 +01:00
|
|
|
require "testing_env"
|
|
|
|
require "dependency"
|
2013-05-10 23:45:05 -05:00
|
|
|
|
2014-06-18 20:32:51 -05:00
|
|
|
class DependencyExpansionTests < Homebrew::TestCase
|
2015-08-03 13:09:07 +01:00
|
|
|
def build_dep(name, tags = [], deps = [])
|
2013-06-07 22:27:30 -05:00
|
|
|
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|
|
2015-08-03 13:09:07 +01: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
|
2015-12-15 10:27:19 +01:00
|
|
|
deps = [build_dep(:foo, [:optional]), @bar, @baz, @qux]
|
|
|
|
f = stub(:deps => deps, :build => stub(:with? => false), :name => "f")
|
|
|
|
assert_equal [@bar, @baz, @qux], Dependency.expand(f)
|
2013-05-10 23:45:05 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_expand_keeps_recommendeds_by_default
|
2015-12-15 10:27:19 +01:00
|
|
|
deps = [build_dep(:foo, [:recommended]), @bar, @baz, @qux]
|
|
|
|
f = stub(:deps => deps, :build => stub(:with? => true), :name => "f")
|
|
|
|
assert_equal deps, Dependency.expand(f)
|
2013-05-10 23:45:05 -05:00
|
|
|
end
|
2013-06-07 22:27:30 -05:00
|
|
|
|
|
|
|
def test_merges_repeated_deps_with_differing_options
|
2015-08-03 13:09:07 +01:00
|
|
|
@foo2 = build_dep(:foo, ["option"])
|
|
|
|
@baz2 = build_dep(:baz, ["option"])
|
2013-06-07 22:27:30 -05:00
|
|
|
@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
|
2015-08-03 13:09:07 +01:00
|
|
|
@foo2 = build_dep(:foo, ["option"])
|
|
|
|
@foo3 = build_dep(:foo, ["option"])
|
2013-06-25 10:12:14 -05:00
|
|
|
@deps << @foo2 << @foo3
|
|
|
|
|
2015-08-03 13:09:07 +01:00
|
|
|
assert_equal %w[option], Dependency.expand(@f).first.tags
|
2013-06-25 10:12:14 -05:00
|
|
|
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]),
|
2015-08-03 13:09:07 +01:00
|
|
|
build_dep(:foo, [], [@baz])
|
2013-07-22 21:36:11 -05:00
|
|
|
])
|
|
|
|
|
2015-08-03 13:09:07 +01:00
|
|
|
deps = Dependency.expand(f) do |_dependent, dep|
|
|
|
|
Dependency.skip if %w[foo qux].include? dep.name
|
2013-07-22 21:36:11 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
assert_equal [@bar, @baz], deps
|
|
|
|
end
|
2013-11-13 10:38:14 -06:00
|
|
|
|
|
|
|
def test_keep_dep_but_prune_recursive_deps
|
2014-11-21 16:08:37 -06:00
|
|
|
foo = build_dep(:foo, [:build], @bar)
|
|
|
|
baz = build_dep(:baz, [:build])
|
|
|
|
f = stub(:name => "f", :deps => [foo, baz])
|
2013-11-13 10:38:14 -06:00
|
|
|
|
2015-08-03 13:09:07 +01:00
|
|
|
deps = Dependency.expand(f) do |_dependent, dep|
|
2013-11-13 10:38:14 -06:00
|
|
|
Dependency.keep_but_prune_recursive_deps if dep.build?
|
|
|
|
end
|
|
|
|
|
2014-11-21 16:08:37 -06:00
|
|
|
assert_equal [foo, baz], deps
|
2013-11-13 10:38:14 -06:00
|
|
|
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
|