forked from mjohnson9/eve
/
decoder_test.go
107 lines (95 loc) · 2.38 KB
/
decoder_test.go
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
package eve_test
import (
"reflect"
"testing"
"time"
"github.com/nightexcessive/eve"
)
type TestSet struct {
ID int `xml:"rowID,attr"`
Name string `xml:"name,attr"`
}
type TestResult struct {
Set1 []*TestSet `eve:"rowset1"`
Set2 []*TestSet `eve:"rowset2"`
}
func TestDecoder(t *testing.T) {
const testData = `
<?xml version='1.0' encoding='UTF-8'?>
<eveapi version="2">
<currentTime>2006-01-02 15:04:05</currentTime>
<result>
<rowset name="rowset1" key="rowID" columns="rowID,name">
<row rowID="1" name="1-1"/>
<row rowID="2" name="1-2"/>
</rowset>
<rowset name="rowset2" key="rowID,name" columns="rowID,name">
<row rowID="1" name="2-1"/>
<row rowID="2" name="2-2"/>
</rowset>
</result>
<cachedUntil>2020-01-02 15:04:05</cachedUntil>
</eveapi>`
expectedMetadata := &eve.Metadata{
Expires: time.Date(2020, time.January, 2, 15, 4, 5, 0, eve.Timezone),
RowSets: []*eve.RowSet{
&eve.RowSet{
Name: "rowset1",
Keys: []string{"rowID"},
Columns: []string{"rowID", "name"},
},
&eve.RowSet{
Name: "rowset2",
Keys: []string{"rowID", "name"},
Columns: []string{"rowID", "name"},
},
},
}
expectedOutput := &TestResult{
Set1: []*TestSet{
&TestSet{
ID: 1,
Name: "1-1",
},
&TestSet{
ID: 2,
Name: "1-2",
},
},
Set2: []*TestSet{
&TestSet{
ID: 1,
Name: "2-1",
},
&TestSet{
ID: 2,
Name: "2-2",
},
},
}
testOutput := new(TestResult)
metadata, err := eve.Decode([]byte(testData), testOutput)
if err != nil {
t.Fatalf("Error in Decode: %s", err)
}
if !reflect.DeepEqual(metadata, expectedMetadata) {
t.Errorf("metadata: got %+v, expected %+v", metadata, expectedMetadata)
}
if !reflect.DeepEqual(testOutput, expectedOutput) {
t.Errorf("output: got %+v, expected %+v", testOutput, expectedOutput)
}
}
func TestNonPointer(t *testing.T) {
nonpointer := TestResult{}
_, err := eve.Decode([]byte(""), nonpointer)
if err == nil || err.Error() != "non-pointer passed to Decode" {
t.Errorf("expected an error due to a non-pointer being passed to decode. got %s", err)
}
}
func TestNonStruct(t *testing.T) {
badValue := make([]string, 0, 5)
_, err := eve.Decode([]byte(""), &badValue)
if err == nil || err.Error() != "pointer to a non-struct passed to Decode" {
t.Errorf("expected an error due to a non-struct being passed to decode. got %s", err)
}
}