...

Source file src/github.com/gogo/protobuf/test/issue34/issue34_test.go

Documentation: github.com/gogo/protobuf/test/issue34

     1  // Protocol Buffers for Go with Gadgets
     2  //
     3  // Copyright (c) 2015, 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 issue34
    30  
    31  import (
    32  	"bytes"
    33  	"github.com/gogo/protobuf/proto"
    34  	"testing"
    35  )
    36  
    37  func TestZeroLengthOptionalBytes(t *testing.T) {
    38  	roundtrip := func(f *Foo) *Foo {
    39  		data, err := proto.Marshal(f)
    40  		if err != nil {
    41  			panic(err)
    42  		}
    43  		newF := &Foo{}
    44  		err = proto.Unmarshal(data, newF)
    45  		if err != nil {
    46  			panic(err)
    47  		}
    48  		return newF
    49  	}
    50  
    51  	f := &Foo{}
    52  	roundtrippedF := roundtrip(f)
    53  	if roundtrippedF.Bar != nil {
    54  		t.Fatalf("should be nil")
    55  	}
    56  
    57  	f.Bar = []byte{}
    58  	roundtrippedF = roundtrip(f)
    59  	if roundtrippedF.Bar == nil {
    60  		t.Fatalf("should not be nil")
    61  	}
    62  	if len(roundtrippedF.Bar) != 0 {
    63  		t.Fatalf("should be empty")
    64  	}
    65  }
    66  
    67  func TestRepeatedOptional(t *testing.T) {
    68  	repeated := &FooWithRepeated{Bar: [][]byte{[]byte("a"), []byte("b")}}
    69  	data, err := proto.Marshal(repeated)
    70  	if err != nil {
    71  		panic(err)
    72  	}
    73  	optional := &Foo{}
    74  	err = proto.Unmarshal(data, optional)
    75  	if err != nil {
    76  		panic(err)
    77  	}
    78  
    79  	if !bytes.Equal(optional.Bar, []byte("b")) {
    80  		t.Fatalf("should return the last entry")
    81  	}
    82  }
    83  

View as plain text