first commit
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
// Tests for the plugin wire types (#261). These assert the commands/call
|
||||
// request and result types round-trip through JSON marshal/unmarshal so the
|
||||
// on-the-wire shape (field names, omitempty behavior) stays stable.
|
||||
package plugin
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestCommandCallParamsRoundTrip(t *testing.T) {
|
||||
want := CommandCallParams{
|
||||
Name: "review",
|
||||
Args: json.RawMessage(`{"path":"foo.go","verbose":true}`),
|
||||
}
|
||||
|
||||
data, err := json.Marshal(want)
|
||||
if err != nil {
|
||||
t.Fatalf("marshal: %v", err)
|
||||
}
|
||||
|
||||
// Params must name its argument field "arguments" to match CallParams.
|
||||
var shape struct {
|
||||
Name string `json:"name"`
|
||||
Args json.RawMessage `json:"arguments"`
|
||||
}
|
||||
if err := json.Unmarshal(data, &shape); err != nil {
|
||||
t.Fatalf("decode shape: %v", err)
|
||||
}
|
||||
if shape.Name != want.Name {
|
||||
t.Errorf("name = %q, want %q", shape.Name, want.Name)
|
||||
}
|
||||
|
||||
var got CommandCallParams
|
||||
if err := json.Unmarshal(data, &got); err != nil {
|
||||
t.Fatalf("unmarshal: %v", err)
|
||||
}
|
||||
if got.Name != want.Name {
|
||||
t.Errorf("Name = %q, want %q", got.Name, want.Name)
|
||||
}
|
||||
if !json.Valid(got.Args) || string(got.Args) != string(want.Args) {
|
||||
t.Errorf("Args = %s, want %s", got.Args, want.Args)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCommandCallResultRoundTrip(t *testing.T) {
|
||||
want := CommandCallResult{
|
||||
Prompt: "Please summarize the following changes.",
|
||||
Notifications: []CommandNotification{
|
||||
{Message: "loaded 3 files", Type: "info"},
|
||||
{Message: "1 file skipped", Type: "warning"},
|
||||
{Message: "done"},
|
||||
},
|
||||
}
|
||||
|
||||
data, err := json.Marshal(want)
|
||||
if err != nil {
|
||||
t.Fatalf("marshal: %v", err)
|
||||
}
|
||||
|
||||
var got CommandCallResult
|
||||
if err := json.Unmarshal(data, &got); err != nil {
|
||||
t.Fatalf("unmarshal: %v", err)
|
||||
}
|
||||
if !reflect.DeepEqual(got, want) {
|
||||
t.Errorf("round-trip mismatch:\n got %+v\n want %+v", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
// TestCommandCallResultOmitEmpty confirms empty optional fields drop out of the
|
||||
// wire form, keeping notifications-free results minimal.
|
||||
func TestCommandCallResultOmitEmpty(t *testing.T) {
|
||||
data, err := json.Marshal(CommandCallResult{})
|
||||
if err != nil {
|
||||
t.Fatalf("marshal: %v", err)
|
||||
}
|
||||
if got := string(data); got != "{}" {
|
||||
t.Errorf("empty result marshaled to %s, want {}", got)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user