github.phpd.cn/thought-machine/please@v12.2.0+incompatible/src/core/build_label_test.go (about) 1 package core 2 3 import ( 4 "os" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestIncludes(t *testing.T) { 11 label1 := BuildLabel{PackageName: "src/core", Name: "..."} 12 label2 := BuildLabel{PackageName: "src/parse", Name: "parse"} 13 assert.False(t, label1.Includes(label2)) 14 label2 = BuildLabel{PackageName: "src/core", Name: "core_test"} 15 assert.True(t, label1.Includes(label2)) 16 } 17 18 func TestIncludesSubstring(t *testing.T) { 19 label1 := BuildLabel{PackageName: "third_party/python", Name: "..."} 20 label2 := BuildLabel{PackageName: "third_party/python3", Name: "six"} 21 assert.False(t, label1.Includes(label2)) 22 } 23 24 func TestIncludesSubpackages(t *testing.T) { 25 label1 := BuildLabel{PackageName: "", Name: "..."} 26 label2 := BuildLabel{PackageName: "third_party/python3", Name: "six"} 27 assert.True(t, label1.Includes(label2)) 28 } 29 30 func TestParent(t *testing.T) { 31 label := BuildLabel{PackageName: "src/core", Name: "core"} 32 assert.Equal(t, label, label.Parent()) 33 label2 := BuildLabel{PackageName: "src/core", Name: "_core#src"} 34 assert.Equal(t, label, label2.Parent()) 35 label3 := BuildLabel{PackageName: "src/core", Name: "_core_something"} 36 assert.Equal(t, label3, label3.Parent()) 37 } 38 39 func TestUnmarshalFlag(t *testing.T) { 40 var label BuildLabel 41 assert.NoError(t, label.UnmarshalFlag("//src/core:core")) 42 assert.Equal(t, label.PackageName, "src/core") 43 assert.Equal(t, label.Name, "core") 44 // N.B. we can't test a failure here because it does a log.Fatalf 45 } 46 47 func TestUnmarshalText(t *testing.T) { 48 var label BuildLabel 49 assert.NoError(t, label.UnmarshalText([]byte("//src/core:core"))) 50 assert.Equal(t, label.PackageName, "src/core") 51 assert.Equal(t, label.Name, "core") 52 assert.Error(t, label.UnmarshalText([]byte(":blahblah:"))) 53 } 54 55 func TestPackageDir(t *testing.T) { 56 label := NewBuildLabel("src/core", "core") 57 assert.Equal(t, "src/core", label.PackageDir()) 58 label = NewBuildLabel("", "core") 59 assert.Equal(t, ".", label.PackageDir()) 60 } 61 62 func TestLooksLikeABuildLabel(t *testing.T) { 63 assert.True(t, LooksLikeABuildLabel("//src/core")) 64 assert.True(t, LooksLikeABuildLabel(":core")) 65 assert.True(t, LooksLikeABuildLabel("@test_x86:core")) 66 assert.False(t, LooksLikeABuildLabel("core")) 67 assert.False(t, LooksLikeABuildLabel("@test_x86")) 68 } 69 70 func TestComplete(t *testing.T) { 71 label := BuildLabel{} 72 completions := label.Complete("//src/c") 73 assert.Equal(t, 4, len(completions)) 74 assert.Equal(t, "//src/cache", completions[0].Item) 75 assert.Equal(t, "//src/clean", completions[1].Item) 76 assert.Equal(t, "//src/cli", completions[2].Item) 77 assert.Equal(t, "//src/core", completions[3].Item) 78 } 79 80 func TestCompleteError(t *testing.T) { 81 label := BuildLabel{} 82 completions := label.Complete("nope") 83 assert.Equal(t, 0, len(completions)) 84 } 85 86 func TestMain(m *testing.M) { 87 // Used to support TestComplete, the function it's testing re-execs 88 // itself thinking that it's actually plz. 89 if complete := os.Getenv("PLZ_COMPLETE"); complete == "//src/c" { 90 os.Stdout.Write([]byte("//src/cache\n")) 91 os.Stdout.Write([]byte("//src/clean\n")) 92 os.Stdout.Write([]byte("//src/cli\n")) 93 os.Stdout.Write([]byte("//src/core\n")) 94 os.Exit(0) 95 } else if complete != "" { 96 os.Stderr.Write([]byte("Invalid completion\n")) 97 os.Exit(1) 98 } 99 os.Exit(m.Run()) 100 }