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  }