package goyaml_test


import (
    .   "gocheck"
    "goyaml"
    "math"
    //"reflect"
)

var marshalIntTest = 123

var marshalTests = []struct {
    data  string
    value interface{}
}{
    {"{}\n", &struct{}{}},
    {"v: hi\n", map[string]string{"v": "hi"}},
    {"v: hi\n", map[string]interface{}{"v": "hi"}},
    {"v: \"true\"\n", map[string]string{"v": "true"}},
    {"v: \"false\"\n", map[string]string{"v": "false"}},
    {"v: true\n", map[string]interface{}{"v": true}},
    {"v: false\n", map[string]interface{}{"v": false}},
    {"v: 10\n", map[string]interface{}{"v": 10}},
    {"v: -10\n", map[string]interface{}{"v": -10}},
    {"v: 42\n", map[string]uint{"v": 42}},
    {"v: 4294967296\n", map[string]interface{}{"v": int64(4294967296)}},
    {"v: 4294967296\n", map[string]int64{"v": int64(4294967296)}},
    {"v: 4294967296\n", map[string]uint64{"v": 4294967296}},
    {"v: \"10\"\n", map[string]interface{}{"v": "10"}},
    {"v: 0.1\n", map[string]interface{}{"v": 0.1}},
    {"v: 0.1\n", map[string]interface{}{"v": float64(0.1)}},
    {"v: -0.1\n", map[string]interface{}{"v": -0.1}},
    {"v: .inf\n", map[string]interface{}{"v": math.Inf(+1)}},
    {"v: -.inf\n", map[string]interface{}{"v": math.Inf(-1)}},
    {"v: .nan\n", map[string]interface{}{"v": math.NaN()}},
    {"v: null\n", map[string]interface{}{"v": nil}},
    {"v: \"\"\n", map[string]interface{}{"v": ""}},
    {"v:\n- A\n- B\n", map[string][]string{"v": []string{"A", "B"}}},
    {"v:\n- A\n- 1\n", map[string][]interface{}{"v": []interface{}{"A", 1}}},
    {"a:\n  b: c\n",
        map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}}},

    // Simple values.
    {"123\n", &marshalIntTest},

    // Structures
    {"hello: world\n", &struct{ Hello string }{"world"}},
    {"a:\n  b: c\n", &struct {
        A struct {
            B string
        }
    }{struct{ B string }{"c"}}},
    {"a:\n  b: c\n", &struct {
        A *struct {
            B string
        }
    }{&struct{ B string }{"c"}}},
    {"a: null\n", &struct {
        A *struct {
            B string
        }
    }{}},
    {"a: 1\n", &struct{ A int }{1}},
    {"a:\n- 1\n- 2\n", &struct{ A []int }{[]int{1, 2}}},
    {"a: 1\n", &struct {
        B int "a"
    }{1}},
    {"a: true\n", &struct{ A bool }{true}},

    // Conditional flag
    {"a: 1\n", &struct {
        A   int "a/c"
        B   int "b/c"
    }{1, 0}},
    {"{}\n", &struct {
        A   int "a/c"
        B   int "b/c"
    }{0, 0}},

    // Flow flag
    {"a: [1, 2]\n", &struct {
        A []int "a/f"
    }{[]int{1, 2}}},
    {"a: {b: c}\n",
        &struct {
            A map[string]string "a/f"
        }{map[string]string{"b": "c"}}},
    {"a: {b: c}\n",
        &struct {
            A struct {
                B string
            } "a/f"
        }{struct{ B string }{"c"}}},
}


func (s *S) TestMarshal(c *C) {
    for _, item := range marshalTests {
        data, err := goyaml.Marshal(item.value)
        c.Assert(err, IsNil)
        c.Assert(string(data), Equals, item.data)
    }
}

//var unmarshalErrorTests = []struct{data, error string}{
//    {"v: !!float 'error'", "Can't decode !!str 'error' as a !!float"},
//}
//
//func (s *S) TestUnmarshalErrors(c *C) {
//    for _, item := range unmarshalErrorTests {
//        var value interface{}
//        err := goyaml.Unmarshal([]byte(item.data), &value)
//        c.Assert(err, Matches, item.error)
//    }
//}

var marshalTaggedIfaceTest interface{} = &struct{ A string }{"B"}

var getterTests = []struct {
    data, tag string
    value     interface{}
}{
    {"_:\n  hi: there\n", "", map[interface{}]interface{}{"hi": "there"}},
    {"_:\n- 1\n- A\n", "", []interface{}{1, "A"}},
    {"_: 10\n", "", 10},
    {"_: null\n", "", nil},
    {"_: !foo BAR!\n", "!foo", "BAR!"},
    {"_: !foo 1\n", "!foo", "1"},
    {"_: !foo '\"1\"'\n", "!foo", "\"1\""},
    {"_: !foo 1.1\n", "!foo", 1.1},
    {"_: !foo 1\n", "!foo", 1},
    {"_: !foo 1\n", "!foo", uint(1)},
    {"_: !foo true\n", "!foo", true},
    {"_: !foo\n- A\n- B\n", "!foo", []string{"A", "B"}},
    {"_: !foo\n  A: B\n", "!foo", map[string]string{"A": "B"}},
    {"_: !foo\n  a: B\n", "!foo", &marshalTaggedIfaceTest},
}

type typeWithGetter struct {
    tag   string
    value interface{}
}

func (o typeWithGetter) GetYAML() (tag string, value interface{}) {
    return o.tag, o.value
}

type typeWithGetterField struct {
    Field typeWithGetter "_"
}

func (s *S) TestMashalWithGetter(c *C) {
    for _, item := range getterTests {
        obj := &typeWithGetterField{}
        obj.Field.tag = item.tag
        obj.Field.value = item.value
        data, err := goyaml.Marshal(obj)
        c.Assert(err, IsNil)
        c.Assert(string(data), Equals, string(item.data))
    }
}

func (s *S) TestUnmarshalWholeDocumentWithGetter(c *C) {
    obj := &typeWithGetter{}
    obj.tag = ""
    obj.value = map[string]string{"hello": "world!"}
    data, err := goyaml.Marshal(obj)
    c.Assert(err, IsNil)
    c.Assert(string(data), Equals, "hello: world!\n")
}
