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