brew/Library/Homebrew/test/utils/topological_hash_spec.rb
Douglas Eichelberger 9075cbae62 brew style --fix
2023-04-21 09:58:50 -07:00

99 lines
2.7 KiB
Ruby

# frozen_string_literal: true
require "utils/topological_hash"
describe Utils::TopologicalHash do
describe "#tsort" do
it "returns a topologically sorted array" do
hash = described_class.new
hash[1] = [2, 3]
hash[2] = [3]
hash[3] = []
hash[4] = []
expect(hash.tsort).to eq [3, 2, 1, 4]
end
end
describe "#strongly_connected_components" do
it "returns an array of arrays" do
hash = described_class.new
hash[1] = [2]
hash[2] = [3, 4]
hash[3] = [2]
hash[4] = []
expect(hash.strongly_connected_components).to eq [[4], [2, 3], [1]]
end
end
describe "::graph_package_dependencies" do
it "returns a topological hash" do
formula1 = formula "homebrew-test-formula1" do
url "foo"
version "0.5"
end
formula2 = formula "homebrew-test-formula2" do
url "foo"
version "0.5"
depends_on "homebrew-test-formula1"
end
formula3 = formula "homebrew-test-formula3" do
url "foo"
version "0.5"
depends_on "homebrew-test-formula4"
end
formula4 = formula "homebrew-test-formula4" do
url "foo"
version "0.5"
depends_on "homebrew-test-formula3"
end
cask1 = Cask::Cask.new("homebrew-test-cask1") do
url "foo"
version "1.2.3"
end
cask2 = Cask::Cask.new("homebrew-test-cask2") do
url "foo"
version "1.2.3"
depends_on cask: "homebrew-test-cask1"
depends_on formula: "homebrew-test-formula1"
end
cask3 = Cask::Cask.new("homebrew-test-cask3") do
url "foo"
version "1.2.3"
depends_on cask: "homebrew-test-cask2"
end
stub_formula_loader formula1
stub_formula_loader formula2
stub_formula_loader formula3
stub_formula_loader formula4
stub_cask_loader cask1
stub_cask_loader cask2
stub_cask_loader cask3
packages = [formula1, formula2, formula3, formula4, cask1, cask2, cask3]
expect(described_class.graph_package_dependencies(packages)).to eq({
formula1 => [],
formula2 => [formula1],
formula3 => [formula4],
formula4 => [formula3],
cask1 => [],
cask2 => [formula1, cask1],
cask3 => [cask2],
})
sorted = [formula1, cask1, cask2, cask3, formula2]
expect(described_class.graph_package_dependencies([cask3, cask2, cask1, formula2, formula1]).tsort).to eq sorted
expect(described_class.graph_package_dependencies([cask3, formula2]).tsort).to eq sorted
expect { described_class.graph_package_dependencies([formula3, formula4]).tsort }.to raise_error TSort::Cyclic
end
end
end