blob: a61e2b6c7a1281502d31df9c6ebcc89666ded46d [file] [log] [blame]
// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package proto_test
import (
"bytes"
"fmt"
"testing"
"github.com/golang/protobuf/proto"
. "github.com/golang/protobuf/proto/test_proto"
)
func TestUnmarshalMessageSetWithDuplicate(t *testing.T) {
/*
Message{
Tag{1, StartGroup},
Message{
Tag{2, Varint}, Uvarint(12345),
Tag{3, Bytes}, Bytes("hoo"),
},
Tag{1, EndGroup},
Tag{1, StartGroup},
Message{
Tag{2, Varint}, Uvarint(12345),
Tag{3, Bytes}, Bytes("hah"),
},
Tag{1, EndGroup},
}
*/
var in []byte
fmt.Sscanf("0b10b9601a03686f6f0c0b10b9601a036861680c", "%x", &in)
/*
Message{
Tag{1, StartGroup},
Message{
Tag{2, Varint}, Uvarint(12345),
Tag{3, Bytes}, Bytes("hoo"),
},
Tag{1, EndGroup},
Tag{1, StartGroup},
Message{
Tag{2, Varint}, Uvarint(12345),
Tag{3, Bytes}, Bytes("hah"),
},
Tag{1, EndGroup},
}
*/
var want []byte
fmt.Sscanf("0b10b9601a03686f6f0c0b10b9601a036861680c", "%x", &want)
var m MyMessageSet
if err := proto.Unmarshal(in, &m); err != nil {
t.Fatalf("unexpected Unmarshal error: %v", err)
}
got, err := proto.Marshal(&m)
if err != nil {
t.Fatalf("unexpected Marshal error: %v", err)
}
if !bytes.Equal(got, want) {
t.Errorf("output mismatch:\ngot %x\nwant %x", got, want)
}
}