代码拉取完成,页面将自动刷新
同步操作将从 YoMo/y3-codec-golang 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package y3
import (
"testing"
)
// 每个Packet最小长度是3个bytes
func TestLackLengthPacket(t *testing.T) {
buf := []byte{0x01, 0x01}
expected := "invalid y3 packet minimal size"
_, _, _, err := DecodePrimitivePacket(buf)
if err.Error() != expected {
t.Errorf("err actual = %v, and Expected = %v", err, expected)
}
}
func TestPacketWrongLength(t *testing.T) {
buf := []byte{0x04, 0x00, 0x02, 0x01}
expected := "malformed, Length can not smaller than 1"
_, _, _, err := DecodePrimitivePacket(buf)
if err != nil && err.Error() != expected {
t.Errorf("err should %v, actual = %v", expected, err)
}
}
// 测试读取 0x04:-1
func TestPacketRead(t *testing.T) {
buf := []byte{0x04, 0x01, 0x7F}
expectedTag := byte(0x04)
var expectedLength int32 = 1
expectedValue := []byte{0x7F}
res, endPos, _, err := DecodePrimitivePacket(buf)
if err != nil {
t.Errorf("err should nil, actual = %v", err)
}
if res.SeqID() != expectedTag {
t.Errorf("res.Tag actual = %v, and Expected = %v", res.SeqID(), expectedTag)
}
if res.length != uint32(expectedLength) {
t.Errorf("res.Length actual = %v, and Expected = %v", res.length, expectedLength)
}
if !_compareByteSlice(res.valBuf, expectedValue) {
t.Errorf("res.raw actual = %v, and Expected = %v", res.valBuf, expectedValue)
}
if endPos != 3 {
t.Errorf("endPos actual = %v, and Expected = %v", endPos, 3)
}
}
// 测试读取 0x0A:2
func TestParseInt32(t *testing.T) {
// 原例子数据存在问题,修改如下:
//buf := []byte{0x0A, 0x02, 0x01, 0x02}
buf := []byte{0x0A, 0x02, 0x81, 0x7F}
expected := int32(255)
res, _, _, err := DecodePrimitivePacket(buf)
if err != nil {
t.Errorf("err should nil, actual = %v", err)
}
val, err := res.ToInt32()
if err != nil {
t.Errorf("err should nil, actual = %v", err)
}
if val != expected {
t.Errorf("value actual = %v, and Expected = %v", val, expected)
}
}
// 测试 0x0B:"C"
func TestParseString(t *testing.T) {
buf := []byte{0x0B, 0x01, 0x43}
expectedValue := "C"
res, _, _, err := DecodePrimitivePacket(buf)
if err != nil {
t.Errorf("err should nil, actual = %v", err)
}
target, err := res.ToUTF8String()
if err != nil {
t.Errorf("err should be nil, actual = %v", err)
}
if expectedValue != target {
t.Errorf("Result actual = %v, and Expected = %v", t, expectedValue)
}
}
// compares two slice, every element is equal
func _compareByteSlice(left []byte, right []byte) bool {
if len(left) != len(right) {
return false
}
for i, v := range left {
if v != right[i] {
return false
}
}
return true
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。