Commit 848d10f0 authored by Shivakumar GN's avatar Shivakumar GN Committed by Russ Cox

xml: omit newline at beginning of MarshalIndent output

(Still valid XML.)

Fixes #3354.

R=golang-dev, dave
CC=golang-dev
https://golang.org/cl/7288047
parent 09a17ca1
......@@ -124,6 +124,7 @@ type printer struct {
prefix string
depth int
indentedIn bool
putNewline bool
}
// marshalValue writes one or more XML elements representing val.
......@@ -394,7 +395,11 @@ func (p *printer) writeIndent(depthDelta int) {
}
p.indentedIn = false
}
p.WriteByte('\n')
if p.putNewline {
p.WriteByte('\n')
} else {
p.putNewline = true
}
if len(p.prefix) > 0 {
p.WriteString(p.prefix)
}
......
......@@ -7,6 +7,7 @@ package xml
import (
"bytes"
"errors"
"fmt"
"io"
"reflect"
"strconv"
......@@ -840,6 +841,24 @@ var marshalErrorTests = []struct {
},
}
var marshalIndentTests = []struct {
Value interface{}
Prefix string
Indent string
ExpectXML string
}{
{
Value: &SecretAgent{
Handle: "007",
Identity: "James Bond",
Obfuscate: "<redacted/>",
},
Prefix: "",
Indent: "\t",
ExpectXML: fmt.Sprintf("<agent handle=\"007\">\n\t<Identity>James Bond</Identity><redacted/>\n</agent>"),
},
}
func TestMarshalErrors(t *testing.T) {
for idx, test := range marshalErrorTests {
_, err := Marshal(test.Value)
......@@ -884,6 +903,19 @@ func TestUnmarshal(t *testing.T) {
}
}
func TestMarshalIndent(t *testing.T) {
for i, test := range marshalIndentTests {
data, err := MarshalIndent(test.Value, test.Prefix, test.Indent)
if err != nil {
t.Errorf("#%d: Error: %s", i, err)
continue
}
if got, want := string(data), test.ExpectXML; got != want {
t.Errorf("#%d: MarshalIndent:\nGot:%s\nWant:\n%s", i, got, want)
}
}
}
type limitedBytesWriter struct {
w io.Writer
remain int // until writes fail
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment