| Index: go/src/infra/libs/jsutil/jsutil_test.go
 | 
| diff --git a/go/src/infra/libs/jsutil/jsutil_test.go b/go/src/infra/libs/jsutil/jsutil_test.go
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..b0e9b614a78f4c7e2c8b7f5c411412e1281c6d16
 | 
| --- /dev/null
 | 
| +++ b/go/src/infra/libs/jsutil/jsutil_test.go
 | 
| @@ -0,0 +1,63 @@
 | 
| +// Copyright 2015 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +package jsutil
 | 
| +
 | 
| +import (
 | 
| +	"bytes"
 | 
| +	"encoding/json"
 | 
| +	"testing"
 | 
| +
 | 
| +	. "github.com/smartystreets/goconvey/convey"
 | 
| +)
 | 
| +
 | 
| +func TestGet(t *testing.T) {
 | 
| +	t.Parallel()
 | 
| +
 | 
| +	const testDoc = `
 | 
| +	[
 | 
| +		{
 | 
| +			"some": [1337, {"mixed": "values"}],
 | 
| +			"wat": "thing"
 | 
| +		},
 | 
| +		{}
 | 
| +	]
 | 
| +	`
 | 
| +
 | 
| +	var data interface{}
 | 
| +	dec := json.NewDecoder(bytes.NewBufferString(testDoc))
 | 
| +	dec.UseNumber()
 | 
| +	if err := dec.Decode(&data); err != nil {
 | 
| +		panic(err)
 | 
| +	}
 | 
| +
 | 
| +	Convey("Test Get and GetError", t, func() {
 | 
| +		Convey("can extract values", func() {
 | 
| +			So(len(Get(data, 0).(map[string]interface{})), ShouldEqual, 2)
 | 
| +			val, err := Get(data, 0, "some", 0).(json.Number).Int64()
 | 
| +			So(err, ShouldBeNil)
 | 
| +			So(val, ShouldEqual, 1337)
 | 
| +		})
 | 
| +
 | 
| +		Convey("getting a value that's not there panics", func() {
 | 
| +			So(func() {
 | 
| +				Get(data, "nope")
 | 
| +			}, ShouldPanic)
 | 
| +		})
 | 
| +
 | 
| +		Convey("errors are resonable", func() {
 | 
| +			_, err := GetError(data, 0, "some", 1, "mixed", 10)
 | 
| +			So(err.Error(), ShouldContainSubstring,
 | 
| +				"expected []interface{}, but got string")
 | 
| +
 | 
| +			_, err = GetError(data, 0, "some", 1, "mixed", "nonex")
 | 
| +			So(err.Error(), ShouldContainSubstring,
 | 
| +				"expected map[string]interface{}, but got string")
 | 
| +
 | 
| +			_, err = GetError(data, 0.1)
 | 
| +			So(err.Error(), ShouldContainSubstring,
 | 
| +				"expected string or int in pathElems, got float64 instead")
 | 
| +		})
 | 
| +	})
 | 
| +}
 | 
| 
 |