You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
2.8 KiB
Go
164 lines
2.8 KiB
Go
package moon
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
)
|
|
|
|
func TestDoc(t *testing.T) {
|
|
doc, err := ReadString(`
|
|
name: "jordan"
|
|
`)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
var name string
|
|
if err := doc.Get("name", &name); err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
if name != "jordan" {
|
|
t.Errorf("unexpected name value, expected 'jordan', saw '%s'", name)
|
|
}
|
|
}
|
|
|
|
func TestFill(t *testing.T) {
|
|
doc, err := ReadString(`
|
|
# this is just a comment
|
|
firstname: jordan
|
|
port: 9000
|
|
`)
|
|
if err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
var dest struct {
|
|
FirstName string `name: firstname; required: true`
|
|
HostName string `name: hostname; default: localhost`
|
|
Port int `name: port; default: 9001`
|
|
}
|
|
|
|
if err := doc.Fill(&dest); err != nil {
|
|
t.Error(err)
|
|
return
|
|
}
|
|
|
|
if dest.FirstName != "jordan" {
|
|
t.Errorf("unexpected firstname value, expected 'jordan', saw '%s'", dest.FirstName)
|
|
}
|
|
if dest.HostName != "localhost" {
|
|
t.Errorf("unexpected hostname value, expected 'localhost', saw '%s'", dest.HostName)
|
|
}
|
|
if dest.Port != 9000 {
|
|
t.Errorf("unexpected port value, expected 9000, saw %d", dest.Port)
|
|
}
|
|
|
|
}
|
|
|
|
func ExampleDoc_Fill() {
|
|
input := `
|
|
name: jordan
|
|
age: 29
|
|
`
|
|
|
|
var config struct {
|
|
Name string `name: "name"`
|
|
Age int `name: "age"`
|
|
City string `name: "city" default: "Brooklyn"`
|
|
}
|
|
|
|
doc, err := ReadString(input)
|
|
if err != nil {
|
|
fmt.Printf("error reading input: %s", err)
|
|
return
|
|
}
|
|
|
|
if err := doc.Fill(&config); err != nil {
|
|
fmt.Printf("error filling config value: %s", err)
|
|
return
|
|
}
|
|
|
|
fmt.Println(config)
|
|
// Output: {jordan 29 Brooklyn}
|
|
}
|
|
|
|
func ExampleDoc_Get_one() {
|
|
input := `
|
|
name: jordan
|
|
age: 29
|
|
`
|
|
|
|
doc, err := ReadString(input)
|
|
if err != nil {
|
|
fmt.Printf("error reading input: %s", err)
|
|
return
|
|
}
|
|
|
|
var name string
|
|
if err := doc.Get("name", &name); err != nil {
|
|
fmt.Printf("error filling config value: %s", err)
|
|
return
|
|
}
|
|
|
|
fmt.Println(name)
|
|
// Output: jordan
|
|
}
|
|
|
|
func ExampleDoc_Get_two() {
|
|
input := `
|
|
@todd: {
|
|
name: todd
|
|
age: 38
|
|
}
|
|
|
|
@sean: {
|
|
name: sean
|
|
age: 34
|
|
}
|
|
|
|
@jordan: {
|
|
name: jordan
|
|
age: 29
|
|
}
|
|
brothers: [@todd @sean @jordan]
|
|
`
|
|
|
|
doc, err := ReadString(input)
|
|
if err != nil {
|
|
fmt.Printf("error reading input: %s", err)
|
|
return
|
|
}
|
|
|
|
var name string
|
|
if err := doc.Get("brothers/1/name", &name); err != nil {
|
|
fmt.Printf("error filling config value: %s", err)
|
|
return
|
|
}
|
|
|
|
fmt.Println(name)
|
|
// Output: sean
|
|
}
|
|
|
|
// func TestFillEmbeds(t *testing.T) {
|
|
// in := `top: {val: some_data}`
|
|
//
|
|
// var dest struct {
|
|
// Top *struct {
|
|
// Val string `name: val`
|
|
// } `name: top`
|
|
// }
|
|
//
|
|
// doc, err := ReadString(in)
|
|
// if err != nil {
|
|
// t.Error(err)
|
|
// return
|
|
// }
|
|
//
|
|
// if err := doc.Fill(&dest); err != nil {
|
|
// t.Error(err)
|
|
// return
|
|
// }
|
|
// }
|