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
def build_dep(name, tags = [], deps = [])
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
end
@ -15,7 +15,7 @@ describe Dependency do
let(:baz) { build_dep(:baz) }
let(:qux) { build_dep(: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
it "yields dependent and dependency pairs" do
@ -44,20 +44,20 @@ describe Dependency do
end
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])
end
end
it "skips optionals by default" do
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])
end
it "keeps recommended dependencies by default" do
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)
end
@ -75,7 +75,7 @@ describe Dependency do
it "merges dependencies and preserves env_proc" do
env_proc = double
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])
expect(described_class.expand(formula).first.env_proc).to eq(env_proc)
end
@ -89,7 +89,8 @@ describe Dependency do
end
it "skips parent but yields children with ::skip" do
f = double(
f = instance_double(
Formula,
name: "f",
deps: [
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
foo = build_dep(:foo, [:test], bar)
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|
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
foo = build_dep(:foo)
bar = build_dep(:bar, [], [foo])
allow(foo).to receive(:to_formula).and_return(double(deps: [bar], name: foo.name))
f = double(name: "f", deps: [foo, bar])
allow(foo).to receive(:to_formula).and_return(instance_double(Formula, deps: [bar], name: foo.name))
f = instance_double(Formula, name: "f", deps: [foo, bar])
expect { described_class.expand(f) }.not_to raise_error
end
it "cleans the expand stack" do
foo = build_dep(:foo)
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.instance_variable_get(:@expand_stack)).to be_empty
end