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 }