1 // Protocol Buffers for Go with Gadgets 2 // 3 // Copyright (c) 2019, The GoGo Authors. All rights reserved. 4 // http://github.com/gogo/protobuf 5 // 6 // Redistribution and use in source and binary forms, with or without 7 // modification, are permitted provided that the following conditions are 8 // met: 9 // 10 // * Redistributions of source code must retain the above copyright 11 // notice, this list of conditions and the following disclaimer. 12 // * Redistributions in binary form must reproduce the above 13 // copyright notice, this list of conditions and the following disclaimer 14 // in the documentation and/or other materials provided with the 15 // distribution. 16 // 17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29 package setextensionbytes 30 31 import ( 32 "testing" 33 34 "github.com/gogo/protobuf/proto" 35 ) 36 37 func TestSetextensionBytesTwiceBeforeGet(t *testing.T) { 38 myExtendable := &MyExtendable{} 39 40 foo := &Foo{IntFoo: 1} 41 err := proto.SetUnsafeExtension(myExtendable, 2, foo) 42 if err != nil { 43 t.Error(err) 44 } 45 gotFoo1, err := proto.GetUnsafeExtension(myExtendable, 2) 46 if err != nil { 47 t.Error(err) 48 } 49 50 gotFoo1.(*Foo).IntFoo = 10 51 52 err = proto.SetUnsafeExtension(myExtendable, 2, gotFoo1) 53 if err != nil { 54 t.Error(err) 55 } 56 gotFoo2, err := proto.GetUnsafeExtension(myExtendable, 2) 57 if err != nil { 58 t.Error(err) 59 } 60 61 if gotFoo2.(*Foo).IntFoo != 10 { 62 t.Fatalf("got %d want %d", gotFoo2.(*Foo).IntFoo, 10) 63 } 64 } 65