-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcoverage_test.go
More file actions
131 lines (115 loc) · 3 KB
/
Copy pathcoverage_test.go
File metadata and controls
131 lines (115 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package binary
import (
"bytes"
"io"
"testing"
"github.com/tinywasm/model"
)
func TestCoverageGaps(t *testing.T) {
// SetLog
SetLog(func(msg ...any) {})
SetLog(nil)
// Encode/Decode errors and branches
t.Run("EncodeDecodeBranches", func(t *testing.T) {
// Encode to invalid output
err := Encode(&simpleStruct{Name: "test"}, 1)
if err == nil {
t.Error("Expected error encoding to int")
}
// Decode from invalid input
var bs simpleStruct
err = Decode(1, &bs)
if err == nil {
t.Error("Expected error decoding from int")
}
// Decode from io.Reader
var out testDecodableString
err = Decode(bytes.NewReader([]byte{4, 't', 'e', 's', 't'}), &out)
if err != nil {
t.Errorf("Unexpected error decoding from reader: %v", err)
}
if out.val != "test" {
t.Errorf("Expected 'test', got %v", out.val)
}
// Encode to io.Writer
var buf bytes.Buffer
err = Encode(testEncodableString("test"), &buf)
if err != nil {
t.Errorf("Unexpected error encoding to writer: %v", err)
}
if !bytes.Equal(buf.Bytes(), []byte{4, 't', 'e', 's', 't'}) {
t.Errorf("Expected encoded 'test', got %v", buf.Bytes())
}
})
t.Run("CodecCoverage", func(t *testing.T) {
// boolSliceCodec replacement test
type BoolSlice struct {
B []bool
}
bs := &BoolSlice{B: []bool{true, false, true}}
// Manually implementing Encodable/Decodable for the test
encBs := &testEncodableBoolSlice{B: bs.B}
var data []byte
err := Encode(encBs, &data)
if err != nil {
t.Errorf("Encode boolSlice failed: %v", err)
}
decBs := &testEncodableBoolSlice{}
err = Decode(data, decBs)
if err != nil {
t.Errorf("Decode boolSlice failed: %v", err)
}
})
t.Run("ReaderCoverage", func(t *testing.T) {
r := newSliceReader([]byte{1, 2, 3})
if r.Size() != 3 {
t.Errorf("Expected size 3, got %d", r.Size())
}
// Reach EOF
r.Slice(3)
if r.Len() != 0 {
t.Errorf("Expected len 0, got %d", r.Len())
}
_, err := r.ReadByte()
if err != io.EOF {
t.Errorf("Expected EOF, got %v", err)
}
_, err = r.Read(make([]byte, 1))
if err != io.EOF {
t.Errorf("Expected EOF, got %v", err)
}
_, err = r.Slice(1)
if err != io.EOF {
t.Errorf("Expected EOF, got %v", err)
}
// ReadUvarint overflow/EOF
r2 := newSliceReader([]byte{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01})
_, err = r2.ReadUvarint()
if err == nil {
t.Error("Expected error on varint overflow")
}
r3 := newSliceReader([]byte{0x80})
_, err = r3.ReadUvarint()
if err != io.EOF {
t.Errorf("Expected EOF, got %v", err)
}
})
}
type testEncodableBoolSlice struct {
B []bool
}
func (t *testEncodableBoolSlice) IsNil() bool { return t == nil }
func (t *testEncodableBoolSlice) EncodeFields(w model.FieldWriter) {
aw := w.Array("B", len(t.B))
for i := 0; i < len(t.B); i++ {
aw.Bool(t.B[i])
}
}
func (t *testEncodableBoolSlice) DecodeFields(r model.FieldReader) {
if ar, ok := r.Array("B"); ok {
t.B = make([]bool, ar.Len())
for i := 0; i < ar.Len(); i++ {
t.B[i] = ar.Bool(i)
}
}
}