mirror of
https://github.com/hashicorp/terraform.git
synced 2026-02-18 18:29:44 -05:00
158 lines
4.4 KiB
Go
158 lines
4.4 KiB
Go
// Copyright IBM Corp. 2014, 2026
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package addrs
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestGraph(t *testing.T) {
|
|
a := LocalValue{Name: "a"}
|
|
b := LocalValue{Name: "b"}
|
|
c := LocalValue{Name: "c"}
|
|
d := LocalValue{Name: "d"}
|
|
|
|
g := NewDirectedGraph[LocalValue]()
|
|
|
|
g.AddDependency(d, c)
|
|
g.AddDependency(d, b)
|
|
g.AddDependency(c, b)
|
|
g.AddDependency(b, a)
|
|
|
|
t.Run("StringForComparison", func(t *testing.T) {
|
|
gotStr := strings.TrimSpace(g.StringForComparison())
|
|
wantStr := strings.TrimSpace(`
|
|
local.a
|
|
local.b
|
|
local.a
|
|
local.c
|
|
local.b
|
|
local.d
|
|
local.b
|
|
local.c
|
|
`)
|
|
if gotStr != wantStr {
|
|
t.Errorf("wrong string representation\ngot:\n%s\n\nwant:\n%s", gotStr, wantStr)
|
|
}
|
|
})
|
|
|
|
t.Run("direct dependencies of a", func(t *testing.T) {
|
|
deps := g.DirectDependenciesOf(a)
|
|
if got, want := len(deps), 0; got != want {
|
|
t.Errorf("a has %d dependencies, but should have %d", got, want)
|
|
}
|
|
})
|
|
t.Run("direct dependencies of b", func(t *testing.T) {
|
|
deps := g.DirectDependenciesOf(b)
|
|
if got, want := len(deps), 1; got != want {
|
|
t.Errorf("b has %d dependencies, but should have %d", got, want)
|
|
}
|
|
if !deps.Has(a) {
|
|
t.Errorf("b does not depend on a, but should")
|
|
}
|
|
})
|
|
t.Run("direct dependencies of d", func(t *testing.T) {
|
|
deps := g.DirectDependenciesOf(d)
|
|
if got, want := len(deps), 2; got != want {
|
|
t.Errorf("d has %d dependencies, but should have %d", got, want)
|
|
}
|
|
if !deps.Has(b) {
|
|
t.Errorf("d does not depend on b, but should")
|
|
}
|
|
if !deps.Has(c) {
|
|
t.Errorf("d does not depend on c, but should")
|
|
}
|
|
})
|
|
t.Run("direct dependents of a", func(t *testing.T) {
|
|
depnts := g.DirectDependentsOf(a)
|
|
if got, want := len(depnts), 1; got != want {
|
|
t.Errorf("a has %d dependents, but should have %d", got, want)
|
|
}
|
|
if !depnts.Has(b) {
|
|
t.Errorf("b does not depend on a, but should")
|
|
}
|
|
})
|
|
t.Run("direct dependents of b", func(t *testing.T) {
|
|
depnts := g.DirectDependentsOf(b)
|
|
if got, want := len(depnts), 2; got != want {
|
|
t.Errorf("b has %d dependents, but should have %d", got, want)
|
|
}
|
|
if !depnts.Has(c) {
|
|
t.Errorf("c does not depend on b, but should")
|
|
}
|
|
if !depnts.Has(d) {
|
|
t.Errorf("d does not depend on b, but should")
|
|
}
|
|
})
|
|
t.Run("direct dependents of d", func(t *testing.T) {
|
|
depnts := g.DirectDependentsOf(d)
|
|
if got, want := len(depnts), 0; got != want {
|
|
t.Errorf("d has %d dependents, but should have %d", got, want)
|
|
}
|
|
})
|
|
t.Run("transitive dependencies of a", func(t *testing.T) {
|
|
deps := g.TransitiveDependenciesOf(a)
|
|
if got, want := len(deps), 0; got != want {
|
|
t.Errorf("a has %d transitive dependencies, but should have %d", got, want)
|
|
}
|
|
})
|
|
t.Run("transitive dependencies of b", func(t *testing.T) {
|
|
deps := g.TransitiveDependenciesOf(b)
|
|
if got, want := len(deps), 1; got != want {
|
|
t.Errorf("b has %d transitive dependencies, but should have %d", got, want)
|
|
}
|
|
if !deps.Has(a) {
|
|
t.Errorf("b does not depend on a, but should")
|
|
}
|
|
})
|
|
t.Run("transitive dependencies of d", func(t *testing.T) {
|
|
deps := g.TransitiveDependenciesOf(d)
|
|
if got, want := len(deps), 3; got != want {
|
|
t.Errorf("d has %d transitive dependencies, but should have %d", got, want)
|
|
}
|
|
if !deps.Has(a) {
|
|
t.Errorf("d does not depend on a, but should")
|
|
}
|
|
if !deps.Has(b) {
|
|
t.Errorf("d does not depend on b, but should")
|
|
}
|
|
if !deps.Has(c) {
|
|
t.Errorf("d does not depend on c, but should")
|
|
}
|
|
})
|
|
t.Run("transitive dependents of a", func(t *testing.T) {
|
|
depnts := g.TransitiveDependentsOf(a)
|
|
if got, want := len(depnts), 3; got != want {
|
|
t.Errorf("a has %d transitive dependents, but should have %d", got, want)
|
|
}
|
|
if !depnts.Has(b) {
|
|
t.Errorf("b does not depend on a, but should")
|
|
}
|
|
if !depnts.Has(c) {
|
|
t.Errorf("c does not depend on a, but should")
|
|
}
|
|
if !depnts.Has(d) {
|
|
t.Errorf("d does not depend on a, but should")
|
|
}
|
|
})
|
|
t.Run("transitive dependents of b", func(t *testing.T) {
|
|
depnts := g.TransitiveDependentsOf(b)
|
|
if got, want := len(depnts), 2; got != want {
|
|
t.Errorf("b has %d transitive dependents, but should have %d", got, want)
|
|
}
|
|
if !depnts.Has(c) {
|
|
t.Errorf("c does not depend on b, but should")
|
|
}
|
|
if !depnts.Has(d) {
|
|
t.Errorf("d does not depend on b, but should")
|
|
}
|
|
})
|
|
t.Run("transitive dependents of d", func(t *testing.T) {
|
|
depnts := g.TransitiveDependentsOf(d)
|
|
if got, want := len(depnts), 0; got != want {
|
|
t.Errorf("d has %d transitive dependents, but should have %d", got, want)
|
|
}
|
|
})
|
|
}
|