goProject/trunk/goutil/configUtil/xmlConfig_test.go

322 lines
6.7 KiB
Go
Raw Normal View History

2025-01-06 16:01:02 +08:00
package configUtil
import (
"fmt"
"testing"
"goutil/xmlUtil"
)
// bool值读取测试
func TestBool(t *testing.T) {
xmlConfigData, errMsg := getxmlConfigData()
if errMsg != nil {
t.Error(errMsg)
t.Fail()
return
}
var ispost bool
ispost, errMsg = xmlConfigData.Bool("html/body", "IsPost")
if errMsg != nil {
t.Error(errMsg)
t.Fail()
return
}
fmt.Println("读取到的值:", ispost)
if ispost == false {
t.Error("html/body的isPost读取错误")
t.Fail()
return
}
ispost = xmlConfigData.DefaultBool("html/body", "IsPost", false)
if ispost == false {
t.Error("html/body的isPost读取错误")
t.Fail()
}
}
// int值读取测试
func TestInt(t *testing.T) {
xmlConfigData, errMsg := getxmlConfigData()
if errMsg != nil {
t.Error(errMsg)
t.Fail()
return
}
var id int
id, errMsg = xmlConfigData.Int("html/body/ul/li/a[@id=1]", "id")
if errMsg != nil {
t.Error(errMsg)
t.Fail()
return
}
if id != 1 {
t.Errorf("html/body的isPost读取错误读取到的值:%v", id)
t.Fail()
return
}
id = xmlConfigData.DefaultInt("html/body", "id", 2)
if id != 2 {
t.Error("TestInt html/body的id读取错误")
t.Fail()
}
}
// int64值读取测试
func TestInt64(t *testing.T) {
xmlConfigData, errMsg := getxmlConfigData()
if errMsg != nil {
t.Error(errMsg)
t.Fail()
return
}
var id int64
id, errMsg = xmlConfigData.Int64("html/body/ul/li/a[@id=1]", "id")
if errMsg != nil {
t.Error(errMsg)
t.Fail()
return
}
if id != 1 {
t.Errorf("TestInt64 html/body/ul/li/a[@id=1]的id读取错误读取到的值:%v", id)
t.Fail()
return
}
id = xmlConfigData.DefaultInt64("html/body", "id", 2)
if id != 2 {
t.Error("TestInt64 html/body的id读取错误")
t.Fail()
}
}
// Float值读取测试
func TestFloat(t *testing.T) {
xmlConfigData, errMsg := getxmlConfigData()
if errMsg != nil {
t.Error(errMsg)
t.Fail()
return
}
var id float64
id, errMsg = xmlConfigData.Float("html/body/ul/li/a[@id=1]", "dd")
if errMsg != nil {
t.Error(errMsg)
t.Fail()
return
}
if id != 1.1 {
t.Errorf("TestFloat html/body/ul/li/a[@id=1]的id读取错误读取到的值:%v", id)
t.Fail()
return
}
id = xmlConfigData.DefaultFloat("html/body", "id", 2)
if id != 2 {
t.Error("TestFloat html/body的id读取错误")
t.Fail()
}
}
// 字符串读取测试
func TestString(t *testing.T) {
xmlConfigData, errMsg := getxmlConfigData()
if errMsg != nil {
t.Error(errMsg)
t.Fail()
return
}
var id string
id, errMsg = xmlConfigData.String("html/body/ul/li/a[@id=1]", "dd")
if errMsg != nil {
t.Error(errMsg)
t.Fail()
return
}
if id != "1.1" {
t.Errorf("TestString html/body/ul/li/a[@id=1]的id读取错误读取到的值:%v", id)
t.Fail()
return
}
id = xmlConfigData.DefaultString("html/body", "id", "2")
if id != "2" {
t.Error("TestString html/body的id读取错误")
t.Fail()
}
}
type HelloStruct struct {
// 连接字符串
ConnectionString string
// 最大开启连接数量
MaxOpenConns int `xml:",attr"`
// 最大空闲连接数量
MaxIdleConns int `xml:",attr"`
}
func (this *HelloStruct) Equal(other *HelloStruct) bool {
return this.MaxOpenConns == other.MaxOpenConns && this.MaxIdleConns == other.MaxIdleConns
}
func TestUnmarshal(t *testing.T) {
data, _ := getxmlConfigData2(`
<DBConnection>
<GameServerCenterDB MaxOpenConns="10" MaxIdleConns="5">
<![CDATA[
root:moqikaka3312@tcp(10.1.0.10:3312)/2_gsc_develop?charset=utf8&parseTime=true&loc=Local&timeout=60s
]]>
</GameServerCenterDB>
</DBConnection>
`)
val := &HelloStruct{}
err := data.Unmarshal("/DBConnection/GameServerCenterDB", val)
if err != nil {
t.Error(err)
return
}
want := &HelloStruct{
ConnectionString: "root:moqikaka3312@tcp(10.1.0.10:3312)/2_gsc_develop?charset=utf8&parseTime=true&loc=Local&timeout=60s",
MaxOpenConns: 10,
MaxIdleConns: 5,
}
if want.Equal(val) == false {
t.Errorf("Expected %v, but now got %v", want, val)
}
}
type ConnsNum int
type Hello2Struct struct {
// 连接字符串
ConnectionString string
// 最大开启连接数量
MaxOpenConns ConnsNum
// 最大空闲连接数量
MaxIdleConns ConnsNum
}
func (this *Hello2Struct) Equal(other *Hello2Struct) bool {
return this.MaxOpenConns == other.MaxOpenConns && this.MaxIdleConns == other.MaxIdleConns
}
func TestUnmarshal2(t *testing.T) {
data, _ := getxmlConfigData2(`
<DBConnection>
<GameServerCenterDB MaxOpenConns="10" MaxIdleConns="5">
<![CDATA[
root:moqikaka3312@tcp(10.1.0.10:3312)/2_gsc_develop?charset=utf8&parseTime=true&loc=Local&timeout=60s
]]>
</GameServerCenterDB>
</DBConnection>
`)
val := &Hello2Struct{}
err := data.Unmarshal("/DBConnection/GameServerCenterDB", val)
if err != nil {
t.Error(err)
return
}
want := &Hello2Struct{
ConnectionString: "root:moqikaka3312@tcp(10.1.0.10:3312)/2_gsc_develop?charset=utf8&parseTime=true&loc=Local&timeout=60s",
MaxOpenConns: 10,
MaxIdleConns: 5,
}
if want.Equal(val) == false {
t.Errorf("Expected %v, but now got %v", want, val)
}
}
func TestUnmarshal3(t *testing.T) {
data, _ := getxmlConfigData2(`
<DBConnection>
<GameServerCenterDB MaxOpenConns="10">
<![CDATA[
root:moqikaka3312@tcp(10.1.0.10:3312)/2_gsc_develop?charset=utf8&parseTime=true&loc=Local&timeout=60s
]]>
</GameServerCenterDB>
</DBConnection>
`)
val := &HelloStruct{}
err := data.Unmarshal("/DBConnection/GameServerCenterDB", val)
if err != nil {
t.Error(err)
return
}
want := &HelloStruct{
ConnectionString: "root:moqikaka3312@tcp(10.1.0.10:3312)/2_gsc_develop?charset=utf8&parseTime=true&loc=Local&timeout=60s",
MaxOpenConns: 10,
MaxIdleConns: 0,
}
if want.Equal(val) == false {
t.Errorf("Expected %v, but now got %v", want, val)
}
}
func getxmlConfigData() (xmlConfigData *XmlConfig, errMsg error) {
content := `
<html lang="en">
<head>
<title>Hello</title>
<meta name="language" content="en"/>
</head>
<body IsPost='true'>
<h1> This is a H1 </h1>
<ul>
<li><a id="1" dd='1.1' href="/">Home</a></li>
<li><a id="2" href="/about">about</a></li>
<li><a id="3" href="/account">login</a></li>
<li></li>
</ul>
<p>
Hello,This is an example for gxpath.
</p>
<footer>footer script</footer>
</body>
</html>
`
var root *xmlUtil.Node
root, errMsg = xmlUtil.LoadFromString(content)
if errMsg == nil {
xmlConfigData = NewXmlConfig()
xmlConfigData.LoadFromXmlNode(root)
}
return
}
func getxmlConfigData2(xml string) (xmlConfigData *XmlConfig, errMsg error) {
var root *xmlUtil.Node
root, errMsg = xmlUtil.LoadFromString(xml)
if errMsg == nil {
xmlConfigData = NewXmlConfig()
xmlConfigData.LoadFromXmlNode(root)
}
return
}