.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.1-0.20210319172145-bda8f5cee399 / internal / jsonrpc2 / wire_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/internal/jsonrpc2/wire_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/internal/jsonrpc2/wire_test.go
new file mode 100644 (file)
index 0000000..ff62de0
--- /dev/null
@@ -0,0 +1,126 @@
+// Copyright 2020 The Go 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 jsonrpc2_test
+
+import (
+       "bytes"
+       "encoding/json"
+       "fmt"
+       "testing"
+
+       "golang.org/x/tools/internal/jsonrpc2"
+)
+
+var wireIDTestData = []struct {
+       name    string
+       id      jsonrpc2.ID
+       encoded []byte
+       plain   string
+       quoted  string
+}{
+       {
+               name:    `empty`,
+               encoded: []byte(`0`),
+               plain:   `0`,
+               quoted:  `#0`,
+       }, {
+               name:    `number`,
+               id:      jsonrpc2.NewIntID(43),
+               encoded: []byte(`43`),
+               plain:   `43`,
+               quoted:  `#43`,
+       }, {
+               name:    `string`,
+               id:      jsonrpc2.NewStringID("life"),
+               encoded: []byte(`"life"`),
+               plain:   `life`,
+               quoted:  `"life"`,
+       },
+}
+
+func TestIDFormat(t *testing.T) {
+       for _, test := range wireIDTestData {
+               t.Run(test.name, func(t *testing.T) {
+                       if got := fmt.Sprint(test.id); got != test.plain {
+                               t.Errorf("got %s expected %s", got, test.plain)
+                       }
+                       if got := fmt.Sprintf("%q", test.id); got != test.quoted {
+                               t.Errorf("got %s want %s", got, test.quoted)
+                       }
+               })
+       }
+}
+
+func TestIDEncode(t *testing.T) {
+       for _, test := range wireIDTestData {
+               t.Run(test.name, func(t *testing.T) {
+                       data, err := json.Marshal(&test.id)
+                       if err != nil {
+                               t.Fatal(err)
+                       }
+                       checkJSON(t, data, test.encoded)
+               })
+       }
+}
+
+func TestIDDecode(t *testing.T) {
+       for _, test := range wireIDTestData {
+               t.Run(test.name, func(t *testing.T) {
+                       var got *jsonrpc2.ID
+                       if err := json.Unmarshal(test.encoded, &got); err != nil {
+                               t.Fatal(err)
+                       }
+                       if got == nil {
+                               t.Errorf("got nil want %s", test.id)
+                       } else if *got != test.id {
+                               t.Errorf("got %s want %s", got, test.id)
+                       }
+               })
+       }
+}
+
+func TestErrorEncode(t *testing.T) {
+       b, err := json.Marshal(jsonrpc2.NewError(0, ""))
+       if err != nil {
+               t.Fatal(err)
+       }
+       checkJSON(t, b, []byte(`{
+               "code": 0,
+               "message": ""
+       }`))
+}
+
+func TestErrorResponse(t *testing.T) {
+       // originally reported in #39719, this checks that result is not present if
+       // it is an error response
+       r, _ := jsonrpc2.NewResponse(jsonrpc2.NewIntID(3), nil, fmt.Errorf("computing fix edits"))
+       data, err := json.Marshal(r)
+       if err != nil {
+               t.Fatal(err)
+       }
+       checkJSON(t, data, []byte(`{
+               "jsonrpc":"2.0",
+               "error":{
+                       "code":0,
+                       "message":"computing fix edits"
+               },
+               "id":3
+       }`))
+}
+
+func checkJSON(t *testing.T, got, want []byte) {
+       // compare the compact form, to allow for formatting differences
+       g := &bytes.Buffer{}
+       if err := json.Compact(g, []byte(got)); err != nil {
+               t.Fatal(err)
+       }
+       w := &bytes.Buffer{}
+       if err := json.Compact(w, []byte(want)); err != nil {
+               t.Fatal(err)
+       }
+       if g.String() != w.String() {
+               t.Fatalf("Got:\n%s\nWant:\n%s", g, w)
+       }
+}