1*1c12ee1eSDan Willemsen// Copyright 2018 The Go Authors. All rights reserved. 2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style 3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file. 4*1c12ee1eSDan Willemsen 5*1c12ee1eSDan Willemsenpackage protoreflect 6*1c12ee1eSDan Willemsen 7*1c12ee1eSDan Willemsenimport "testing" 8*1c12ee1eSDan Willemsen 9*1c12ee1eSDan Willemsenfunc TestNameIsValid(t *testing.T) { 10*1c12ee1eSDan Willemsen tests := []struct { 11*1c12ee1eSDan Willemsen in Name 12*1c12ee1eSDan Willemsen want bool 13*1c12ee1eSDan Willemsen }{ 14*1c12ee1eSDan Willemsen {"", false}, 15*1c12ee1eSDan Willemsen {"a", true}, 16*1c12ee1eSDan Willemsen {".", false}, 17*1c12ee1eSDan Willemsen {"_", true}, // odd, but permitted by protoc 18*1c12ee1eSDan Willemsen {".foo", false}, 19*1c12ee1eSDan Willemsen {"foo.", false}, 20*1c12ee1eSDan Willemsen {"foo", true}, 21*1c12ee1eSDan Willemsen {"one1_two2_three3", true}, 22*1c12ee1eSDan Willemsen {"1one", false}, 23*1c12ee1eSDan Willemsen } 24*1c12ee1eSDan Willemsen 25*1c12ee1eSDan Willemsen for _, tt := range tests { 26*1c12ee1eSDan Willemsen if got := tt.in.IsValid(); got != tt.want { 27*1c12ee1eSDan Willemsen t.Errorf("Name(%q).IsValid() = %v, want %v", tt.in, got, tt.want) 28*1c12ee1eSDan Willemsen } 29*1c12ee1eSDan Willemsen } 30*1c12ee1eSDan Willemsen} 31*1c12ee1eSDan Willemsen 32*1c12ee1eSDan Willemsenfunc TestFullNameIsValid(t *testing.T) { 33*1c12ee1eSDan Willemsen tests := []struct { 34*1c12ee1eSDan Willemsen in FullName 35*1c12ee1eSDan Willemsen want bool 36*1c12ee1eSDan Willemsen }{ 37*1c12ee1eSDan Willemsen {"", false}, 38*1c12ee1eSDan Willemsen {"a", true}, 39*1c12ee1eSDan Willemsen {"a.b", true}, 40*1c12ee1eSDan Willemsen {"a.b.c", true}, 41*1c12ee1eSDan Willemsen {".", false}, 42*1c12ee1eSDan Willemsen {"_._._", true}, // odd, but permitted by protoc 43*1c12ee1eSDan Willemsen {".foo", false}, 44*1c12ee1eSDan Willemsen {"foo.", false}, 45*1c12ee1eSDan Willemsen {"foo", true}, 46*1c12ee1eSDan Willemsen {"one1_two2_three3", true}, 47*1c12ee1eSDan Willemsen {"one1.two2.three3", true}, 48*1c12ee1eSDan Willemsen {".one1.two2.three3", false}, 49*1c12ee1eSDan Willemsen {"one1.two2.three3.", false}, 50*1c12ee1eSDan Willemsen {"foo.1one", false}, 51*1c12ee1eSDan Willemsen } 52*1c12ee1eSDan Willemsen 53*1c12ee1eSDan Willemsen for _, tt := range tests { 54*1c12ee1eSDan Willemsen if got := tt.in.IsValid(); got != tt.want { 55*1c12ee1eSDan Willemsen t.Errorf("Name(%q).IsValid() = %v, want %v", tt.in, got, tt.want) 56*1c12ee1eSDan Willemsen } 57*1c12ee1eSDan Willemsen } 58*1c12ee1eSDan Willemsen} 59*1c12ee1eSDan Willemsen 60*1c12ee1eSDan Willemsenfunc TestNameAppend(t *testing.T) { 61*1c12ee1eSDan Willemsen tests := []FullName{ 62*1c12ee1eSDan Willemsen "", 63*1c12ee1eSDan Willemsen "a", 64*1c12ee1eSDan Willemsen "a.b", 65*1c12ee1eSDan Willemsen "a.b.c", 66*1c12ee1eSDan Willemsen "one1.two2.three3", 67*1c12ee1eSDan Willemsen } 68*1c12ee1eSDan Willemsen 69*1c12ee1eSDan Willemsen for _, tt := range tests { 70*1c12ee1eSDan Willemsen if got := tt.Parent().Append(tt.Name()); got != tt { 71*1c12ee1eSDan Willemsen t.Errorf("FullName.Parent().Append(FullName.Name()) = %q, want %q", got, tt) 72*1c12ee1eSDan Willemsen } 73*1c12ee1eSDan Willemsen } 74*1c12ee1eSDan Willemsen} 75*1c12ee1eSDan Willemsen 76*1c12ee1eSDan Willemsenvar sink bool 77*1c12ee1eSDan Willemsen 78*1c12ee1eSDan Willemsenfunc BenchmarkFullNameIsValid(b *testing.B) { 79*1c12ee1eSDan Willemsen for i := 0; i < b.N; i++ { 80*1c12ee1eSDan Willemsen sink = FullName("google.protobuf.Any").IsValid() 81*1c12ee1eSDan Willemsen } 82*1c12ee1eSDan Willemsen} 83