mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
100 lines
2.7 KiB
Ruby
100 lines
2.7 KiB
Ruby
# typed: false
|
|
# 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
|