| 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")
|
| + })
|
| + })
|
| +}
|
|
|