}
const (
- wstateBeginLine = iota // beginning of line; initial state; must be zero
+ wstateBegin = iota // initial state; must be zero
+ wstateBeginLine // beginning of line
wstateCR // wrote \r (possibly at end of line)
wstateData // writing data in middle of line
)
for n < len(b) {
c := b[n]
switch d.state {
- case wstateBeginLine:
+ case wstateBegin, wstateBeginLine:
d.state = wstateData
if c == '.' {
// escape leading dot
t.Fatalf("wrote %q", s)
}
}
+
+func TestDotWriterCloseEmptyWrite(t *testing.T) {
+ var buf bytes.Buffer
+ w := NewWriter(bufio.NewWriter(&buf))
+ d := w.DotWriter()
+ n, err := d.Write([]byte{})
+ if n != 0 || err != nil {
+ t.Fatalf("Write: %d, %s", n, err)
+ }
+ d.Close()
+ want := "\r\n.\r\n"
+ if s := buf.String(); s != want {
+ t.Fatalf("wrote %q; want %q", s, want)
+ }
+}
+
+func TestDotWriterCloseNoWrite(t *testing.T) {
+ var buf bytes.Buffer
+ w := NewWriter(bufio.NewWriter(&buf))
+ d := w.DotWriter()
+ d.Close()
+ want := "\r\n.\r\n"
+ if s := buf.String(); s != want {
+ t.Fatalf("wrote %q; want %q", s, want)
+ }
+}