problems_test.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package reporting
  2. import (
  3. "strings"
  4. "testing"
  5. )
  6. func TestNoopProblemReporterActions(t *testing.T) {
  7. file, reporter := setup()
  8. reporter.BeginStory(nil)
  9. reporter.Enter(nil)
  10. reporter.Exit()
  11. expected := ""
  12. actual := file.String()
  13. if expected != actual {
  14. t.Errorf("Expected: '(blank)'\nActual: '%s'", actual)
  15. }
  16. }
  17. func TestReporterPrintsFailuresAndErrorsAtTheEndOfTheStory(t *testing.T) {
  18. file, reporter := setup()
  19. reporter.Report(NewFailureReport("failed"))
  20. reporter.Report(NewErrorReport("error"))
  21. reporter.Report(NewSuccessReport())
  22. reporter.EndStory()
  23. result := file.String()
  24. if !strings.Contains(result, "Errors:\n") {
  25. t.Errorf("Expected errors, found none.")
  26. }
  27. if !strings.Contains(result, "Failures:\n") {
  28. t.Errorf("Expected failures, found none.")
  29. }
  30. // Each stack trace looks like: `* /path/to/file.go`, so look for `* `.
  31. // With go 1.4+ there is a line in some stack traces that looks like this:
  32. // `testing.(*M).Run(0x2082d60a0, 0x25b7c0)`
  33. // So we can't just look for "*" anymore.
  34. problemCount := strings.Count(result, "* ")
  35. if problemCount != 2 {
  36. t.Errorf("Expected one failure and one error (total of 2 '*' characters). Got %d", problemCount)
  37. }
  38. }
  39. func setup() (file *memoryFile, reporter *problem) {
  40. monochrome()
  41. file = newMemoryFile()
  42. printer := NewPrinter(file)
  43. reporter = NewProblemReporter(printer)
  44. return
  45. }