func (r *SuiteRunner) listFailedSuites(suitesThatFailed []testsuite.TestSuite) { fmt.Println("") fmt.Println("There were failures detected in the following suites:") maxPackageNameLength := 0 for _, suite := range suitesThatFailed { if len(suite.PackageName) > maxPackageNameLength { maxPackageNameLength = len(suite.PackageName) } } packageNameFormatter := fmt.Sprintf("%%%ds", maxPackageNameLength) for _, suite := range suitesThatFailed { if config.DefaultReporterConfig.NoColor { fmt.Printf("\t"+packageNameFormatter+" %s\n", suite.PackageName, suite.Path) } else { fmt.Fprintf(colorable.NewColorableStdout(), "\t%s"+packageNameFormatter+"%s %s%s%s\n", redColor, suite.PackageName, defaultStyle, lightGrayColor, suite.Path, defaultStyle) } } }
func (w *SpecWatcher) WatchSuites(args []string, additionalArgs []string) { suites, _ := findSuites(args, w.commandFlags.Recurse, w.commandFlags.SkipPackage, false) if len(suites) == 0 { complainAndQuit("Found no test suites") } fmt.Printf("Identified %d test %s. Locating dependencies to a depth of %d (this may take a while)...\n", len(suites), pluralizedWord("suite", "suites", len(suites)), w.commandFlags.Depth) deltaTracker := watch.NewDeltaTracker(w.commandFlags.Depth) delta, errors := deltaTracker.Delta(suites) fmt.Printf("Watching %d %s:\n", len(delta.NewSuites), pluralizedWord("suite", "suites", len(delta.NewSuites))) for _, suite := range delta.NewSuites { fmt.Println(" " + suite.Description()) } for suite, err := range errors { fmt.Printf("Failed to watch %s: %s\n", suite.PackageName, err) } if len(suites) == 1 { runners := w.runnersForSuites(suites, additionalArgs) w.suiteRunner.RunSuites(runners, w.commandFlags.NumCompilers, true, nil) runners[0].CleanUp() } ticker := time.NewTicker(time.Second) for { select { case <-ticker.C: suites, _ := findSuites(args, w.commandFlags.Recurse, w.commandFlags.SkipPackage, false) delta, _ := deltaTracker.Delta(suites) coloredStream := colorable.NewColorableStdout() suitesToRun := []testsuite.TestSuite{} if len(delta.NewSuites) > 0 { fmt.Fprintf(coloredStream, greenColor+"Detected %d new %s:\n"+defaultStyle, len(delta.NewSuites), pluralizedWord("suite", "suites", len(delta.NewSuites))) for _, suite := range delta.NewSuites { suitesToRun = append(suitesToRun, suite.Suite) fmt.Fprintln(coloredStream, " "+suite.Description()) } } modifiedSuites := delta.ModifiedSuites() if len(modifiedSuites) > 0 { fmt.Fprintln(coloredStream, greenColor+"\nDetected changes in:"+defaultStyle) for _, pkg := range delta.ModifiedPackages { fmt.Fprintln(coloredStream, " "+pkg) } fmt.Fprintf(coloredStream, greenColor+"Will run %d %s:\n"+defaultStyle, len(modifiedSuites), pluralizedWord("suite", "suites", len(modifiedSuites))) for _, suite := range modifiedSuites { suitesToRun = append(suitesToRun, suite.Suite) fmt.Fprintln(coloredStream, " "+suite.Description()) } fmt.Fprintln(coloredStream, "") } if len(suitesToRun) > 0 { w.UpdateSeed() w.ComputeSuccinctMode(len(suitesToRun)) runners := w.runnersForSuites(suitesToRun, additionalArgs) result, _ := w.suiteRunner.RunSuites(runners, w.commandFlags.NumCompilers, true, func(suite testsuite.TestSuite) { deltaTracker.WillRun(suite) }) for _, runner := range runners { runner.CleanUp() } if !w.interruptHandler.WasInterrupted() { color := redColor if result.Passed { color = greenColor } fmt.Fprintln(coloredStream, color+"\nDone. Resuming watch..."+defaultStyle) } } case <-w.interruptHandler.C: return } } }