mirror of
https://github.com/spf13/cobra
synced 2024-11-05 05:17:12 +00:00
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
|
package cmd
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
// TestGoldenInitCmd initializes the project "github.com/spf13/testproject"
|
||
|
// in GOPATH and compares the content of files in initialized project with
|
||
|
// appropriate golden files ("testdata/*.golden").
|
||
|
// Use -update to update existing golden files.
|
||
|
func TestGoldenInitCmd(t *testing.T) {
|
||
|
projectName := "github.com/spf13/testproject"
|
||
|
project := NewProject(projectName)
|
||
|
defer os.RemoveAll(project.AbsPath())
|
||
|
|
||
|
os.Args = []string{"cobra", "init", projectName}
|
||
|
if err := RootCmd.Execute(); err != nil {
|
||
|
t.Fatal("Error by execution:", err)
|
||
|
}
|
||
|
|
||
|
expectedFiles := []string{".", "cmd", "LICENSE", "main.go", "cmd/root.go"}
|
||
|
gotFiles := []string{}
|
||
|
|
||
|
// Check project file hierarchy and compare the content of every single file
|
||
|
// with appropriate golden file.
|
||
|
err := filepath.Walk(project.AbsPath(), func(path string, info os.FileInfo, err error) error {
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// Make path relative to project.AbsPath().
|
||
|
// E.g. path = "/home/user/go/src/github.com/spf13/testproject/cmd/root.go"
|
||
|
// then it returns just "cmd/root.go".
|
||
|
relPath, err := filepath.Rel(project.AbsPath(), path)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
relPath = filepath.ToSlash(relPath)
|
||
|
gotFiles = append(gotFiles, relPath)
|
||
|
goldenPath := filepath.Join("testdata", filepath.Base(path)+".golden")
|
||
|
|
||
|
switch relPath {
|
||
|
// Know directories.
|
||
|
case ".", "cmd":
|
||
|
return nil
|
||
|
// Known files.
|
||
|
case "LICENSE", "main.go", "cmd/root.go":
|
||
|
if *update {
|
||
|
got, err := ioutil.ReadFile(path)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
ioutil.WriteFile(goldenPath, got, 0644)
|
||
|
}
|
||
|
return compareFiles(path, goldenPath)
|
||
|
}
|
||
|
// Unknown file.
|
||
|
return errors.New("unknown file: " + path)
|
||
|
})
|
||
|
if err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
|
||
|
// Check if some files lack.
|
||
|
if err := checkLackFiles(expectedFiles, gotFiles); err != nil {
|
||
|
t.Fatal(err)
|
||
|
}
|
||
|
}
|