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}},
}


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")
}
