protobuf-go/reflect/protoreflect/source_test.go
Joe Tsai 42cc4c592f reflect/protoreflect: improve source information usability
Added API:
  SourceLocations.ByPath
  SourceLocations.ByDescriptor
  SourceLocation.Next
  SourcePath.String
  SourcePath.Equal

We modify compiler/protogen to use SourceLocations.ByDescriptor.
In retrospect, if this had existed during the development of protogen,
we would not have exposed protogen.Location and related fields.

Change-Id: I58f17e59f90b9ba16f0982c4b71c2542e4ff6e75
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/238000
Reviewed-by: Damien Neil <dneil@google.com>
2020-07-23 21:50:46 +00:00

36 lines
1002 B
Go

// Copyright 2020 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 protoreflect
import "testing"
func TestSourcePathString(t *testing.T) {
tests := []struct {
in SourcePath
want string
}{
{nil, ""},
{SourcePath{}, ""},
{SourcePath{0}, ".0"},
{SourcePath{1}, ".name"},
{SourcePath{1, 1}, ".name.1"},
{SourcePath{1, 1, -2, 3}, ".name.1.-2.3"},
{SourcePath{3}, ".dependency"},
{SourcePath{3, 0}, ".dependency[0]"},
{SourcePath{3, -1}, ".dependency.-1"},
{SourcePath{3, 1, 2}, ".dependency[1].2"},
{SourcePath{4}, ".message_type"},
{SourcePath{4, 0}, ".message_type[0]"},
{SourcePath{4, -1}, ".message_type.-1"},
{SourcePath{4, 1, 0}, ".message_type[1].0"},
{SourcePath{4, 1, 1}, ".message_type[1].name"},
}
for _, tt := range tests {
if got := tt.in.String(); got != tt.want {
t.Errorf("SourcePath(%d).String() = %v, want %v", tt.in, got, tt.want)
}
}
}