func (r *SpecBuilder) BuildSpecs(args []string, additionalArgs []string) { r.commandFlags.computeNodes() suites, _ := findSuites(args, r.commandFlags.Recurse, r.commandFlags.SkipPackage, false) if len(suites) == 0 { complainAndQuit("Found no test suites") } passed := true for _, suite := range suites { runner := testrunner.New(suite, 1, false, r.commandFlags.Race, r.commandFlags.Cover, r.commandFlags.CoverPkg, r.commandFlags.Tags, nil) fmt.Printf("Compiling %s...\n", suite.PackageName) path, _ := filepath.Abs(filepath.Join(suite.Path, fmt.Sprintf("%s.test", suite.PackageName))) err := runner.CompileTo(path) if err != nil { fmt.Println(err.Error()) passed = false } else { fmt.Printf(" compiled %s.test\n", suite.PackageName) } runner.CleanUp() } if passed { os.Exit(0) } os.Exit(1) }
func (w *SpecWatcher) runnersForSuites(suites []testsuite.TestSuite, additionalArgs []string) []*testrunner.TestRunner { runners := []*testrunner.TestRunner{} for _, suite := range suites { runners = append(runners, testrunner.New(suite, w.commandFlags.NumCPU, w.commandFlags.ParallelStream, w.commandFlags.Race, w.commandFlags.Cover, w.commandFlags.CoverPkg, w.commandFlags.Tags, additionalArgs)) } return runners }
func (r *SpecRunner) RunSpecs(args []string, additionalArgs []string) { r.commandFlags.computeNodes() r.notifier.VerifyNotificationsAreAvailable() suites, skippedPackages := findSuites(args, r.commandFlags.Recurse, r.commandFlags.SkipPackage, true) if len(skippedPackages) > 0 { fmt.Println("Will skip:") for _, skippedPackage := range skippedPackages { fmt.Println(" " + skippedPackage) } } if len(skippedPackages) > 0 && len(suites) == 0 { fmt.Println("All tests skipped! Exiting...") os.Exit(0) } if len(suites) == 0 { complainAndQuit("Found no test suites") } r.ComputeSuccinctMode(len(suites)) t := time.Now() runners := []*testrunner.TestRunner{} for _, suite := range suites { runners = append(runners, testrunner.New(suite, r.commandFlags.NumCPU, r.commandFlags.ParallelStream, r.commandFlags.Race, r.commandFlags.Cover, r.commandFlags.CoverPkg, r.commandFlags.Tags, additionalArgs)) } numSuites := 0 runResult := testrunner.PassingRunResult() if r.commandFlags.UntilItFails { iteration := 0 for { r.UpdateSeed() randomizedRunners := r.randomizeOrder(runners) runResult, numSuites = r.suiteRunner.RunSuites(randomizedRunners, r.commandFlags.NumCompilers, r.commandFlags.KeepGoing, nil) iteration++ if r.interruptHandler.WasInterrupted() { break } if runResult.Passed { fmt.Printf("\nAll tests passed...\nWill keep running them until they fail.\nThis was attempt #%d\n%s\n", iteration, orcMessage(iteration)) } else { fmt.Printf("\nTests failed on attempt #%d\n\n", iteration) break } } } else { randomizedRunners := r.randomizeOrder(runners) runResult, numSuites = r.suiteRunner.RunSuites(randomizedRunners, r.commandFlags.NumCompilers, r.commandFlags.KeepGoing, nil) } for _, runner := range runners { runner.CleanUp() } fmt.Printf("\nGinkgo ran %d %s in %s\n", numSuites, pluralizedWord("suite", "suites", numSuites), time.Since(t)) if runResult.Passed { if runResult.HasProgrammaticFocus { fmt.Printf("Test Suite Passed\n") fmt.Printf("Detected Programmatic Focus - setting exit status to %d\n", types.GINKGO_FOCUS_EXIT_CODE) os.Exit(types.GINKGO_FOCUS_EXIT_CODE) } else { fmt.Printf("Test Suite Passed\n") os.Exit(0) } } else { fmt.Printf("Test Suite Failed\n") os.Exit(1) } }