mirror of
https://github.com/Jguer/yay.git
synced 2025-12-27 07:35:48 -05:00
* ci(yay): update packages on builder before building release
* update go-aur
* dep/topo: clarify graph API, rename methods, add tests
- Rename topo methods for clarity (TopoSortedLayers, AddProvides, HasProvides, GetProviderInfo)
- Add GoDoc describing edge direction and semantics
- Make ForEach safe when node info is missing
- Add unit tests for Dependencies/Dependents behavior
- Update call sites
* Revert "ci(yay): update packages on builder before building release"
This reverts commit bb64208c64.
80 lines
2.3 KiB
Go
80 lines
2.3 KiB
Go
package topo
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestGraph_DependenciesAndDependents_Direct(t *testing.T) {
|
|
g := New[string, struct{}]()
|
|
|
|
// yay depends on go
|
|
require.NoError(t, g.DependOn("yay", "go"))
|
|
|
|
// Dependencies("yay") => {"go"}
|
|
depsYay := g.Dependencies("yay")
|
|
require.NotNil(t, depsYay)
|
|
require.Len(t, depsYay, 1)
|
|
require.True(t, depsYay["go"])
|
|
|
|
// Dependencies("go") => {} (empty set, because "go" is in the graph but has no deps)
|
|
depsGo := g.Dependencies("go")
|
|
require.NotNil(t, depsGo)
|
|
require.Len(t, depsGo, 0)
|
|
|
|
// Dependents("go") => {"yay"}
|
|
dependentsGo := g.Dependents("go")
|
|
require.NotNil(t, dependentsGo)
|
|
require.Len(t, dependentsGo, 1)
|
|
require.True(t, dependentsGo["yay"])
|
|
|
|
// Dependents("yay") => {} (empty set, because nothing depends on yay)
|
|
dependentsYay := g.Dependents("yay")
|
|
require.NotNil(t, dependentsYay)
|
|
require.Len(t, dependentsYay, 0)
|
|
}
|
|
|
|
func TestGraph_DependenciesAndDependents_Transitive(t *testing.T) {
|
|
g := New[string, struct{}]()
|
|
|
|
// yay depends on go; foo depends on yay
|
|
require.NoError(t, g.DependOn("yay", "go"))
|
|
require.NoError(t, g.DependOn("foo", "yay"))
|
|
|
|
// Dependencies("foo") => {"yay", "go"}
|
|
depsFoo := g.Dependencies("foo")
|
|
require.NotNil(t, depsFoo)
|
|
require.Len(t, depsFoo, 2)
|
|
require.True(t, depsFoo["yay"])
|
|
require.True(t, depsFoo["go"])
|
|
|
|
// Dependents("go") => {"yay", "foo"} (transitive)
|
|
dependentsGo := g.Dependents("go")
|
|
require.NotNil(t, dependentsGo)
|
|
require.Len(t, dependentsGo, 2)
|
|
require.True(t, dependentsGo["yay"])
|
|
require.True(t, dependentsGo["foo"])
|
|
|
|
// Dependents("yay") => {"foo"}
|
|
dependentsYay := g.Dependents("yay")
|
|
require.NotNil(t, dependentsYay)
|
|
require.Len(t, dependentsYay, 1)
|
|
require.True(t, dependentsYay["foo"])
|
|
}
|
|
|
|
func TestGraph_DependenciesAndDependents_MissingNodeReturnsNil(t *testing.T) {
|
|
g := New[string, struct{}]()
|
|
|
|
// For nodes not present in the graph, transitive queries return nil.
|
|
require.Nil(t, g.Dependencies("missing"))
|
|
require.Nil(t, g.Dependents("missing"))
|
|
|
|
// Adding edges adds nodes; existing nodes with no deps/dependents return an empty set (non-nil).
|
|
require.NoError(t, g.DependOn("yay", "go"))
|
|
require.NotNil(t, g.Dependencies("go"))
|
|
require.Len(t, g.Dependencies("go"), 0)
|
|
require.NotNil(t, g.Dependents("yay"))
|
|
require.Len(t, g.Dependents("yay"), 0)
|
|
}
|