76 lines
2.1 KiB
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)
|
|
}
|
|
}
|