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