Files
gf/third/github.com/clbanning/mxj/x2j-wrapper/x2j_test.go
2019-04-03 00:03:46 +08:00

390 lines
8.9 KiB
Go
Executable File

package x2j
import (
"encoding/json"
"fmt"
"os"
"testing"
)
func TestX2j(t *testing.T) {
fmt.Println("\n================================ x2j_test.go ...")
fmt.Println("\n=================== TestX2j ...")
fi, fierr := os.Stat("x2j_test.xml")
if fierr != nil {
fmt.Println("fierr:", fierr.Error())
return
}
fh, fherr := os.Open("x2j_test.xml")
if fherr != nil {
fmt.Println("fherr:", fherr.Error())
return
}
defer fh.Close()
buf := make([]byte, fi.Size())
_, nerr := fh.Read(buf)
if nerr != nil {
fmt.Println("nerr:", nerr.Error())
return
}
doc := string(buf)
fmt.Println("\nXML doc:\n", doc)
// test DocToMap() with recast
mm, mmerr := DocToMap(doc, true)
if mmerr != nil {
println("mmerr:", mmerr.Error())
return
}
println("\nDocToMap(), recast==true:\n", WriteMap(mm))
// test DocToJsonIndent() with recast
s, serr := DocToJsonIndent(doc, true)
if serr != nil {
fmt.Println("serr:", serr.Error())
}
fmt.Println("\nDocToJsonIndent, recast==true:\n", s)
}
func TestGetValue(t *testing.T) {
fmt.Println("\n=================== TestGetValue ...")
// test MapValue()
doc := `<entry><vars><foo>bar</foo><foo2><hello>world</hello></foo2></vars></entry>`
fmt.Println("\nRead doc:", doc)
fmt.Println("Looking for value: entry.vars")
mm, mmerr := DocToMap(doc)
if mmerr != nil {
fmt.Println("merr:", mmerr.Error())
}
v, verr := MapValue(mm, "entry.vars", nil)
if verr != nil {
fmt.Println("verr:", verr.Error())
} else {
j, jerr := json.MarshalIndent(v, "", " ")
if jerr != nil {
fmt.Println("jerr:", jerr.Error())
} else {
fmt.Println(string(j))
}
}
fmt.Println("Looking for value: entry.vars.foo2.hello")
v, verr = MapValue(mm, "entry.vars.foo2.hello", nil)
if verr != nil {
fmt.Println("verr:", verr.Error())
} else {
fmt.Println(v.(string))
}
fmt.Println("Looking with error in path: entry.var")
v, verr = MapValue(mm, "entry.var", nil)
fmt.Println("verr:", verr.Error())
// test DocValue()
fmt.Println("DocValue() for tag path entry.vars")
v, verr = DocValue(doc, "entry.vars")
if verr != nil {
fmt.Println("verr:", verr.Error())
}
j, _ := json.MarshalIndent(v, "", " ")
fmt.Println(string(j))
}
func TestGetValueWithAttr(t *testing.T) {
fmt.Println("\n=================== TestGetValueWithAttr ...")
doc := `<entry><vars>
<foo item="1">bar</foo>
<foo item="2">
<hello item="3">world</hello>
<hello item="4">universe</hello>
</foo></vars></entry>`
fmt.Println("\nRead doc:", doc)
fmt.Println("Looking for value: entry.vars")
mm, mmerr := DocToMap(doc)
if mmerr != nil {
fmt.Println("merr:", mmerr.Error())
}
v, verr := MapValue(mm, "entry.vars", nil)
if verr != nil {
fmt.Println("verr:", verr.Error())
} else {
j, jerr := json.MarshalIndent(v, "", " ")
if jerr != nil {
fmt.Println("jerr:", jerr.Error())
} else {
fmt.Println(string(j))
}
}
fmt.Println("\nMapValue(): Looking for value: entry.vars.foo item=2")
a, aerr := NewAttributeMap("item:2")
if aerr != nil {
fmt.Println("aerr:", aerr.Error())
}
v, verr = MapValue(mm, "entry.vars.foo", a)
if verr != nil {
fmt.Println("verr:", verr.Error())
} else {
j, jerr := json.MarshalIndent(v, "", " ")
if jerr != nil {
fmt.Println("jerr:", jerr.Error())
} else {
fmt.Println(string(j))
}
}
fmt.Println("\nMapValue(): Looking for hello item:4")
a, _ = NewAttributeMap("item:4")
v, verr = MapValue(mm, "hello", a)
if verr != nil {
fmt.Println("verr:", verr.Error())
} else {
j, jerr := json.MarshalIndent(v, "", " ")
if jerr != nil {
fmt.Println("jerr:", jerr.Error())
} else {
fmt.Println(string(j))
}
}
fmt.Println("\nDocValue(): Looking for entry.vars.foo.hello item:4")
v, verr = DocValue(doc, "entry.vars.foo.hello", "item:4")
if verr != nil {
fmt.Println("verr:", verr.Error())
} else {
j, jerr := json.MarshalIndent(v, "", " ")
if jerr != nil {
fmt.Println("jerr:", jerr.Error())
} else {
fmt.Println(string(j))
}
}
fmt.Println("\nDocValue(): Looking for empty nil")
v, verr = DocValue(doc, "")
if verr != nil {
fmt.Println("verr:", verr.Error())
} else {
j, jerr := json.MarshalIndent(v, "", " ")
if jerr != nil {
fmt.Println("jerr:", jerr.Error())
} else {
fmt.Println(string(j))
}
}
// test 'recast' switch
fmt.Println("\ntesting recast switch...")
mm, mmerr = DocToMap(doc, true)
if mmerr != nil {
fmt.Println("merr:", mmerr.Error())
}
fmt.Println("MapValue(): Looking for value: entry.vars.foo item=2")
a, aerr = NewAttributeMap("item:2")
if aerr != nil {
fmt.Println("aerr:", aerr.Error())
}
v, verr = MapValue(mm, "entry.vars.foo", a, true)
if verr != nil {
fmt.Println("verr:", verr.Error())
} else {
j, jerr := json.MarshalIndent(v, "", " ")
if jerr != nil {
fmt.Println("jerr:", jerr.Error())
} else {
fmt.Println(string(j))
}
}
}
func TestStuff_1(t *testing.T) {
fmt.Println("\n=================== TestStuff_1 ...")
doc := `<doc>
<tag item="1">val2</tag>
<tag item="2">val2</tag>
<tag item="2" instance="2">val3</tag>
</doc>`
fmt.Println(doc)
m, merr := DocToMap(doc)
if merr != nil {
fmt.Println("merr:", merr.Error())
} else {
fmt.Println(WriteMap(m))
}
fmt.Println("\nDocValue(): tag")
v, verr := DocValue(doc, "doc.tag")
if verr != nil {
fmt.Println("verr:", verr.Error())
} else {
j, jerr := json.MarshalIndent(v, "", " ")
if jerr != nil {
fmt.Println("jerr:", jerr.Error())
} else {
fmt.Println(string(j))
}
}
fmt.Println("\nDocValue(): item:2 instance:2")
v, verr = DocValue(doc, "doc.tag", "item:2", "instance:2")
if verr != nil {
fmt.Println("verr:", verr.Error())
} else {
j, jerr := json.MarshalIndent(v, "", " ")
if jerr != nil {
fmt.Println("jerr:", jerr.Error())
} else {
fmt.Println(string(j))
}
}
}
func TestStuff_2(t *testing.T) {
fmt.Println("\n=================== TestStuff_2 ...")
doc := `
<tag item="1">val2</tag>
<tag item="2">val2</tag>
<tag item="2" instance="2">val3</tag>`
fmt.Println(doc)
m, merr := DocToMap(doc)
if merr != nil {
fmt.Println("merr:", merr.Error())
} else {
fmt.Println(WriteMap(m))
}
fmt.Println("\nDocValue(): tag")
v, verr := DocValue(doc, "tag")
if verr != nil {
fmt.Println("verr:", verr.Error())
} else {
j, jerr := json.MarshalIndent(v, "", " ")
if jerr != nil {
fmt.Println("jerr:", jerr.Error())
} else {
fmt.Println(string(j))
}
}
fmt.Println("\nDocValue(): item:2 instance:2")
v, verr = DocValue(doc, "tag", "item:2", "instance:2")
if verr != nil {
fmt.Println("verr:", verr.Error())
} else {
j, jerr := json.MarshalIndent(v, "", " ")
if jerr != nil {
fmt.Println("jerr:", jerr.Error())
} else {
fmt.Println(string(j))
}
}
}
func procMap(m map[string]interface{}) bool {
fmt.Println("procMap:", WriteMap(m))
return true
}
func procMapToJson(m map[string]interface{}) bool {
b, _ := json.MarshalIndent(m, "", " ")
fmt.Println("procMap:", string(b))
return true
}
func procErr(err error) bool {
fmt.Println("procError err:", err.Error())
return true
}
func TestBulk(t *testing.T) {
fmt.Println("\n=================== TestBulkBuffer ...")
fmt.Println("\nBulk Message Processing Tests")
// if err := XmlMsgsFromFile("x2m_bulk.xml",procMap,procErr); err != nil {
if err := XmlMsgsFromFile("x2m_bulk.xml", procMapToJson, procErr); err != nil {
fmt.Println("XmlMsgsFromFile err:", err.Error())
}
}
func TestTagAndKey(t *testing.T) {
fmt.Println("\n=================== TestTagAndKey ...")
var doc string
doc = `<doc>
<sections>
<section>one</section>
<section>
<parts>
<part>two.one</part>
<part>two.two</part>
</parts>
</section>
</sections>
<partitions>
<parts>
<sections>
<section>one</section>
<section>two</section>
</sections>
</parts>
</partitions>
</doc>`
fmt.Println("\nTestTagAndKey()\n", doc)
v, verr := ValuesForTag(doc, "parts")
if verr != nil {
fmt.Println("verr:", verr.Error())
}
fmt.Println("tag: parts :: len:", len(v), "v:", v)
v, _ = ValuesForTag(doc, "not_a_tag")
if v == nil {
fmt.Println("no 'not_a_tag' tag")
} else {
fmt.Println("key: not_a_tag :: len:", len(v), "v:", v)
}
m, merr := DocToMap(doc)
if merr != nil {
fmt.Println("merr:", merr.Error())
}
v = ValuesForKey(m, "section")
fmt.Println("key: section :: len:", len(v), "v:", v)
v = ValuesForKey(m, "not_a_key")
if v == nil {
fmt.Println("no 'not_a_key' key")
} else {
fmt.Println("key: not_a-key :: len:", len(v), "v:", v)
}
}
// ---------------- x2j_fast.go ----------------
/*
func Test_F_DocToMap(t *testing.T) {
var doc string = `<doc>
<sections>
<section>one</section>
<section>
<parts>
<part>two.one</part>
<part>two.two</part>
</parts>
</section>
</sections>
<partitions>
<parts>
<sections>
<section>one</section>
<section>two</section>
</sections>
</parts>
</partitions>
</doc>`
fmt.Println("\nF_DocToMap()")
fmt.Println(doc)
m,err := F_DocToMap(doc)
if err != nil {
fmt.Println("err:",err.Error())
}
fmt.Println(WriteMap(m),"\n")
}
*/