github.com/tiagovtristao/plz@v13.4.0+incompatible/src/core/graph_test.go (about)

     1  package core
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  func TestAddTarget(t *testing.T) {
    10  	graph := NewGraph()
    11  	target := makeTarget("//src/core:target1")
    12  	graph.AddTarget(target)
    13  	assert.Equal(t, target, graph.TargetOrDie(target.Label))
    14  }
    15  
    16  func TestAddPackage(t *testing.T) {
    17  	graph := NewGraph()
    18  	pkg := NewPackage("src/core")
    19  	graph.AddPackage(pkg)
    20  	assert.Equal(t, pkg, graph.Package("src/core", ""))
    21  }
    22  
    23  func TestTarget(t *testing.T) {
    24  	graph := NewGraph()
    25  	target := graph.Target(ParseBuildLabel("//src/core:target1", ""))
    26  	assert.Nil(t, target)
    27  	assert.Equal(t, 0, graph.Len())
    28  }
    29  
    30  func TestRevDeps(t *testing.T) {
    31  	graph := NewGraph()
    32  	target1 := makeTarget("//src/core:target1")
    33  	target2 := makeTarget("//src/core:target2", target1)
    34  	target3 := makeTarget("//src/core:target3", target2)
    35  	graph.AddTarget(target1)
    36  	graph.AddTarget(target2)
    37  	graph.AddTarget(target3)
    38  	// No revdeps until we call AddDependency
    39  	assert.Equal(t, 0, len(graph.ReverseDependencies(target1)))
    40  	assert.Equal(t, 0, len(graph.ReverseDependencies(target2)))
    41  	assert.Equal(t, 0, len(graph.ReverseDependencies(target3)))
    42  	graph.AddDependency(target2.Label, target1.Label)
    43  	graph.AddDependency(target3.Label, target2.Label)
    44  	assert.Equal(t, []*BuildTarget{target2}, graph.ReverseDependencies(target1))
    45  	assert.Equal(t, []*BuildTarget{target3}, graph.ReverseDependencies(target2))
    46  	assert.Equal(t, 0, len(graph.ReverseDependencies(target3)))
    47  }
    48  
    49  func TestAllDepsBuilt(t *testing.T) {
    50  	graph := NewGraph()
    51  	target1 := makeTarget("//src/core:target1")
    52  	target2 := makeTarget("//src/core:target2", target1)
    53  	graph.AddTarget(target1)
    54  	graph.AddTarget(target2)
    55  	graph.AddDependency(target2.Label, target1.Label)
    56  	assert.True(t, graph.AllDepsBuilt(target1), "Should be true because it has no dependencies")
    57  	assert.False(t, graph.AllDepsBuilt(target2), "Should be false because target1 isn't built yet")
    58  	target1.SyncUpdateState(Inactive, Building)
    59  	assert.False(t, graph.AllDepsBuilt(target2), "Should be false because target1 is building now")
    60  	target1.SyncUpdateState(Building, Built)
    61  	assert.True(t, graph.AllDepsBuilt(target2), "Should be true now target1 is built.")
    62  }
    63  
    64  func TestAllDepsResolved(t *testing.T) {
    65  	graph := NewGraph()
    66  	target1 := makeTarget("//src/core:target1")
    67  	target2 := makeTarget("//src/core:target2")
    68  	target2.AddDependency(target1.Label)
    69  	graph.AddTarget(target2)
    70  	assert.False(t, graph.AllDependenciesResolved(target2), "Haven't added a proper dep for target2 yet.")
    71  	graph.AddTarget(target1)
    72  	assert.True(t, graph.AllDependenciesResolved(target1), "Has no dependencies so they're all resolved")
    73  	assert.True(t, graph.AllDependenciesResolved(target1), "Should be resolved now we've added target1.")
    74  }
    75  
    76  func TestDependentTargets(t *testing.T) {
    77  	graph := NewGraph()
    78  	target1 := makeTarget("//src/core:target1")
    79  	target2 := makeTarget("//src/core:target2")
    80  	target3 := makeTarget("//src/core:target3")
    81  	target2.AddDependency(target1.Label)
    82  	target1.AddDependency(target3.Label)
    83  	target1.AddProvide("go", ParseBuildLabel(":target3", "src/core"))
    84  	target2.Requires = append(target2.Requires, "go")
    85  	graph.AddTarget(target1)
    86  	graph.AddTarget(target2)
    87  	graph.AddTarget(target3)
    88  	assert.Equal(t, []BuildLabel{target3.Label}, graph.DependentTargets(target2.Label, target1.Label))
    89  }
    90  
    91  func TestSubrepo(t *testing.T) {
    92  	graph := NewGraph()
    93  	graph.AddSubrepo(&Subrepo{Name: "test", Root: "plz-out/gen/test"})
    94  	subrepo := graph.Subrepo("test")
    95  	assert.NotNil(t, subrepo)
    96  	assert.Equal(t, "plz-out/gen/test", subrepo.Root)
    97  }
    98  
    99  // makeTarget creates a new build target for us.
   100  func makeTarget(label string, deps ...*BuildTarget) *BuildTarget {
   101  	target := NewBuildTarget(ParseBuildLabel(label, ""))
   102  	for _, dep := range deps {
   103  		target.AddDependency(dep.Label)
   104  	}
   105  	return target
   106  }