printer_test.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. package reporting
  2. import "testing"
  3. func TestPrint(t *testing.T) {
  4. file := newMemoryFile()
  5. printer := NewPrinter(file)
  6. const expected = "Hello, World!"
  7. printer.Print(expected)
  8. if file.buffer != expected {
  9. t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer)
  10. }
  11. }
  12. func TestPrintFormat(t *testing.T) {
  13. file := newMemoryFile()
  14. printer := NewPrinter(file)
  15. template := "Hi, %s"
  16. name := "Ralph"
  17. expected := "Hi, Ralph"
  18. printer.Print(template, name)
  19. if file.buffer != expected {
  20. t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer)
  21. }
  22. }
  23. func TestPrintPreservesEncodedStrings(t *testing.T) {
  24. file := newMemoryFile()
  25. printer := NewPrinter(file)
  26. const expected = "= -> %3D"
  27. printer.Print(expected)
  28. if file.buffer != expected {
  29. t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer)
  30. }
  31. }
  32. func TestPrintln(t *testing.T) {
  33. file := newMemoryFile()
  34. printer := NewPrinter(file)
  35. const expected = "Hello, World!"
  36. printer.Println(expected)
  37. if file.buffer != expected+"\n" {
  38. t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer)
  39. }
  40. }
  41. func TestPrintlnFormat(t *testing.T) {
  42. file := newMemoryFile()
  43. printer := NewPrinter(file)
  44. template := "Hi, %s"
  45. name := "Ralph"
  46. expected := "Hi, Ralph\n"
  47. printer.Println(template, name)
  48. if file.buffer != expected {
  49. t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer)
  50. }
  51. }
  52. func TestPrintlnPreservesEncodedStrings(t *testing.T) {
  53. file := newMemoryFile()
  54. printer := NewPrinter(file)
  55. const expected = "= -> %3D"
  56. printer.Println(expected)
  57. if file.buffer != expected+"\n" {
  58. t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer)
  59. }
  60. }
  61. func TestPrintIndented(t *testing.T) {
  62. file := newMemoryFile()
  63. printer := NewPrinter(file)
  64. const message = "Hello, World!\nGoodbye, World!"
  65. const expected = " Hello, World!\n Goodbye, World!"
  66. printer.Indent()
  67. printer.Print(message)
  68. if file.buffer != expected {
  69. t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer)
  70. }
  71. }
  72. func TestPrintDedented(t *testing.T) {
  73. file := newMemoryFile()
  74. printer := NewPrinter(file)
  75. const expected = "Hello, World!\nGoodbye, World!"
  76. printer.Indent()
  77. printer.Dedent()
  78. printer.Print(expected)
  79. if file.buffer != expected {
  80. t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer)
  81. }
  82. }
  83. func TestPrintlnIndented(t *testing.T) {
  84. file := newMemoryFile()
  85. printer := NewPrinter(file)
  86. const message = "Hello, World!\nGoodbye, World!"
  87. const expected = " Hello, World!\n Goodbye, World!\n"
  88. printer.Indent()
  89. printer.Println(message)
  90. if file.buffer != expected {
  91. t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer)
  92. }
  93. }
  94. func TestPrintlnDedented(t *testing.T) {
  95. file := newMemoryFile()
  96. printer := NewPrinter(file)
  97. const expected = "Hello, World!\nGoodbye, World!"
  98. printer.Indent()
  99. printer.Dedent()
  100. printer.Println(expected)
  101. if file.buffer != expected+"\n" {
  102. t.Errorf("Expected '%s' to equal '%s'.", expected, file.buffer)
  103. }
  104. }
  105. func TestDedentTooFarShouldNotPanic(t *testing.T) {
  106. defer func() {
  107. if r := recover(); r != nil {
  108. t.Error("Should not have panicked!")
  109. }
  110. }()
  111. file := newMemoryFile()
  112. printer := NewPrinter(file)
  113. printer.Dedent()
  114. t.Log("Getting to this point without panicking means we passed.")
  115. }
  116. func TestInsert(t *testing.T) {
  117. file := newMemoryFile()
  118. printer := NewPrinter(file)
  119. printer.Indent()
  120. printer.Print("Hi")
  121. printer.Insert(" there")
  122. printer.Dedent()
  123. expected := " Hi there"
  124. if file.buffer != expected {
  125. t.Errorf("Should have written '%s' but instead wrote '%s'.", expected, file.buffer)
  126. }
  127. }
  128. ////////////////// memoryFile ////////////////////
  129. type memoryFile struct {
  130. buffer string
  131. }
  132. func (self *memoryFile) Write(p []byte) (n int, err error) {
  133. self.buffer += string(p)
  134. return len(p), nil
  135. }
  136. func (self *memoryFile) String() string {
  137. return self.buffer
  138. }
  139. func newMemoryFile() *memoryFile {
  140. return new(memoryFile)
  141. }