learnlytics-go/templ/lsp/protocol/window_test.go

794 lines
17 KiB
Go
Raw Normal View History

2025-03-20 12:35:13 +01:00
// SPDX-FileCopyrightText: 2019 The Go Language Server Authors
// SPDX-License-Identifier: BSD-3-Clause
package protocol
import (
"fmt"
"strconv"
"testing"
"encoding/json"
"github.com/google/go-cmp/cmp"
)
func TestShowMessageParams(t *testing.T) {
t.Parallel()
const (
want = `{"message":"error message","type":1}`
wantUnknown = `{"message":"unknown message","type":0}`
)
wantType := ShowMessageParams{
Message: "error message",
Type: MessageTypeError,
}
wantTypeUnkonwn := ShowMessageParams{
Message: "unknown message",
Type: MessageType(0),
}
t.Run("Marshal", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
field ShowMessageParams
want string
wantMarshalErr bool
wantErr bool
}{
{
name: "Valid",
field: wantType,
want: want,
wantMarshalErr: false,
wantErr: false,
},
{
name: "Unknown",
field: wantTypeUnkonwn,
want: wantUnknown,
wantMarshalErr: false,
wantErr: false,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
got, err := json.Marshal(&tt.field)
if (err != nil) != tt.wantMarshalErr {
t.Fatal(err)
}
if diff := cmp.Diff(tt.want, string(got)); (diff != "") != tt.wantErr {
t.Errorf("%s: wantErr: %t\n(-want +got)\n%s", tt.name, tt.wantErr, diff)
}
})
}
})
t.Run("Unmarshal", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
field string
want ShowMessageParams
wantUnmarshalErr bool
wantErr bool
}{
{
name: "Valid",
field: want,
want: wantType,
wantUnmarshalErr: false,
wantErr: false,
},
{
name: "Unknown",
field: wantUnknown,
want: wantTypeUnkonwn,
wantUnmarshalErr: false,
wantErr: false,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
var got ShowMessageParams
if err := json.Unmarshal([]byte(tt.field), &got); (err != nil) != tt.wantUnmarshalErr {
t.Fatal(err)
}
if diff := cmp.Diff(tt.want, got); (diff != "") != tt.wantErr {
t.Errorf("%s: wantErr: %t\n(-want +got)\n%s", tt.name, tt.wantErr, diff)
}
})
}
})
}
func TestShowMessageRequestParams(t *testing.T) {
t.Parallel()
const (
want = `{"actions":[{"title":"Retry"}],"message":"error message","type":1}`
wantUnknown = `{"actions":[{"title":"Retry"}],"message":"unknown message","type":0}`
)
wantType := ShowMessageRequestParams{
Actions: []MessageActionItem{
{
Title: "Retry",
},
},
Message: "error message",
Type: MessageTypeError,
}
wantTypeUnkonwn := ShowMessageRequestParams{
Actions: []MessageActionItem{
{
Title: "Retry",
},
},
Message: "unknown message",
Type: MessageType(0),
}
t.Run("Marshal", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
field ShowMessageRequestParams
want string
wantMarshalErr bool
wantErr bool
}{
{
name: "Valid",
field: wantType,
want: want,
wantMarshalErr: false,
wantErr: false,
},
{
name: "Unknown",
field: wantTypeUnkonwn,
want: wantUnknown,
wantMarshalErr: false,
wantErr: false,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
got, err := json.Marshal(&tt.field)
if (err != nil) != tt.wantMarshalErr {
t.Fatal(err)
}
if diff := cmp.Diff(tt.want, string(got)); (diff != "") != tt.wantErr {
t.Errorf("%s: wantErr: %t\n(-want +got)\n%s", tt.name, tt.wantErr, diff)
}
})
}
})
t.Run("Unmarshal", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
field string
want ShowMessageRequestParams
wantUnmarshalErr bool
wantErr bool
}{
{
name: "Valid",
field: want,
want: wantType,
wantUnmarshalErr: false,
wantErr: false,
},
{
name: "Unknown",
field: wantUnknown,
want: wantTypeUnkonwn,
wantUnmarshalErr: false,
wantErr: false,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
var got ShowMessageRequestParams
if err := json.Unmarshal([]byte(tt.field), &got); (err != nil) != tt.wantUnmarshalErr {
t.Fatal(err)
}
if diff := cmp.Diff(tt.want, got); (diff != "") != tt.wantErr {
t.Errorf("%s: wantErr: %t\n(-want +got)\n%s", tt.name, tt.wantErr, diff)
}
})
}
})
}
func TestMessageActionItem(t *testing.T) {
t.Parallel()
const (
want = `{"title":"Retry"}`
wantOpenLog = `{"title":"Open Log"}`
)
wantType := MessageActionItem{
Title: "Retry",
}
wantTypeOpenLog := MessageActionItem{
Title: "Open Log",
}
t.Run("Marshal", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
field MessageActionItem
want string
wantMarshalErr bool
wantErr bool
}{
{
name: "Valid",
field: wantType,
want: want,
wantMarshalErr: false,
wantErr: false,
},
{
name: "Unknown",
field: wantTypeOpenLog,
want: wantOpenLog,
wantMarshalErr: false,
wantErr: false,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
got, err := json.Marshal(&tt.field)
if (err != nil) != tt.wantMarshalErr {
t.Fatal(err)
}
if diff := cmp.Diff(tt.want, string(got)); (diff != "") != tt.wantErr {
t.Errorf("%s: wantErr: %t\n(-want +got)\n%s", tt.name, tt.wantErr, diff)
}
})
}
})
t.Run("Unmarshal", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
field string
want MessageActionItem
wantUnmarshalErr bool
wantErr bool
}{
{
name: "Valid",
field: want,
want: wantType,
wantUnmarshalErr: false,
wantErr: false,
},
{
name: "Unknown",
field: wantOpenLog,
want: wantTypeOpenLog,
wantUnmarshalErr: false,
wantErr: false,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
var got MessageActionItem
if err := json.Unmarshal([]byte(tt.field), &got); (err != nil) != tt.wantUnmarshalErr {
t.Fatal(err)
}
if diff := cmp.Diff(tt.want, got); (diff != "") != tt.wantErr {
t.Errorf("%s: wantErr: %t\n(-want +got)\n%s", tt.name, tt.wantErr, diff)
}
})
}
})
}
func TestLogMessageParams(t *testing.T) {
t.Parallel()
const (
want = `{"message":"error message","type":1}`
wantUnknown = `{"message":"unknown message","type":0}`
)
wantType := LogMessageParams{
Message: "error message",
Type: MessageTypeError,
}
wantTypeUnknown := LogMessageParams{
Message: "unknown message",
Type: MessageType(0),
}
t.Run("Marshal", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
field LogMessageParams
want string
wantMarshalErr bool
wantErr bool
}{
{
name: "Valid",
field: wantType,
want: want,
wantMarshalErr: false,
wantErr: false,
},
{
name: "Unknown",
field: wantTypeUnknown,
want: wantUnknown,
wantMarshalErr: false,
wantErr: false,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
got, err := json.Marshal(&tt.field)
if (err != nil) != tt.wantMarshalErr {
t.Fatal(err)
}
if diff := cmp.Diff(tt.want, string(got)); (diff != "") != tt.wantErr {
t.Errorf("%s: wantErr: %t\n(-want +got)\n%s", tt.name, tt.wantErr, diff)
}
})
}
})
t.Run("Unmarshal", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
field string
want LogMessageParams
wantUnmarshalErr bool
wantErr bool
}{
{
name: "Valid",
field: want,
want: wantType,
wantUnmarshalErr: false,
wantErr: false,
},
{
name: "Unknown",
field: wantUnknown,
want: wantTypeUnknown,
wantUnmarshalErr: false,
wantErr: false,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
var got LogMessageParams
if err := json.Unmarshal([]byte(tt.field), &got); (err != nil) != tt.wantUnmarshalErr {
t.Fatal(err)
}
if diff := cmp.Diff(tt.want, got); (diff != "") != tt.wantErr {
t.Errorf("%s: wantErr: %t\n(-want +got)\n%s", tt.name, tt.wantErr, diff)
}
})
}
})
}
func TestWorkDoneProgressCreateParams(t *testing.T) {
t.Parallel()
const (
wantToken = int32(1569)
invalidToken = int32(1348)
)
var (
wantString = `{"token":"` + strconv.FormatInt(int64(wantToken), 10) + `"}`
wantInvalidString = `{"token":"` + strconv.FormatInt(int64(invalidToken), 10) + `"}`
wantNumber = `{"token":` + strconv.FormatInt(int64(wantToken), 10) + `}`
wantInvalidNumber = `{"token":` + strconv.FormatInt(int64(invalidToken), 10) + `}`
)
token := NewProgressToken(strconv.FormatInt(int64(wantToken), 10))
wantTypeString := WorkDoneProgressCreateParams{
Token: *token,
}
numberToken := NewNumberProgressToken(wantToken)
wantTypeNumber := WorkDoneProgressCreateParams{
Token: *numberToken,
}
t.Run("Marshal", func(t *testing.T) {
tests := []struct {
name string
field WorkDoneProgressCreateParams
want string
wantMarshalErr bool
wantErr bool
}{
{
name: "Valid/String",
field: wantTypeString,
want: wantString,
wantMarshalErr: false,
wantErr: false,
},
{
name: "Valid/Number",
field: wantTypeNumber,
want: wantNumber,
wantMarshalErr: false,
wantErr: false,
},
{
name: "Invalid/String",
field: wantTypeString,
want: wantInvalidString,
wantMarshalErr: false,
wantErr: true,
},
{
name: "Invalid/Number",
field: wantTypeNumber,
want: wantInvalidNumber,
wantMarshalErr: false,
wantErr: true,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
got, err := json.Marshal(&tt.field)
if (err != nil) != tt.wantMarshalErr {
t.Fatal(err)
}
if diff := cmp.Diff(tt.want, string(got)); (diff != "") != tt.wantErr {
t.Errorf("%s: wantErr: %t\n(-want +got)\n%s", tt.name, tt.wantErr, diff)
}
})
}
})
t.Run("Unmarshal", func(t *testing.T) {
tests := []struct {
name string
field string
want WorkDoneProgressCreateParams
wantUnmarshalErr bool
wantErr bool
}{
{
name: "Valid/String",
field: wantString,
want: wantTypeString,
wantUnmarshalErr: false,
wantErr: false,
},
{
name: "Valid/Number",
field: wantNumber,
want: wantTypeNumber,
wantUnmarshalErr: false,
wantErr: false,
},
{
name: "Invalid/String",
field: wantInvalidString,
want: wantTypeString,
wantUnmarshalErr: false,
wantErr: true,
},
{
name: "Invalid/Number",
field: wantInvalidNumber,
want: wantTypeNumber,
wantUnmarshalErr: false,
wantErr: true,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
var got WorkDoneProgressCreateParams
if err := json.Unmarshal([]byte(tt.field), &got); (err != nil) != tt.wantUnmarshalErr {
t.Fatal(err)
}
if diff := cmp.Diff(fmt.Sprint(got.Token), strconv.FormatInt(int64(wantToken), 10)); (diff != "") != tt.wantErr {
t.Errorf("%s: wantErr: %t\n(-want +got)\n%s", tt.name, tt.wantErr, diff)
}
})
}
})
}
func TestWorkDoneProgressCancelParams(t *testing.T) {
t.Parallel()
const (
wantToken = int32(1569)
invalidToken = int32(1348)
)
var (
want = `{"token":` + strconv.FormatInt(int64(wantToken), 10) + `}`
wantInvalid = `{"token":` + strconv.FormatInt(int64(invalidToken), 10) + `}`
)
token := NewNumberProgressToken(wantToken)
wantType := WorkDoneProgressCancelParams{
Token: *token,
}
t.Run("Marshal", func(t *testing.T) {
tests := []struct {
name string
field WorkDoneProgressCancelParams
want string
wantMarshalErr bool
wantErr bool
}{
{
name: "Valid",
field: wantType,
want: want,
wantMarshalErr: false,
wantErr: false,
},
{
name: "Invalid",
field: wantType,
want: wantInvalid,
wantMarshalErr: false,
wantErr: true,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
got, err := json.Marshal(&tt.field)
if (err != nil) != tt.wantMarshalErr {
t.Fatal(err)
}
if diff := cmp.Diff(tt.want, string(got)); (diff != "") != tt.wantErr {
t.Errorf("%s: wantErr: %t\n(-want +got)\n%s", tt.name, tt.wantErr, diff)
}
})
}
})
t.Run("Unmarshal", func(t *testing.T) {
tests := []struct {
name string
field string
want WorkDoneProgressCancelParams
wantUnmarshalErr bool
wantErr bool
}{
{
name: "Valid",
field: want,
want: wantType,
wantUnmarshalErr: false,
wantErr: false,
},
{
name: "Invalid",
field: wantInvalid,
want: wantType,
wantUnmarshalErr: false,
wantErr: true,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
var got WorkDoneProgressCancelParams
if err := json.Unmarshal([]byte(tt.field), &got); (err != nil) != tt.wantUnmarshalErr {
t.Fatal(err)
}
if diff := cmp.Diff(fmt.Sprint(got.Token), strconv.FormatInt(int64(wantToken), 10)); (diff != "") != tt.wantErr {
t.Errorf("%s: wantErr: %t\n(-want +got)\n%s", tt.name, tt.wantErr, diff)
}
})
}
})
}
func TestMessageType_String(t *testing.T) {
t.Parallel()
tests := []struct {
name string
m MessageType
want string
}{
{
name: "Error",
m: MessageTypeError,
want: "error",
},
{
name: "Warning",
m: MessageTypeWarning,
want: "warning",
},
{
name: "Info",
m: MessageTypeInfo,
want: "info",
},
{
name: "Log",
m: MessageTypeLog,
want: "log",
},
{
name: "Unknown",
m: MessageType(0),
want: "0",
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if got := tt.m.String(); got != tt.want {
t.Errorf("MessageType.String() = %v, want %v", tt.want, got)
}
})
}
}
func TestMessageType_Enabled(t *testing.T) {
t.Parallel()
tests := []struct {
name string
m MessageType
level MessageType
want bool
}{
{
name: "ErrorError",
m: MessageTypeError,
level: MessageTypeError,
want: true,
},
{
name: "ErrorInfo",
m: MessageTypeError,
level: MessageTypeInfo,
want: false,
},
{
name: "ErrorUnknown",
m: MessageTypeError,
level: MessageType(0),
want: false,
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if got := tt.m.Enabled(tt.level); got != tt.want {
t.Errorf("MessageType.Enabled(%v) = %v, want %v", tt.level, tt.want, got)
}
})
}
}
func TestToMessageType(t *testing.T) {
t.Parallel()
tests := []struct {
name string
level string
want MessageType
}{
{
name: "Error",
level: "error",
want: MessageTypeError,
},
{
name: "Warning",
level: "warning",
want: MessageTypeWarning,
},
{
name: "Info",
level: "info",
want: MessageTypeInfo,
},
{
name: "Log",
level: "log",
want: MessageTypeLog,
},
{
name: "Unknown",
level: "0",
want: MessageType(0),
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if got := ToMessageType(tt.level); got != tt.want {
t.Errorf("ToMessageType(%v) = %v, want %v", tt.level, tt.want, got)
}
})
}
}