init.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package convey
  2. import (
  3. "flag"
  4. "os"
  5. "github.com/jtolds/gls"
  6. "github.com/smartystreets/goconvey/convey/reporting"
  7. )
  8. func init() {
  9. declareFlags()
  10. ctxMgr = gls.NewContextManager()
  11. }
  12. func declareFlags() {
  13. flag.BoolVar(&json, "json", false, "When true, emits results in JSON blocks. Default: 'false'")
  14. flag.BoolVar(&silent, "silent", false, "When true, all output from GoConvey is suppressed.")
  15. flag.BoolVar(&story, "story", false, "When true, emits story output, otherwise emits dot output. When not provided, this flag mirros the value of the '-test.v' flag")
  16. if noStoryFlagProvided() {
  17. story = verboseEnabled
  18. }
  19. // FYI: flag.Parse() is called from the testing package.
  20. }
  21. func noStoryFlagProvided() bool {
  22. return !story && !storyDisabled
  23. }
  24. func buildReporter() reporting.Reporter {
  25. switch {
  26. case testReporter != nil:
  27. return testReporter
  28. case json:
  29. return reporting.BuildJsonReporter()
  30. case silent:
  31. return reporting.BuildSilentReporter()
  32. case story:
  33. return reporting.BuildStoryReporter()
  34. default:
  35. return reporting.BuildDotReporter()
  36. }
  37. }
  38. var (
  39. ctxMgr *gls.ContextManager
  40. // only set by internal tests
  41. testReporter reporting.Reporter
  42. )
  43. var (
  44. json bool
  45. silent bool
  46. story bool
  47. verboseEnabled = flagFound("-test.v=true")
  48. storyDisabled = flagFound("-story=false")
  49. )
  50. // flagFound parses the command line args manually for flags defined in other
  51. // packages. Like the '-v' flag from the "testing" package, for instance.
  52. func flagFound(flagValue string) bool {
  53. for _, arg := range os.Args {
  54. if arg == flagValue {
  55. return true
  56. }
  57. }
  58. return false
  59. }