Commit 07490c0f authored by Jeff Hodges's avatar Jeff Hodges Committed by Andrew Gerrand

json: calculate Offset for Indent correctly

Fixes #2171

This is the real change.

R=adg
CC=golang-dev, r, rsc
https://golang.org/cl/4943041
parent aca42937
...@@ -59,6 +59,7 @@ func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) os.Error { ...@@ -59,6 +59,7 @@ func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) os.Error {
needIndent := false needIndent := false
depth := 0 depth := 0
for _, c := range src { for _, c := range src {
scan.bytes++
v := scan.step(&scan, int(c)) v := scan.step(&scan, int(c))
if v == scanSkipSpace { if v == scanSkipSpace {
continue continue
......
...@@ -7,7 +7,9 @@ package json ...@@ -7,7 +7,9 @@ package json
import ( import (
"bytes" "bytes"
"math" "math"
"os"
"rand" "rand"
"reflect"
"testing" "testing"
) )
...@@ -136,6 +138,29 @@ func TestIndentBig(t *testing.T) { ...@@ -136,6 +138,29 @@ func TestIndentBig(t *testing.T) {
} }
} }
type indentErrorTest struct {
in string
err os.Error
}
var indentErrorTests = []indentErrorTest{
{`{"X": "foo", "Y"}`, &SyntaxError{"invalid character '}' after object key", 17}},
{`{"X": "foo" "Y": "bar"}`, &SyntaxError{"invalid character '\"' after object key:value pair", 13}},
}
func TestIdentErrors(t *testing.T) {
for i, tt := range indentErrorTests {
slice := make([]uint8, 0)
buf := bytes.NewBuffer(slice)
if err := Indent(buf, []uint8(tt.in), "", ""); err != nil {
if !reflect.DeepEqual(err, tt.err) {
t.Errorf("#%d: Indent: %#v", i, err)
continue
}
}
}
}
func TestNextValueBig(t *testing.T) { func TestNextValueBig(t *testing.T) {
initBig() initBig()
var scan scanner var scan scanner
......
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