summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2022-07-25 02:14:34 +0700
committerShulhan <ms@kilabit.info>2022-07-25 02:14:34 +0700
commite5171b60a91e5d212ef93725d46f977d24be007f (patch)
tree40cb4c0235b752521abe1cbfc1a094fa266ae9b6
parent6c72cd80c30f62885809ac874e9869fdb0a1aaaa (diff)
downloadpakakeh.go-e5171b60a91e5d212ef93725d46f977d24be007f.tar.xz
lib/xmlrpc: rewrite the test using test.Data
-rw-r--r--lib/xmlrpc/request_test.go196
-rw-r--r--lib/xmlrpc/testdata/marshal_test.txt13
-rw-r--r--lib/xmlrpc/testdata/unmarshal_test.txt74
3 files changed, 145 insertions, 138 deletions
diff --git a/lib/xmlrpc/request_test.go b/lib/xmlrpc/request_test.go
index 2617a63e..51befb73 100644
--- a/lib/xmlrpc/request_test.go
+++ b/lib/xmlrpc/request_test.go
@@ -5,7 +5,6 @@
package xmlrpc
import (
- "encoding/xml"
"testing"
"github.com/shuLhan/share/lib/test"
@@ -17,22 +16,16 @@ type testStruct struct {
}
func TestRequest_MarshalText(t *testing.T) {
- cases := []struct {
+ type testCase struct {
methodName string
params []interface{}
- exp string
- }{{
+ }
+
+ var cases = []testCase{{
methodName: "method.name",
params: []interface{}{
"param-string",
},
- exp: xml.Header + "<methodCall><methodName>method.name</methodName>" +
- "<params>" +
- "<param>" +
- "<value><string>param-string</string></value>" +
- "</param>" +
- "</params>" +
- "</methodCall>",
}, {
methodName: "test.struct",
params: []interface{}{
@@ -41,154 +34,81 @@ func TestRequest_MarshalText(t *testing.T) {
Y: true,
},
},
- exp: xml.Header + "<methodCall><methodName>test.struct</methodName>" +
- "<params><param><value><struct>" +
- "<member>" +
- "<name>X</name><value><int>1</int></value>" +
- "</member>" +
- "<member>" +
- "<name>Y</name><value><boolean>true</boolean></value>" +
- "</member>" +
- "</struct></value></param></params>" +
- "</methodCall>",
}, {
methodName: "test.array",
params: []interface{}{
[]string{"a", "b"},
},
- exp: xml.Header + "<methodCall><methodName>test.array</methodName>" +
- "<params><param><value><array><data>" +
- "<value><string>a</string></value>" +
- "<value><string>b</string></value>" +
- "</data></array></value></param></params>" +
- "</methodCall>",
}}
- for _, c := range cases {
- req, err := NewRequest(c.methodName, c.params)
+ var (
+ c testCase
+ req Request
+ tdata *test.Data
+ got []byte
+ exp []byte
+ err error
+ )
+
+ tdata, err = test.LoadData("testdata/marshal_test.txt")
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ for _, c = range cases {
+ req, err = NewRequest(c.methodName, c.params)
if err != nil {
t.Fatal(err)
}
- got, err := req.MarshalText()
+ got, err = req.MarshalText()
if err != nil {
t.Fatal(err)
}
- test.Assert(t, "Pack", c.exp, string(got))
+ exp = tdata.Output[c.methodName]
+ test.Assert(t, "Pack", string(exp), string(got))
}
}
func TestRequest_UnmarshalText(t *testing.T) {
- cases := []struct {
- desc string
- in string
- exp *Request
- expError string
- }{{
- desc: "Multiple param",
- in: `<?xml version="1.0"?>
- <methodCall>
- <methodName>method.name</methodName>
- <params>
- <param>
- <value>
- <string>
- param-string
- </string>
- </value>
- </param>
- <param>
- <value>
- <int>
- 1
- </int>
- </value>
- </param>
- </params>
- </methodCall>`,
- exp: &Request{
- MethodName: "method.name",
- Params: []*Value{{
- Kind: String,
- In: "param-string",
- }, {
- Kind: Integer,
- In: int32(1),
- }},
- },
- }, {
- desc: "Param as struct",
- in: `<?xml version="1.0"?>
- <methodCall>
- <methodName>test.struct</methodName>
- <params>
- <param>
- <value>
- <struct>
- <member>
- <name>X</name>
- <value><int>1</int></value>
- </member>
- <member>
- <name>Y</name>
- <value><boolean>true</boolean></value>
- </member>
- </struct>
- </value>
- </param>
- </params>
- </methodCall>`,
- exp: &Request{
- MethodName: "test.struct",
- Params: []*Value{{
- Kind: Struct,
- StructMembers: map[string]*Value{
- "X": &Value{
- Kind: Integer,
- In: int32(1),
- },
- "Y": &Value{
- Kind: Boolean,
- In: true,
- },
- },
- }},
- },
- }, {
- desc: "Param as array",
- in: `<?xml version="1.0"?>
- <methodCall><methodName>test.array</methodName>
- <params><param><value><array><data>
- <value><string>a</string></value>
- <value><string>b</string></value>
- </data></array></value></param></params>
- </methodCall>`,
- exp: &Request{
- MethodName: "test.array",
- Params: []*Value{{
- Kind: Array,
- ArrayValues: []*Value{{
- Kind: String,
- In: "a",
- }, {
- Kind: String,
- In: "b",
- }},
- }},
- },
- }}
+ var (
+ tdata *test.Data
+ name string
+ xmlInput []byte
+ err error
+ )
+
+ tdata, err = test.LoadData("testdata/unmarshal_test.txt")
+ if err != nil {
+ t.Fatal(err)
+ }
- for _, c := range cases {
- t.Logf(c.desc)
+ for name, xmlInput = range tdata.Input {
+ t.Run(name, func(t *testing.T) {
+ var (
+ req *Request
+ exp string
+ got string
+ xmlb []byte
+ err error
+ )
- got := &Request{}
- err := got.UnmarshalText([]byte(c.in))
- if err != nil {
- test.Assert(t, "Unmarshal", c.expError, err.Error())
- continue
- }
+ exp = string(tdata.Output[name])
+
+ req = &Request{}
+ err = req.UnmarshalText(xmlInput)
+ if err != nil {
+ got = err.Error()
+ } else {
+ xmlb, err = req.MarshalText()
+ if err != nil {
+ t.Fatal(err)
+ }
+ got = string(xmlb)
+ }
- test.Assert(t, "Unmarshal", c.exp, got)
+ test.Assert(t, name, exp, got)
+ })
}
}
diff --git a/lib/xmlrpc/testdata/marshal_test.txt b/lib/xmlrpc/testdata/marshal_test.txt
new file mode 100644
index 00000000..9ad3d896
--- /dev/null
+++ b/lib/xmlrpc/testdata/marshal_test.txt
@@ -0,0 +1,13 @@
+Test marshaling.
+
+<<< method.name
+<?xml version="1.0" encoding="UTF-8"?>
+<methodCall><methodName>method.name</methodName><params><param><value><string>param-string</string></value></param></params></methodCall>
+
+<<< test.struct
+<?xml version="1.0" encoding="UTF-8"?>
+<methodCall><methodName>test.struct</methodName><params><param><value><struct><member><name>X</name><value><int>1</int></value></member><member><name>Y</name><value><boolean>true</boolean></value></member></struct></value></param></params></methodCall>
+
+<<< test.array
+<?xml version="1.0" encoding="UTF-8"?>
+<methodCall><methodName>test.array</methodName><params><param><value><array><data><value><string>a</string></value><value><string>b</string></value></data></array></value></param></params></methodCall>
diff --git a/lib/xmlrpc/testdata/unmarshal_test.txt b/lib/xmlrpc/testdata/unmarshal_test.txt
new file mode 100644
index 00000000..0b4535d2
--- /dev/null
+++ b/lib/xmlrpc/testdata/unmarshal_test.txt
@@ -0,0 +1,74 @@
+Test unmarshaling.
+
+>>> Multiple param
+<?xml version="1.0"?>
+<methodCall>
+ <methodName>method.name</methodName>
+ <params>
+ <param>
+ <value>
+ <string>
+ param-string
+ </string>
+ </value>
+ </param>
+ <param>
+ <value>
+ <int>
+ 1
+ </int>
+ </value>
+ </param>
+ </params>
+</methodCall>
+
+<<< Multiple param
+<?xml version="1.0" encoding="UTF-8"?>
+<methodCall><methodName>method.name</methodName><params><param><value><string>param-string</string></value></param><param><value><int>1</int></value></param></params></methodCall>
+
+>>> Param as struct
+<?xml version="1.0"?>
+<methodCall>
+ <methodName>test.struct</methodName>
+ <params>
+ <param>
+ <value>
+ <struct>
+ <member>
+ <name>X</name>
+ <value><int>1</int></value>
+ </member>
+ <member>
+ <name>Y</name>
+ <value><boolean>true</boolean></value>
+ </member>
+ </struct>
+ </value>
+ </param>
+ </params>
+</methodCall>
+
+<<< Param as struct
+<?xml version="1.0" encoding="UTF-8"?>
+<methodCall><methodName>test.struct</methodName><params><param><value><struct><member><name>X</name><value><int>1</int></value></member><member><name>Y</name><value><boolean>true</boolean></value></member></struct></value></param></params></methodCall>
+
+>>> Param as array
+<?xml version="1.0"?>
+<methodCall><methodName>test.array</methodName>
+ <params>
+ <param>
+ <value>
+ <array>
+ <data>
+ <value><string>a</string></value>
+ <value><string>b</string></value>
+ </data>
+ </array>
+ </value>
+ </param>
+ </params>
+</methodCall>
+
+<<< Param as array
+<?xml version="1.0" encoding="UTF-8"?>
+<methodCall><methodName>test.array</methodName><params><param><value><array><data><value><string>a</string></value><value><string>b</string></value></data></array></value></param></params></methodCall>