| // 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 protoreflect |
| |
| import "testing" |
| |
| func TestNameIsValid(t *testing.T) { |
| tests := []struct { |
| in Name |
| want bool |
| }{ |
| {"", false}, |
| {"a", true}, |
| {".", false}, |
| {"_", true}, // odd, but permitted by protoc |
| {".foo", false}, |
| {"foo.", false}, |
| {"foo", true}, |
| {"one1_two2_three3", true}, |
| {"1one", false}, |
| } |
| |
| for _, tt := range tests { |
| if got := tt.in.IsValid(); got != tt.want { |
| t.Errorf("Name(%q).IsValid() = %v, want %v", tt.in, got, tt.want) |
| } |
| } |
| } |
| |
| func TestFullNameIsValid(t *testing.T) { |
| tests := []struct { |
| in FullName |
| want bool |
| }{ |
| {"", false}, |
| {"a", true}, |
| {"a.b", true}, |
| {"a.b.c", true}, |
| {".", false}, |
| {"_._._", true}, // odd, but permitted by protoc |
| {".foo", false}, |
| {"foo.", false}, |
| {"foo", true}, |
| {"one1_two2_three3", true}, |
| {"one1.two2.three3", true}, |
| {".one1.two2.three3", false}, |
| {"one1.two2.three3.", false}, |
| {"foo.1one", false}, |
| } |
| |
| for _, tt := range tests { |
| if got := tt.in.IsValid(); got != tt.want { |
| t.Errorf("Name(%q).IsValid() = %v, want %v", tt.in, got, tt.want) |
| } |
| } |
| } |
| |
| func TestNameAppend(t *testing.T) { |
| tests := []FullName{ |
| "", |
| "a", |
| "a.b", |
| "a.b.c", |
| "one1.two2.three3", |
| } |
| |
| for _, tt := range tests { |
| if got := tt.Parent().Append(tt.Name()); got != tt { |
| t.Errorf("FullName.Parent().Append(FullName.Name()) = %q, want %q", got, tt) |
| } |
| } |
| } |
| |
| var sink bool |
| |
| func BenchmarkFullNameIsValid(b *testing.B) { |
| for i := 0; i < b.N; i++ { |
| sink = FullName("google.protobuf.Any").IsValid() |
| } |
| } |