text tests
This commit is contained in:
@@ -0,0 +1,218 @@
|
||||
package text
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestComponent_JSON(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
json string
|
||||
want Component
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "simple text",
|
||||
json: `"hello"`,
|
||||
want: Component{Text: "hello"},
|
||||
},
|
||||
{
|
||||
name: "object text",
|
||||
json: `{"text":"hello","bold":true}`,
|
||||
want: Component{Text: "hello", Bold: ptr(true)},
|
||||
},
|
||||
{
|
||||
name: "array of components",
|
||||
json: `["hello", {"text":" world","color":"red"}]`,
|
||||
want: Component{
|
||||
Text: "hello",
|
||||
Extra: []Component{
|
||||
{Text: " world", Color: "red"},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "complex translation",
|
||||
json: `{"translate":"chat.type.text","with":["Player",{"text":"hello","italic":true}]}`,
|
||||
want: Component{
|
||||
Translate: "chat.type.text",
|
||||
With: []Component{
|
||||
{Text: "Player"},
|
||||
{Text: "hello", Italic: ptr(true)},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
var got Component
|
||||
if err := json.Unmarshal([]byte(tt.json), &got); (err != nil) != tt.wantErr {
|
||||
t.Fatalf("UnmarshalJSON() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
if !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("UnmarshalJSON() got = %+v, want %+v", got, tt.want)
|
||||
}
|
||||
|
||||
marshaled, err := json.Marshal(got)
|
||||
if err != nil {
|
||||
t.Fatalf("MarshalJSON() error = %v", err)
|
||||
}
|
||||
|
||||
var got2 Component
|
||||
if err := json.Unmarshal(marshaled, &got2); err != nil {
|
||||
t.Fatalf("UnmarshalJSON() back error = %v", err)
|
||||
}
|
||||
if !reflect.DeepEqual(got2, tt.want) {
|
||||
t.Errorf("Roundtrip failed: got = %+v, want %+v", got2, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestComponent_NBT(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
nbt any
|
||||
want Component
|
||||
}{
|
||||
{
|
||||
name: "simple text",
|
||||
nbt: "hello",
|
||||
want: Component{Text: "hello"},
|
||||
},
|
||||
{
|
||||
name: "object text",
|
||||
nbt: map[string]any{
|
||||
"text": "hello",
|
||||
"bold": int8(1),
|
||||
},
|
||||
want: Component{Text: "hello", Bold: ptr(true)},
|
||||
},
|
||||
{
|
||||
name: "extra components",
|
||||
nbt: map[string]any{
|
||||
"text": "hello",
|
||||
"extra": []any{
|
||||
map[string]any{"text": " world", "color": "red"},
|
||||
},
|
||||
},
|
||||
want: Component{
|
||||
Text: "hello",
|
||||
Extra: []Component{
|
||||
{Text: " world", Color: "red"},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
var got Component
|
||||
if err := got.FromNBT(tt.nbt); err != nil {
|
||||
t.Fatalf("FromNBT() error = %v", err)
|
||||
}
|
||||
if !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("FromNBT() got = %+v, want %+v", got, tt.want)
|
||||
}
|
||||
|
||||
nbtVal := got.ToNBT()
|
||||
var got2 Component
|
||||
if err := got2.FromNBT(nbtVal); err != nil {
|
||||
t.Fatalf("FromNBT() back error = %v", err)
|
||||
}
|
||||
if !reflect.DeepEqual(got2, tt.want) {
|
||||
t.Errorf("Roundtrip failed: got = %+v, want %+v", got2, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestPretty(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
s string
|
||||
want Component
|
||||
}{
|
||||
{
|
||||
name: "simple text",
|
||||
s: "Hello",
|
||||
want: Component{Text: "Hello"},
|
||||
},
|
||||
{
|
||||
name: "color and bold",
|
||||
s: "§c§lHello",
|
||||
want: Component{
|
||||
Extra: []Component{
|
||||
{Text: "Hello", Color: "red", Bold: ptr(true)},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := Pretty(tt.s)
|
||||
if got.Text != tt.want.Text {
|
||||
t.Errorf("Pretty().Text = %v, want %v", got.Text, tt.want.Text)
|
||||
}
|
||||
if !reflect.DeepEqual(got.Extra, tt.want.Extra) {
|
||||
t.Errorf("Pretty().Extra = %+v, want %+v", got.Extra, tt.want.Extra)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrettyF(t *testing.T) {
|
||||
got := PrettyF("Hello §b%s", "World")
|
||||
want := Component{
|
||||
Text: "Hello ",
|
||||
Extra: []Component{
|
||||
{Text: "World", Color: "aqua"},
|
||||
},
|
||||
}
|
||||
if !reflect.DeepEqual(got, want) {
|
||||
t.Errorf("PrettyF() = %+v, want %+v", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestComponent_String(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
comp Component
|
||||
want string
|
||||
}{
|
||||
{
|
||||
name: "simple text",
|
||||
comp: Component{Text: "Hello"},
|
||||
want: "Hello",
|
||||
},
|
||||
{
|
||||
name: "color and bold",
|
||||
comp: Component{
|
||||
Extra: []Component{
|
||||
{Text: "Hello", Color: "red", Bold: ptr(true)},
|
||||
},
|
||||
},
|
||||
want: "§c§lHello",
|
||||
},
|
||||
{
|
||||
name: "hex color",
|
||||
comp: Component{
|
||||
Color: "#ff0000",
|
||||
Text: "Red",
|
||||
},
|
||||
want: "§x§f§f§0§0§0§0Red",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := tt.comp.String(); got != tt.want {
|
||||
t.Errorf("Component.String() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user