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