123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- // Copyright 2019 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 impl_test
- import (
- "fmt"
- "testing"
- cmp "github.com/google/go-cmp/cmp"
- testpb "google.golang.org/protobuf/internal/testprotos/test"
- "google.golang.org/protobuf/proto"
- pref "google.golang.org/protobuf/reflect/protoreflect"
- )
- func TestExtensionType(t *testing.T) {
- cmpOpts := cmp.Options{
- cmp.Comparer(func(x, y proto.Message) bool {
- return proto.Equal(x, y)
- }),
- }
- for _, test := range []struct {
- xt pref.ExtensionType
- value interface{}
- }{
- {
- xt: testpb.E_OptionalInt32Extension,
- value: int32(0),
- },
- {
- xt: testpb.E_OptionalInt64Extension,
- value: int64(0),
- },
- {
- xt: testpb.E_OptionalUint32Extension,
- value: uint32(0),
- },
- {
- xt: testpb.E_OptionalUint64Extension,
- value: uint64(0),
- },
- {
- xt: testpb.E_OptionalFloatExtension,
- value: float32(0),
- },
- {
- xt: testpb.E_OptionalDoubleExtension,
- value: float64(0),
- },
- {
- xt: testpb.E_OptionalBoolExtension,
- value: true,
- },
- {
- xt: testpb.E_OptionalStringExtension,
- value: "",
- },
- {
- xt: testpb.E_OptionalBytesExtension,
- value: []byte{},
- },
- {
- xt: testpb.E_OptionalNestedMessageExtension,
- value: &testpb.TestAllTypes_NestedMessage{},
- },
- {
- xt: testpb.E_OptionalNestedEnumExtension,
- value: testpb.TestAllTypes_FOO,
- },
- {
- xt: testpb.E_RepeatedInt32Extension,
- value: []int32{0},
- },
- {
- xt: testpb.E_RepeatedInt64Extension,
- value: []int64{0},
- },
- {
- xt: testpb.E_RepeatedUint32Extension,
- value: []uint32{0},
- },
- {
- xt: testpb.E_RepeatedUint64Extension,
- value: []uint64{0},
- },
- {
- xt: testpb.E_RepeatedFloatExtension,
- value: []float32{0},
- },
- {
- xt: testpb.E_RepeatedDoubleExtension,
- value: []float64{0},
- },
- {
- xt: testpb.E_RepeatedBoolExtension,
- value: []bool{true},
- },
- {
- xt: testpb.E_RepeatedStringExtension,
- value: []string{""},
- },
- {
- xt: testpb.E_RepeatedBytesExtension,
- value: [][]byte{nil},
- },
- {
- xt: testpb.E_RepeatedNestedMessageExtension,
- value: []*testpb.TestAllTypes_NestedMessage{{}},
- },
- {
- xt: testpb.E_RepeatedNestedEnumExtension,
- value: []testpb.TestAllTypes_NestedEnum{testpb.TestAllTypes_FOO},
- },
- } {
- name := test.xt.TypeDescriptor().FullName()
- t.Run(fmt.Sprint(name), func(t *testing.T) {
- if !test.xt.IsValidInterface(test.value) {
- t.Fatalf("IsValidInterface(%[1]T(%[1]v)) = false, want true", test.value)
- }
- v := test.xt.ValueOf(test.value)
- if !test.xt.IsValidValue(v) {
- t.Fatalf("IsValidValue(%[1]T(%[1]v)) = false, want true", v)
- }
- if got, want := test.xt.InterfaceOf(v), test.value; !cmp.Equal(got, want, cmpOpts) {
- t.Fatalf("round trip InterfaceOf(ValueOf(x)) = %v, want %v", got, want)
- }
- })
- }
- }
|