generic: generalise json check
This code is shared for all json checks. Signed-off-by: Yonah <contrib@gensokyo.uk>
This commit is contained in:
parent
821e46d405
commit
2f34599823
@ -1,10 +1,7 @@
|
|||||||
package monstersirenfetch_test
|
package monstersirenfetch_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
_ "embed"
|
_ "embed"
|
||||||
"encoding/json"
|
|
||||||
"reflect"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
. "git.gensokyo.uk/yonah/monstersirenfetch"
|
. "git.gensokyo.uk/yonah/monstersirenfetch"
|
||||||
@ -14,7 +11,7 @@ import (
|
|||||||
var albumsJSON []byte
|
var albumsJSON []byte
|
||||||
|
|
||||||
func TestAlbums(t *testing.T) {
|
func TestAlbums(t *testing.T) {
|
||||||
want := Albums{Code: 0, Msg: "", Data: []Album{
|
checkJSONRoundTrip(t, Albums{Code: 0, Msg: "", Data: []Album{
|
||||||
{CID: 2444, Name: "无忧梦呓OST", CoverURL: "https://web.hycdn.cn/siren/pic/20250905/2039eb5cf7f7d3a951d5f653c6d33f64.jpg", Artists: []string{"塞壬唱片-MSR"}},
|
{CID: 2444, Name: "无忧梦呓OST", CoverURL: "https://web.hycdn.cn/siren/pic/20250905/2039eb5cf7f7d3a951d5f653c6d33f64.jpg", Artists: []string{"塞壬唱片-MSR"}},
|
||||||
{CID: 5192, Name: "焰烬曙明OST", CoverURL: "https://web.hycdn.cn/siren/pic/20250905/6e32685dcc113791d9e90c14e18634c6.jpg", Artists: []string{"塞壬唱片-MSR"}},
|
{CID: 5192, Name: "焰烬曙明OST", CoverURL: "https://web.hycdn.cn/siren/pic/20250905/6e32685dcc113791d9e90c14e18634c6.jpg", Artists: []string{"塞壬唱片-MSR"}},
|
||||||
{CID: 1019, Name: "in your blue eyes", CoverURL: "https://web.hycdn.cn/siren/pic/20250903/63d83dcec8698fde96edcd039d9f4fcf.jpg", Artists: []string{"Ave Mujica"}},
|
{CID: 1019, Name: "in your blue eyes", CoverURL: "https://web.hycdn.cn/siren/pic/20250903/63d83dcec8698fde96edcd039d9f4fcf.jpg", Artists: []string{"Ave Mujica"}},
|
||||||
@ -261,31 +258,5 @@ func TestAlbums(t *testing.T) {
|
|||||||
{CID: 1030, Name: "Speed of Light", CoverURL: "https://web.hycdn.cn/siren/pic/20210322/56cbcd1d0093d8ee8ee22bf6d68ab4a6.jpg", Artists: []string{"塞壬唱片-MSR", "DJ Okawari"}},
|
{CID: 1030, Name: "Speed of Light", CoverURL: "https://web.hycdn.cn/siren/pic/20210322/56cbcd1d0093d8ee8ee22bf6d68ab4a6.jpg", Artists: []string{"塞壬唱片-MSR", "DJ Okawari"}},
|
||||||
{CID: 8947, Name: "火蓝之心原声带", CoverURL: "https://web.hycdn.cn/siren/pic/20210322/199df150e1370a4138fa0352ff95a5b5.jpg", Artists: []string{"Alive Until Sunset", " Emperor", " D.D.D."}},
|
{CID: 8947, Name: "火蓝之心原声带", CoverURL: "https://web.hycdn.cn/siren/pic/20210322/199df150e1370a4138fa0352ff95a5b5.jpg", Artists: []string{"Alive Until Sunset", " Emperor", " D.D.D."}},
|
||||||
{CID: 4527, Name: "明日方舟OST1", CoverURL: "https://web.hycdn.cn/siren/pic/20210322/bb51040a1dfe53b97590451156852bd6.jpg", Artists: []string{"塞壬唱片-MSR"}},
|
{CID: 4527, Name: "明日方舟OST1", CoverURL: "https://web.hycdn.cn/siren/pic/20210322/bb51040a1dfe53b97590451156852bd6.jpg", Artists: []string{"塞壬唱片-MSR"}},
|
||||||
}}
|
}}, albumsJSON)
|
||||||
|
|
||||||
t.Run("marshal", func(t *testing.T) {
|
|
||||||
buf := new(bytes.Buffer)
|
|
||||||
buf.Grow(len(albumsJSON))
|
|
||||||
e := json.NewEncoder(buf)
|
|
||||||
// to match upstream behaviour
|
|
||||||
e.SetEscapeHTML(false)
|
|
||||||
err := e.Encode(&want)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Marshal: error = %v", err)
|
|
||||||
}
|
|
||||||
got := bytes.TrimSuffix(buf.Bytes(), []byte{'\n'})
|
|
||||||
if string(got) != string(albumsJSON) {
|
|
||||||
t.Errorf("Marshal:\n%s\nwant\n%s", buf, string(albumsJSON))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("unmarshal", func(t *testing.T) {
|
|
||||||
var got Albums
|
|
||||||
if err := json.Unmarshal(albumsJSON, &got); err != nil {
|
|
||||||
t.Fatalf("Unmarshal: error = %v", err)
|
|
||||||
}
|
|
||||||
if !reflect.DeepEqual(&got, &want) {
|
|
||||||
t.Errorf("Unmarshal:\n%#v\nwant\n%#v", got, want)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package monstersirenfetch_test
|
package monstersirenfetch_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -59,3 +60,31 @@ func newSyntaxError(msg string, offset int64) *json.SyntaxError {
|
|||||||
reflect.NewAt(msgV.Type(), unsafe.Pointer(msgV.UnsafeAddr())).Elem().SetString(msg)
|
reflect.NewAt(msgV.Type(), unsafe.Pointer(msgV.UnsafeAddr())).Elem().SetString(msg)
|
||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func checkJSONRoundTrip[T any](t *testing.T, v T, data []byte) {
|
||||||
|
t.Run("marshal", func(t *testing.T) {
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
buf.Grow(len(data))
|
||||||
|
e := json.NewEncoder(buf)
|
||||||
|
// to match upstream behaviour
|
||||||
|
e.SetEscapeHTML(false)
|
||||||
|
err := e.Encode(&v)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Marshal: error = %v", err)
|
||||||
|
}
|
||||||
|
got := buf.Bytes()[:buf.Len()-1]
|
||||||
|
if string(got) != string(data) {
|
||||||
|
t.Errorf("Marshal:\n%s\nwant\n%s", string(got), string(data))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("unmarshal", func(t *testing.T) {
|
||||||
|
var got T
|
||||||
|
if err := json.Unmarshal(data, &got); err != nil {
|
||||||
|
t.Fatalf("Unmarshal: error = %v", err)
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(&got, &v) {
|
||||||
|
t.Errorf("Unmarshal:\n%#v\nwant\n%#v", got, v)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user