github.com/onsi/ginkgo@v1.16.6-0.20211118180735-4e1925ba4c95/ginkgo/internal/utils.go (about)

     1  package internal
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"os"
     7  	"os/exec"
     8  
     9  	"github.com/onsi/ginkgo/formatter"
    10  	"github.com/onsi/ginkgo/ginkgo/command"
    11  )
    12  
    13  func FileExists(path string) bool {
    14  	_, err := os.Stat(path)
    15  	return err == nil
    16  }
    17  
    18  func CopyFile(src string, dest string) error {
    19  	srcFile, err := os.Open(src)
    20  	if err != nil {
    21  		return err
    22  	}
    23  
    24  	srcStat, err := srcFile.Stat()
    25  	if err != nil {
    26  		return err
    27  	}
    28  
    29  	if _, err := os.Stat(dest); err == nil {
    30  		os.Remove(dest)
    31  	}
    32  
    33  	destFile, err := os.OpenFile(dest, os.O_WRONLY|os.O_CREATE, srcStat.Mode())
    34  	if err != nil {
    35  		return err
    36  	}
    37  
    38  	_, err = io.Copy(destFile, srcFile)
    39  	if err != nil {
    40  		return err
    41  	}
    42  
    43  	if err := srcFile.Close(); err != nil {
    44  		return err
    45  	}
    46  	return destFile.Close()
    47  }
    48  
    49  func GoFmt(path string) {
    50  	out, err := exec.Command("go", "fmt", path).CombinedOutput()
    51  	if err != nil {
    52  		command.AbortIfError(fmt.Sprintf("Could not fmt:\n%s\n", string(out)), err)
    53  	}
    54  }
    55  
    56  func PluralizedWord(singular, plural string, count int) string {
    57  	if count == 1 {
    58  		return singular
    59  	}
    60  	return plural
    61  }
    62  
    63  func FailedSuitesReport(suites TestSuites, f formatter.Formatter) string {
    64  	out := ""
    65  	out += "There were failures detected in the following suites:\n"
    66  
    67  	maxPackageNameLength := 0
    68  	for _, suite := range suites.WithState(TestSuiteStateFailureStates...) {
    69  		if len(suite.PackageName) > maxPackageNameLength {
    70  			maxPackageNameLength = len(suite.PackageName)
    71  		}
    72  	}
    73  
    74  	packageNameFormatter := fmt.Sprintf("%%%ds", maxPackageNameLength)
    75  	for _, suite := range suites {
    76  		switch suite.State {
    77  		case TestSuiteStateFailed:
    78  			out += f.Fi(1, "{{red}}"+packageNameFormatter+" {{gray}}%s{{/}}\n", suite.PackageName, suite.Path)
    79  		case TestSuiteStateFailedToCompile:
    80  			out += f.Fi(1, "{{red}}"+packageNameFormatter+" {{gray}}%s {{magenta}}[Compilation failure]{{/}}\n", suite.PackageName, suite.Path)
    81  		case TestSuiteStateFailedDueToTimeout:
    82  			out += f.Fi(1, "{{red}}"+packageNameFormatter+" {{gray}}%s {{orange}}[%s]{{/}}\n", suite.PackageName, suite.Path, TIMEOUT_ELAPSED_FAILURE_REASON)
    83  		}
    84  	}
    85  	return out
    86  }