Files
snowluma/snowluma_test.go

76 lines
2.1 KiB
Go

package snowluma
import (
"encoding/json"
"testing"
)
func TestCQCodeRoundTrip(t *testing.T) {
segs := []Segment{
Text("hello "),
At(12345),
Text(" ,[bracket]&comma"),
Image("http://x/y.png"),
}
encoded := EncodeCQ(segs)
decoded := ParseCQ(encoded)
if len(decoded) != len(segs) {
t.Fatalf("segment count mismatch: got %d want %d", len(decoded), len(segs))
}
if decoded[0].Type != "text" || decoded[0].Data["text"] != "hello " {
t.Errorf("text segment wrong: %+v", decoded[0])
}
if decoded[1].Type != "at" || decoded[1].Data["qq"] != "12345" {
t.Errorf("at segment wrong: %+v", decoded[1])
}
if decoded[3].Type != "image" || decoded[3].Data["file"] != "http://x/y.png" {
t.Errorf("image segment wrong: %+v", decoded[3])
}
}
func TestDecodeMessageArrayAndString(t *testing.T) {
arr := json.RawMessage(`[{"type":"text","data":{"text":"hi"}},{"type":"at","data":{"qq":"all"}}]`)
segs, err := DecodeMessage(arr)
if err != nil {
t.Fatal(err)
}
if len(segs) != 2 || segs[1].Type != "at" || segs[1].Data["qq"] != "all" {
t.Fatalf("array decode wrong: %+v", segs)
}
str := json.RawMessage(`"hello [CQ:at,qq=10001] world"`)
segs, err = DecodeMessage(str)
if err != nil {
t.Fatal(err)
}
if len(segs) != 3 || segs[1].Type != "at" || segs[1].Data["qq"] != "10001" {
t.Fatalf("string decode wrong: %+v", segs)
}
}
func TestDecodeEventNoticeExtra(t *testing.T) {
data := []byte(`{"post_type":"notice","notice_type":"notify","sub_type":"poke","group_id":1,"user_id":2,"target_id":3,"custom_field":"kept"}`)
ev, err := decodeEvent(data)
if err != nil {
t.Fatal(err)
}
if ev.Notice == nil || ev.Notice.SubType != "poke" {
t.Fatalf("notice decode wrong: %+v", ev.Notice)
}
if ev.Notice.Extra["custom_field"] != "kept" {
t.Fatalf("extra field lost: %+v", ev.Notice.Extra)
}
}
func TestIntString(t *testing.T) {
var a IntString
if err := json.Unmarshal([]byte(`123`), &a); err != nil || a != 123 {
t.Fatalf("numeric intstring failed: %v %d", err, a)
}
var b IntString
if err := json.Unmarshal([]byte(`"456"`), &b); err != nil || b != 456 {
t.Fatalf("string intstring failed: %v %d", err, b)
}
}