xref: /aosp_15_r20/external/golang-protobuf/proto/weak_test.go (revision 1c12ee1efe575feb122dbf939ff15148a3b3e8f2)
1*1c12ee1eSDan Willemsen// Copyright 2019 The Go Authors. All rights reserved.
2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style
3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file.
4*1c12ee1eSDan Willemsen
5*1c12ee1eSDan Willemsenpackage proto_test
6*1c12ee1eSDan Willemsen
7*1c12ee1eSDan Willemsenimport (
8*1c12ee1eSDan Willemsen	"testing"
9*1c12ee1eSDan Willemsen
10*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/internal/flags"
11*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/internal/protobuild"
12*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/proto"
13*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/testing/protopack"
14*1c12ee1eSDan Willemsen
15*1c12ee1eSDan Willemsen	testpb "google.golang.org/protobuf/internal/testprotos/test"
16*1c12ee1eSDan Willemsen	weakpb "google.golang.org/protobuf/internal/testprotos/test/weak1"
17*1c12ee1eSDan Willemsen)
18*1c12ee1eSDan Willemsen
19*1c12ee1eSDan Willemsenfunc init() {
20*1c12ee1eSDan Willemsen	if flags.ProtoLegacy {
21*1c12ee1eSDan Willemsen		testValidMessages = append(testValidMessages, testWeakValidMessages...)
22*1c12ee1eSDan Willemsen		testInvalidMessages = append(testInvalidMessages, testWeakInvalidMessages...)
23*1c12ee1eSDan Willemsen		testMerges = append(testMerges, testWeakMerges...)
24*1c12ee1eSDan Willemsen	}
25*1c12ee1eSDan Willemsen}
26*1c12ee1eSDan Willemsen
27*1c12ee1eSDan Willemsenvar testWeakValidMessages = []testProto{
28*1c12ee1eSDan Willemsen	{
29*1c12ee1eSDan Willemsen		desc: "weak message",
30*1c12ee1eSDan Willemsen		decodeTo: []proto.Message{
31*1c12ee1eSDan Willemsen			func() proto.Message {
32*1c12ee1eSDan Willemsen				if !flags.ProtoLegacy {
33*1c12ee1eSDan Willemsen					return nil
34*1c12ee1eSDan Willemsen				}
35*1c12ee1eSDan Willemsen				m := &testpb.TestWeak{}
36*1c12ee1eSDan Willemsen				m.SetWeakMessage1(&weakpb.WeakImportMessage1{
37*1c12ee1eSDan Willemsen					A: proto.Int32(1000),
38*1c12ee1eSDan Willemsen				})
39*1c12ee1eSDan Willemsen				m.ProtoReflect().SetUnknown(protopack.Message{
40*1c12ee1eSDan Willemsen					protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
41*1c12ee1eSDan Willemsen						protopack.Tag{1, protopack.VarintType}, protopack.Varint(2000),
42*1c12ee1eSDan Willemsen					}),
43*1c12ee1eSDan Willemsen				}.Marshal())
44*1c12ee1eSDan Willemsen				return m
45*1c12ee1eSDan Willemsen			}(),
46*1c12ee1eSDan Willemsen		},
47*1c12ee1eSDan Willemsen		wire: protopack.Message{
48*1c12ee1eSDan Willemsen			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
49*1c12ee1eSDan Willemsen				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1000),
50*1c12ee1eSDan Willemsen			}),
51*1c12ee1eSDan Willemsen			protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
52*1c12ee1eSDan Willemsen				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2000),
53*1c12ee1eSDan Willemsen			}),
54*1c12ee1eSDan Willemsen		}.Marshal(),
55*1c12ee1eSDan Willemsen	},
56*1c12ee1eSDan Willemsen}
57*1c12ee1eSDan Willemsen
58*1c12ee1eSDan Willemsenvar testWeakInvalidMessages = []testProto{
59*1c12ee1eSDan Willemsen	{
60*1c12ee1eSDan Willemsen		desc:     "invalid field number 0 in weak message",
61*1c12ee1eSDan Willemsen		decodeTo: []proto.Message{(*testpb.TestWeak)(nil)},
62*1c12ee1eSDan Willemsen		wire: protopack.Message{
63*1c12ee1eSDan Willemsen			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
64*1c12ee1eSDan Willemsen				protopack.Tag{0, protopack.VarintType}, protopack.Varint(1000),
65*1c12ee1eSDan Willemsen			}),
66*1c12ee1eSDan Willemsen		}.Marshal(),
67*1c12ee1eSDan Willemsen	},
68*1c12ee1eSDan Willemsen}
69*1c12ee1eSDan Willemsen
70*1c12ee1eSDan Willemsenvar testWeakMerges = []testMerge{
71*1c12ee1eSDan Willemsen	{
72*1c12ee1eSDan Willemsen		desc: "clone weak message",
73*1c12ee1eSDan Willemsen		src: protobuild.Message{
74*1c12ee1eSDan Willemsen			"weak_message1": protobuild.Message{
75*1c12ee1eSDan Willemsen				"a": 1,
76*1c12ee1eSDan Willemsen			},
77*1c12ee1eSDan Willemsen		},
78*1c12ee1eSDan Willemsen		types: []proto.Message{&testpb.TestWeak{}},
79*1c12ee1eSDan Willemsen	}, {
80*1c12ee1eSDan Willemsen		desc: "merge weak message",
81*1c12ee1eSDan Willemsen		dst: protobuild.Message{
82*1c12ee1eSDan Willemsen			"weak_message1": protobuild.Message{
83*1c12ee1eSDan Willemsen				"a": 1,
84*1c12ee1eSDan Willemsen			},
85*1c12ee1eSDan Willemsen		},
86*1c12ee1eSDan Willemsen		src: protobuild.Message{
87*1c12ee1eSDan Willemsen			"weak_message1": protobuild.Message{
88*1c12ee1eSDan Willemsen				"a": 2,
89*1c12ee1eSDan Willemsen			},
90*1c12ee1eSDan Willemsen		},
91*1c12ee1eSDan Willemsen		want: protobuild.Message{
92*1c12ee1eSDan Willemsen			"weak_message1": protobuild.Message{
93*1c12ee1eSDan Willemsen				"a": 2,
94*1c12ee1eSDan Willemsen			},
95*1c12ee1eSDan Willemsen		},
96*1c12ee1eSDan Willemsen		types: []proto.Message{&testpb.TestWeak{}},
97*1c12ee1eSDan Willemsen	},
98*1c12ee1eSDan Willemsen}
99*1c12ee1eSDan Willemsen
100*1c12ee1eSDan Willemsenfunc TestWeakNil(t *testing.T) {
101*1c12ee1eSDan Willemsen	if !flags.ProtoLegacy {
102*1c12ee1eSDan Willemsen		t.SkipNow()
103*1c12ee1eSDan Willemsen	}
104*1c12ee1eSDan Willemsen
105*1c12ee1eSDan Willemsen	m := new(testpb.TestWeak)
106*1c12ee1eSDan Willemsen	if v, ok := m.GetWeakMessage1().(*weakpb.WeakImportMessage1); !ok || v != nil {
107*1c12ee1eSDan Willemsen		t.Errorf("m.GetWeakMessage1() = type %[1]T(%[1]v), want (*weakpb.WeakImportMessage1)", v)
108*1c12ee1eSDan Willemsen	}
109*1c12ee1eSDan Willemsen}
110*1c12ee1eSDan Willemsen
111*1c12ee1eSDan Willemsenfunc TestWeakMarshalNil(t *testing.T) {
112*1c12ee1eSDan Willemsen	if !flags.ProtoLegacy {
113*1c12ee1eSDan Willemsen		t.SkipNow()
114*1c12ee1eSDan Willemsen	}
115*1c12ee1eSDan Willemsen
116*1c12ee1eSDan Willemsen	m := new(testpb.TestWeak)
117*1c12ee1eSDan Willemsen	m.SetWeakMessage1(nil)
118*1c12ee1eSDan Willemsen	if b, err := proto.Marshal(m); err != nil || len(b) != 0 {
119*1c12ee1eSDan Willemsen		t.Errorf("Marshal(weak field set to nil) = [%x], %v; want [], nil", b, err)
120*1c12ee1eSDan Willemsen	}
121*1c12ee1eSDan Willemsen	m.SetWeakMessage1((*weakpb.WeakImportMessage1)(nil))
122*1c12ee1eSDan Willemsen	if b, err := proto.Marshal(m); err != nil || len(b) != 0 {
123*1c12ee1eSDan Willemsen		t.Errorf("Marshal(weak field set to typed nil) = [%x], %v; want [], nil", b, err)
124*1c12ee1eSDan Willemsen	}
125*1c12ee1eSDan Willemsen}
126