diff options
Diffstat (limited to 'src/lib/reflect/all_test.go')
-rw-r--r-- | src/lib/reflect/all_test.go | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/lib/reflect/all_test.go b/src/lib/reflect/all_test.go index c473fe339..903b0f526 100644 --- a/src/lib/reflect/all_test.go +++ b/src/lib/reflect/all_test.go @@ -583,3 +583,31 @@ func TestInterfaceExtraction(t *testing.T) { t.Errorf("Interface() on interface: ", v, s.w); } } + +func TestInterfaceEditing(t *testing.T) { + // strings are bigger than one word, + // so the interface conversion allocates + // memory to hold a string and puts that + // pointer in the interface. + var i interface{} = "hello"; + + // if i pass the interface value by value + // to NewValue, i should get a fresh copy + // of the value. + v := NewValue(i); + + // and setting that copy to "bye" should + // not change the value stored in i. + v.(StringValue).Set("bye"); + if i.(string) != "hello" { + t.Errorf(`Set("bye") changed i to %s`, i.(string)); + } + + // the same should be true of smaller items. + i = 123; + v = NewValue(i); + v.(IntValue).Set(234); + if i.(int) != 123 { + t.Errorf("Set(234) changed i to %d", i.(int)); + } +} |