// 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 yaml import ( "fmt" "os" "testing" "github.com/astaxie/beego/adapter/config" ) func TestYaml(t *testing.T) { var ( yamlcontext = ` "appname": beeapi "httpport": 8080 "mysqlport": 3600 "PI": 3.1415976 "runmode": dev "autorender": false "copyrequestbody": true "PATH": GOPATH "path1": ${GOPATH} "path2": ${GOPATH||/home/go} "empty": "" ` keyValue = map[string]interface{}{ "appname": "beeapi", "httpport": 8080, "mysqlport": int64(3600), "PI": 3.1415976, "runmode": "dev", "autorender": false, "copyrequestbody": true, "PATH": "GOPATH", "path1": os.Getenv("GOPATH"), "path2": os.Getenv("GOPATH"), "error": "", "emptystrings": []string{}, } ) f, err := os.Create("testyaml.conf") if err != nil { t.Fatal(err) } _, err = f.WriteString(yamlcontext) if err != nil { f.Close() t.Fatal(err) } f.Close() defer os.Remove("testyaml.conf") yamlconf, err := config.NewConfig("yaml", "testyaml.conf") if err != nil { t.Fatal(err) } if yamlconf.String("appname") != "beeapi" { t.Fatal("appname not equal to beeapi") } for k, v := range keyValue { var ( value interface{} err error ) switch v.(type) { case int: value, err = yamlconf.Int(k) case int64: value, err = yamlconf.Int64(k) case float64: value, err = yamlconf.Float(k) case bool: value, err = yamlconf.Bool(k) case []string: value = yamlconf.Strings(k) case string: value = yamlconf.String(k) default: value, err = yamlconf.DIY(k) } if err != nil { t.Errorf("get key %q value fatal,%v err %s", k, v, err) } else if fmt.Sprintf("%v", v) != fmt.Sprintf("%v", value) { t.Errorf("get key %q value, want %v got %v .", k, v, value) } } if err = yamlconf.Set("name", "astaxie"); err != nil { t.Fatal(err) } if yamlconf.String("name") != "astaxie" { t.Fatal("get name error") } }