123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- // Copyright 2014 beego Author. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package config
- import (
- "fmt"
- "io/ioutil"
- "os"
- "strings"
- "testing"
- )
- func TestIni(t *testing.T) {
- var (
- inicontext = `
- ;comment one
- #comment two
- appname = beeapi
- httpport = 8080
- mysqlport = 3600
- PI = 3.1415976
- runmode = "dev"
- autorender = false
- copyrequestbody = true
- session= on
- cookieon= off
- newreg = OFF
- needlogin = ON
- enableSession = Y
- enableCookie = N
- flag = 1
- path1 = ${GOPATH}
- path2 = ${GOPATH||/home/go}
- [demo]
- key1="asta"
- key2 = "xie"
- CaseInsensitive = true
- peers = one;two;three
- password = ${GOPATH}
- `
- keyValue = map[string]interface{}{
- "appname": "beeapi",
- "httpport": 8080,
- "mysqlport": int64(3600),
- "pi": 3.1415976,
- "runmode": "dev",
- "autorender": false,
- "copyrequestbody": true,
- "session": true,
- "cookieon": false,
- "newreg": false,
- "needlogin": true,
- "enableSession": true,
- "enableCookie": false,
- "flag": true,
- "path1": os.Getenv("GOPATH"),
- "path2": os.Getenv("GOPATH"),
- "demo::key1": "asta",
- "demo::key2": "xie",
- "demo::CaseInsensitive": true,
- "demo::peers": []string{"one", "two", "three"},
- "demo::password": os.Getenv("GOPATH"),
- "null": "",
- "demo2::key1": "",
- "error": "",
- "emptystrings": []string{},
- }
- )
- f, err := os.Create("testini.conf")
- if err != nil {
- t.Fatal(err)
- }
- _, err = f.WriteString(inicontext)
- if err != nil {
- f.Close()
- t.Fatal(err)
- }
- f.Close()
- defer os.Remove("testini.conf")
- iniconf, err := NewConfig("ini", "testini.conf")
- if err != nil {
- t.Fatal(err)
- }
- for k, v := range keyValue {
- var err error
- var value interface{}
- switch v.(type) {
- case int:
- value, err = iniconf.Int(k)
- case int64:
- value, err = iniconf.Int64(k)
- case float64:
- value, err = iniconf.Float(k)
- case bool:
- value, err = iniconf.Bool(k)
- case []string:
- value = iniconf.Strings(k)
- case string:
- value = iniconf.String(k)
- default:
- value, err = iniconf.DIY(k)
- }
- if err != nil {
- t.Fatalf("get key %q value fail,err %s", k, err)
- } else if fmt.Sprintf("%v", v) != fmt.Sprintf("%v", value) {
- t.Fatalf("get key %q value, want %v got %v .", k, v, value)
- }
- }
- if err = iniconf.Set("name", "astaxie"); err != nil {
- t.Fatal(err)
- }
- if iniconf.String("name") != "astaxie" {
- t.Fatal("get name error")
- }
- }
- func TestIniSave(t *testing.T) {
- const (
- inicontext = `
- app = app
- ;comment one
- #comment two
- # comment three
- appname = beeapi
- httpport = 8080
- # DB Info
- # enable db
- [dbinfo]
- # db type name
- # suport mysql,sqlserver
- name = mysql
- `
- saveResult = `
- app=app
- #comment one
- #comment two
- # comment three
- appname=beeapi
- httpport=8080
- # DB Info
- # enable db
- [dbinfo]
- # db type name
- # suport mysql,sqlserver
- name=mysql
- `
- )
- cfg, err := NewConfigData("ini", []byte(inicontext))
- if err != nil {
- t.Fatal(err)
- }
- name := "newIniConfig.ini"
- if err := cfg.SaveConfigFile(name); err != nil {
- t.Fatal(err)
- }
- defer os.Remove(name)
- if data, err := ioutil.ReadFile(name); err != nil {
- t.Fatal(err)
- } else {
- cfgData := string(data)
- datas := strings.Split(saveResult, "\n")
- for _, line := range datas {
- if strings.Contains(cfgData, line+"\n") == false {
- t.Fatalf("different after save ini config file. need contains %q", line)
- }
- }
- }
- }
|