MCPcopy
hub / github.com/golang/protobuf / TestNilMessage

Function TestNilMessage

proto/extensions_test.go:351–387  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

349}
350
351func TestNilMessage(t *testing.T) {
352 name := "nil interface"
353 if got, err := proto.GetExtension(nil, pb2.E_Ext_More); err == nil {
354 t.Errorf("%s: got %T %v, expected to fail", name, got, got)
355 } else if !strings.Contains(err.Error(), "extendable") {
356 t.Errorf("%s: got error %v, expected not-extendable error", name, err)
357 }
358
359 // Regression tests: all functions of the Extension API
360 // used to panic when passed (*M)(nil), where M is a concrete message
361 // type. Now they handle this gracefully as a no-op or reported error.
362 var nilMsg *pb2.MyMessage
363 desc := pb2.E_Ext_More
364
365 isNotExtendable := func(err error) bool {
366 return strings.Contains(fmt.Sprint(err), "not an extendable")
367 }
368
369 if proto.HasExtension(nilMsg, desc) {
370 t.Error("HasExtension(nil) = true")
371 }
372
373 if _, err := proto.GetExtensions(nilMsg, []*proto.ExtensionDesc{desc}); !isNotExtendable(err) {
374 t.Errorf("GetExtensions(nil) = %q (wrong error)", err)
375 }
376
377 if _, err := proto.ExtensionDescs(nilMsg); !isNotExtendable(err) {
378 t.Errorf("ExtensionDescs(nil) = %q (wrong error)", err)
379 }
380
381 if err := proto.SetExtension(nilMsg, desc, nil); !isNotExtendable(err) {
382 t.Errorf("SetExtension(nil) = %q (wrong error)", err)
383 }
384
385 proto.ClearExtension(nilMsg, desc) // no-op
386 proto.ClearAllExtensions(nilMsg) // no-op
387}
388
389func TestExtensionsRoundTrip(t *testing.T) {
390 msg := &pb2.MyMessage{}

Callers

nothing calls this directly

Calls 8

GetExtensionFunction · 0.92
HasExtensionFunction · 0.92
GetExtensionsFunction · 0.92
ExtensionDescsFunction · 0.92
SetExtensionFunction · 0.92
ClearExtensionFunction · 0.92
ClearAllExtensionsFunction · 0.92
ErrorMethod · 0.45

Tested by

no test coverage detected