Merge pull request #52 from BrianBland/v2

Fix TypeError check in Unmarshal.
This commit is contained in:
Gustavo Niemeyer
2015-01-16 17:10:07 -02:00
2 changed files with 32 additions and 1 deletions
+31
View File
@@ -762,6 +762,37 @@ func (s *S) TestUnmarshalerError(c *C) {
c.Assert(err, Equals, failingErr)
}
type sliceUnmarshaler []int
func (su *sliceUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error {
var slice []int
err := unmarshal(&slice)
if err == nil {
*su = slice
return nil
}
var intVal int
err = unmarshal(&intVal)
if err == nil {
*su = []int{intVal}
return nil
}
return err
}
func (s *S) TestUnmarshalerRetry(c *C) {
var su sliceUnmarshaler
err := yaml.Unmarshal([]byte("[1, 2, 3]"), &su)
c.Assert(err, IsNil)
c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1, 2, 3}))
err = yaml.Unmarshal([]byte("1"), &su)
c.Assert(err, IsNil)
c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1}))
}
// From http://yaml.org/type/merge.html
var mergeTests = `
anchors:
+1 -1
View File
@@ -89,7 +89,7 @@ func Unmarshal(in []byte, out interface{}) (err error) {
}
d.unmarshal(node, v)
}
if d.terrors != nil {
if len(d.terrors) > 0 {
return &TypeError{d.terrors}
}
return nil