xref: /aosp_15_r20/external/golang-protobuf/internal/impl/lazy_test.go (revision 1c12ee1efe575feb122dbf939ff15148a3b3e8f2)
1*1c12ee1eSDan Willemsen// Copyright 2020 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 impl_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/impl"
12*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/internal/protobuild"
13*1c12ee1eSDan Willemsen	"google.golang.org/protobuf/proto"
14*1c12ee1eSDan Willemsen
15*1c12ee1eSDan Willemsen	testpb "google.golang.org/protobuf/internal/testprotos/test"
16*1c12ee1eSDan Willemsen)
17*1c12ee1eSDan Willemsen
18*1c12ee1eSDan Willemsenfunc TestLazyExtensions(t *testing.T) {
19*1c12ee1eSDan Willemsen	checkLazy := func(when string, m *testpb.TestAllExtensions, want bool) {
20*1c12ee1eSDan Willemsen		xd := testpb.E_OptionalNestedMessage.TypeDescriptor()
21*1c12ee1eSDan Willemsen		if got := impl.IsLazy(m.ProtoReflect(), xd); got != want {
22*1c12ee1eSDan Willemsen			t.Errorf("%v: m.optional_nested_message lazy=%v, want %v", when, got, want)
23*1c12ee1eSDan Willemsen		}
24*1c12ee1eSDan Willemsen		e := proto.GetExtension(m, testpb.E_OptionalNestedMessage).(*testpb.TestAllExtensions_NestedMessage).Corecursive
25*1c12ee1eSDan Willemsen		if got := impl.IsLazy(e.ProtoReflect(), xd); got != want {
26*1c12ee1eSDan Willemsen			t.Errorf("%v: m.optional_nested_message.corecursive.optional_nested_message lazy=%v, want %v", when, got, want)
27*1c12ee1eSDan Willemsen		}
28*1c12ee1eSDan Willemsen	}
29*1c12ee1eSDan Willemsen
30*1c12ee1eSDan Willemsen	m1 := &testpb.TestAllExtensions{}
31*1c12ee1eSDan Willemsen	protobuild.Message{
32*1c12ee1eSDan Willemsen		"optional_nested_message": protobuild.Message{
33*1c12ee1eSDan Willemsen			"a": 1,
34*1c12ee1eSDan Willemsen			"corecursive": protobuild.Message{
35*1c12ee1eSDan Willemsen				"optional_nested_message": protobuild.Message{
36*1c12ee1eSDan Willemsen					"a": 2,
37*1c12ee1eSDan Willemsen				},
38*1c12ee1eSDan Willemsen			},
39*1c12ee1eSDan Willemsen		},
40*1c12ee1eSDan Willemsen	}.Build(m1.ProtoReflect())
41*1c12ee1eSDan Willemsen	checkLazy("before unmarshal", m1, false)
42*1c12ee1eSDan Willemsen
43*1c12ee1eSDan Willemsen	w, err := proto.Marshal(m1)
44*1c12ee1eSDan Willemsen	if err != nil {
45*1c12ee1eSDan Willemsen		t.Fatal(err)
46*1c12ee1eSDan Willemsen	}
47*1c12ee1eSDan Willemsen	m := &testpb.TestAllExtensions{}
48*1c12ee1eSDan Willemsen	if err := proto.Unmarshal(w, m); err != nil {
49*1c12ee1eSDan Willemsen		t.Fatal(err)
50*1c12ee1eSDan Willemsen	}
51*1c12ee1eSDan Willemsen	checkLazy("after unmarshal", m, flags.LazyUnmarshalExtensions)
52*1c12ee1eSDan Willemsen}
53