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 }