aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/smartystreets/goconvey/web/server/system/shell.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/smartystreets/goconvey/web/server/system/shell.go')
-rw-r--r--vendor/github.com/smartystreets/goconvey/web/server/system/shell.go174
1 files changed, 0 insertions, 174 deletions
diff --git a/vendor/github.com/smartystreets/goconvey/web/server/system/shell.go b/vendor/github.com/smartystreets/goconvey/web/server/system/shell.go
deleted file mode 100644
index 0adb8942..00000000
--- a/vendor/github.com/smartystreets/goconvey/web/server/system/shell.go
+++ /dev/null
@@ -1,174 +0,0 @@
-package system
-
-import (
- "log"
- "os/exec"
- "path/filepath"
- "regexp"
- "strings"
-)
-
-///////////////////////////////////////////////////////////////////////////////
-// Integration: ///////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-
-type Shell struct {
- coverage bool
- gobin string
- reportsPath string
- defaultTimeout string
-}
-
-func NewShell(gobin, reportsPath string, coverage bool, defaultTimeout string) *Shell {
- return &Shell{
- coverage: coverage,
- gobin: gobin,
- reportsPath: reportsPath,
- defaultTimeout: defaultTimeout,
- }
-}
-
-func (self *Shell) GoTest(directory, packageName string, tags, arguments []string) (output string, err error) {
- reportFilename := strings.Replace(packageName, "/", "-", -1)
- reportPath := filepath.Join(self.reportsPath, reportFilename)
- reportData := reportPath + ".txt"
- reportHTML := reportPath + ".html"
- tagsArg := "-tags=" + strings.Join(tags, ",")
-
- goconvey := findGoConvey(directory, self.gobin, packageName, tagsArg).Execute()
- compilation := compile(directory, self.gobin, tagsArg).Execute()
- withCoverage := runWithCoverage(compilation, goconvey, self.coverage, reportData, directory, self.gobin, self.defaultTimeout, tagsArg, arguments).Execute()
- final := runWithoutCoverage(compilation, withCoverage, goconvey, directory, self.gobin, self.defaultTimeout, tagsArg, arguments).Execute()
- go generateReports(final, self.coverage, directory, self.gobin, reportData, reportHTML).Execute()
-
- return final.Output, final.Error
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Functional Core:////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-
-func findGoConvey(directory, gobin, packageName, tagsArg string) Command {
- return NewCommand(directory, gobin, "list", "-f", "'{{.TestImports}}{{.XTestImports}}'", tagsArg, packageName)
-}
-
-func compile(directory, gobin, tagsArg string) Command {
- return NewCommand(directory, gobin, "test", "-i", tagsArg)
-}
-
-func runWithCoverage(compile, goconvey Command, coverage bool, reportPath, directory, gobin, defaultTimeout, tagsArg string, customArguments []string) Command {
- if compile.Error != nil || goconvey.Error != nil {
- return compile
- }
-
- if !coverage {
- return compile
- }
-
- arguments := []string{"test", "-v", "-coverprofile=" + reportPath, tagsArg}
-
- customArgsText := strings.Join(customArguments, "\t")
- if !strings.Contains(customArgsText, "-covermode=") {
- arguments = append(arguments, "-covermode=set")
- }
-
- if !strings.Contains(customArgsText, "-timeout=") {
- arguments = append(arguments, "-timeout="+defaultTimeout)
- }
-
- if strings.Contains(goconvey.Output, goconveyDSLImport) {
- arguments = append(arguments, "-convey-json")
- }
-
- arguments = append(arguments, customArguments...)
-
- return NewCommand(directory, gobin, arguments...)
-}
-
-func runWithoutCoverage(compile, withCoverage, goconvey Command, directory, gobin, defaultTimeout, tagsArg string, customArguments []string) Command {
- if compile.Error != nil {
- return compile
- }
-
- if goconvey.Error != nil {
- log.Println(gopathProblem, goconvey.Output, goconvey.Error)
- return goconvey
- }
-
- if coverageStatementRE.MatchString(withCoverage.Output) {
- return withCoverage
- }
-
- log.Printf("Coverage output: %v", withCoverage.Output)
-
- log.Print("Run without coverage")
-
- arguments := []string{"test", "-v", tagsArg}
- customArgsText := strings.Join(customArguments, "\t")
- if !strings.Contains(customArgsText, "-timeout=") {
- arguments = append(arguments, "-timeout="+defaultTimeout)
- }
-
- if strings.Contains(goconvey.Output, goconveyDSLImport) {
- arguments = append(arguments, "-convey-json")
- }
- arguments = append(arguments, customArguments...)
- return NewCommand(directory, gobin, arguments...)
-}
-
-func generateReports(previous Command, coverage bool, directory, gobin, reportData, reportHTML string) Command {
- if previous.Error != nil {
- return previous
- }
-
- if !coverage {
- return previous
- }
-
- return NewCommand(directory, gobin, "tool", "cover", "-html="+reportData, "-o", reportHTML)
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Imperative Shell: //////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-
-type Command struct {
- directory string
- executable string
- arguments []string
-
- Output string
- Error error
-}
-
-func NewCommand(directory, executable string, arguments ...string) Command {
- return Command{
- directory: directory,
- executable: executable,
- arguments: arguments,
- }
-}
-
-func (this Command) Execute() Command {
- if len(this.executable) == 0 {
- return this
- }
-
- if len(this.Output) > 0 || this.Error != nil {
- return this
- }
-
- command := exec.Command(this.executable, this.arguments...)
- command.Dir = this.directory
- var rawOutput []byte
- rawOutput, this.Error = command.CombinedOutput()
- this.Output = string(rawOutput)
- return this
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-const goconveyDSLImport = "github.com/smartystreets/goconvey/convey " // note the trailing space: we don't want to target packages nested in the /convey package.
-const gopathProblem = "Please run goconvey from within $GOPATH/src (also, symlinks might be problematic). Output and Error: "
-
-var coverageStatementRE = regexp.MustCompile(`(?m)^coverage: \d+\.\d% of statements(.*)$|^panic: test timed out after `)