if sV.Kind() == reflect.String {
sV = sV.Convert(reflect.SliceOf(dV.Type().Elem()))
}
+ if !sV.IsValid() {
+ panic("invalid source, probably nil")
+ }
if dV.Len() != sV.Len() {
panic(fmt.Sprintf("dest len (%d) != src len (%d)", dV.Len(), sV.Len()))
}
import (
"bytes"
+ "strings"
"testing"
)
if string(dest) != "lol" {
t.FailNow()
}
+ func() {
+ defer func() {
+ r := recover()
+ if r == nil {
+ t.FailNow()
+ }
+ }()
+ CopyExact(dest, "rofl")
+ }()
+ var arr [5]byte
+ CopyExact(&arr, interface{}("hello"))
+ if string(arr[:]) != "hello" {
+ t.FailNow()
+ }
+}
+
+func TestCopySrcNilInterface(t *testing.T) {
+ var arr [3]byte
defer func() {
- r := recover()
- if r == nil {
+ r := recover().(string)
+ if !strings.Contains(r, "invalid source") {
t.FailNow()
}
}()
- CopyExact(dest, "rofl")
+ CopyExact(&arr, nil)
}