mirror of
https://github.com/protocolbuffers/protobuf-go.git
synced 2025-01-04 02:38:50 +00:00
387873dd53
In the upcoming 3.12.x release of protoc, the proto3 language will be amended to support true presence for scalars. This CL adds support to both the generator and runtime to support these semantics. Newly added public API: protogen.Plugin.SupportedFeatures protoreflect.FieldDescriptor.HasPresence protoreflect.FieldDescriptor.HasOptionalKeyword protoreflect.OneofDescriptor.IsSynthetic Change-Id: I7c86bf66d0ae56642109beb5f2132184593747ad Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/230698 Reviewed-by: Damien Neil <dneil@google.com>
63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
// Copyright 2018 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 descfmt
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
// TestDescriptorAccessors tests that descriptorAccessors is up-to-date.
|
|
func TestDescriptorAccessors(t *testing.T) {
|
|
ignore := map[string]bool{
|
|
"ParentFile": true,
|
|
"Parent": true,
|
|
"Index": true,
|
|
"Syntax": true,
|
|
"Name": true,
|
|
"FullName": true,
|
|
"IsPlaceholder": true,
|
|
"Options": true,
|
|
"ProtoInternal": true,
|
|
"ProtoType": true,
|
|
|
|
"HasOptionalKeyword": true, // captured by HasPresence
|
|
"IsSynthetic": true, // captured by HasPresence
|
|
|
|
"SourceLocations": true, // specific to FileDescriptor
|
|
"ExtensionRangeOptions": true, // specific to MessageDescriptor
|
|
"DefaultEnumValue": true, // specific to FieldDescriptor
|
|
"MapKey": true, // specific to FieldDescriptor
|
|
"MapValue": true, // specific to FieldDescriptor
|
|
}
|
|
|
|
for rt, m := range descriptorAccessors {
|
|
got := map[string]bool{}
|
|
for _, s := range m {
|
|
got[s] = true
|
|
}
|
|
want := map[string]bool{}
|
|
for i := 0; i < rt.NumMethod(); i++ {
|
|
want[rt.Method(i).Name] = true
|
|
}
|
|
|
|
// Check if descriptorAccessors contains a non-existent accessor.
|
|
// If this test fails, remove the accessor from descriptorAccessors.
|
|
for s := range got {
|
|
if !want[s] && !ignore[s] {
|
|
t.Errorf("%v.%v does not exist", rt, s)
|
|
}
|
|
}
|
|
|
|
// Check if there are new protoreflect interface methods that are not
|
|
// handled by the formatter. If this fails, either add the method to
|
|
// ignore or add them to descriptorAccessors.
|
|
for s := range want {
|
|
if !got[s] && !ignore[s] {
|
|
t.Errorf("%v.%v is not called by formatter", rt, s)
|
|
}
|
|
}
|
|
}
|
|
}
|