Resolve dependency_expansion_spec violation

This commit is contained in:
Douglas Eichelberger 2023-01-22 17:06:17 -08:00
parent 89c7117b30
commit 94effcc64f

View File

@ -6,7 +6,7 @@ require "dependency"
describe Dependency do describe Dependency do
def build_dep(name, tags = [], deps = []) def build_dep(name, tags = [], deps = [])
dep = described_class.new(name.to_s, tags) dep = described_class.new(name.to_s, tags)
allow(dep).to receive(:to_formula).and_return(double(deps: deps, name: name)) allow(dep).to receive(:to_formula).and_return(instance_double(Formula, deps: deps, name: name))
dep dep
end end
@ -15,7 +15,7 @@ describe Dependency do
let(:baz) { build_dep(:baz) } let(:baz) { build_dep(:baz) }
let(:qux) { build_dep(:qux) } let(:qux) { build_dep(:qux) }
let(:deps) { [foo, bar, baz, qux] } let(:deps) { [foo, bar, baz, qux] }
let(:formula) { double(deps: deps, name: "f") } let(:formula) { instance_double(Formula, deps: deps, name: "f") }
describe "::expand" do describe "::expand" do
it "yields dependent and dependency pairs" do it "yields dependent and dependency pairs" do
@ -44,20 +44,20 @@ describe Dependency do
end end
it "preserves dependency order" do it "preserves dependency order" do
allow(foo).to receive(:to_formula).and_return(double(name: "f", deps: [qux, baz])) allow(foo).to receive(:to_formula).and_return(instance_double(Formula, name: "f", deps: [qux, baz]))
expect(described_class.expand(formula)).to eq([qux, baz, foo, bar]) expect(described_class.expand(formula)).to eq([qux, baz, foo, bar])
end end
end end
it "skips optionals by default" do it "skips optionals by default" do
deps = [build_dep(:foo, [:optional]), bar, baz, qux] deps = [build_dep(:foo, [:optional]), bar, baz, qux]
f = double(deps: deps, build: double(with?: false), name: "f") f = instance_double(Formula, deps: deps, build: instance_double(BuildOptions, with?: false), name: "f")
expect(described_class.expand(f)).to eq([bar, baz, qux]) expect(described_class.expand(f)).to eq([bar, baz, qux])
end end
it "keeps recommended dependencies by default" do it "keeps recommended dependencies by default" do
deps = [build_dep(:foo, [:recommended]), bar, baz, qux] deps = [build_dep(:foo, [:recommended]), bar, baz, qux]
f = double(deps: deps, build: double(with?: true), name: "f") f = instance_double(Formula, deps: deps, build: instance_double(BuildOptions, with?: true), name: "f")
expect(described_class.expand(f)).to eq(deps) expect(described_class.expand(f)).to eq(deps)
end end
@ -75,7 +75,7 @@ describe Dependency do
it "merges dependencies and preserves env_proc" do it "merges dependencies and preserves env_proc" do
env_proc = double env_proc = double
dep = described_class.new("foo", [], env_proc) dep = described_class.new("foo", [], env_proc)
allow(dep).to receive(:to_formula).and_return(double(deps: [], name: "foo")) allow(dep).to receive(:to_formula).and_return(instance_double(Formula, deps: [], name: "foo"))
deps.replace([dep]) deps.replace([dep])
expect(described_class.expand(formula).first.env_proc).to eq(env_proc) expect(described_class.expand(formula).first.env_proc).to eq(env_proc)
end end
@ -89,7 +89,8 @@ describe Dependency do
end end
it "skips parent but yields children with ::skip" do it "skips parent but yields children with ::skip" do
f = double( f = instance_double(
Formula,
name: "f", name: "f",
deps: [ deps: [
build_dep(:foo, [], [bar, baz]), build_dep(:foo, [], [bar, baz]),
@ -107,7 +108,7 @@ describe Dependency do
it "keeps dependency but prunes recursive dependencies with ::keep_but_prune_recursive_deps" do it "keeps dependency but prunes recursive dependencies with ::keep_but_prune_recursive_deps" do
foo = build_dep(:foo, [:test], bar) foo = build_dep(:foo, [:test], bar)
baz = build_dep(:baz, [:test]) baz = build_dep(:baz, [:test])
f = double(name: "f", deps: [foo, baz]) f = instance_double(Formula, name: "f", deps: [foo, baz])
deps = described_class.expand(f) do |_dependent, dep| deps = described_class.expand(f) do |_dependent, dep|
described_class.keep_but_prune_recursive_deps if dep.test? described_class.keep_but_prune_recursive_deps if dep.test?
@ -124,15 +125,15 @@ describe Dependency do
it "doesn't raise an error when a dependency is cyclic" do it "doesn't raise an error when a dependency is cyclic" do
foo = build_dep(:foo) foo = build_dep(:foo)
bar = build_dep(:bar, [], [foo]) bar = build_dep(:bar, [], [foo])
allow(foo).to receive(:to_formula).and_return(double(deps: [bar], name: foo.name)) allow(foo).to receive(:to_formula).and_return(instance_double(Formula, deps: [bar], name: foo.name))
f = double(name: "f", deps: [foo, bar]) f = instance_double(Formula, name: "f", deps: [foo, bar])
expect { described_class.expand(f) }.not_to raise_error expect { described_class.expand(f) }.not_to raise_error
end end
it "cleans the expand stack" do it "cleans the expand stack" do
foo = build_dep(:foo) foo = build_dep(:foo)
allow(foo).to receive(:to_formula).and_raise(FormulaUnavailableError, foo.name) allow(foo).to receive(:to_formula).and_raise(FormulaUnavailableError, foo.name)
f = double(name: "f", deps: [foo]) f = instance_double(Formula, name: "f", deps: [foo])
expect { described_class.expand(f) }.to raise_error(FormulaUnavailableError) expect { described_class.expand(f) }.to raise_error(FormulaUnavailableError)
expect(described_class.instance_variable_get(:@expand_stack)).to be_empty expect(described_class.instance_variable_get(:@expand_stack)).to be_empty
end end