github.com/googleapis/api-linter@v1.65.2/rules/aip0126/upper_snake_values_test.go (about) 1 package aip0126 2 3 import ( 4 "testing" 5 6 "github.com/googleapis/api-linter/rules/internal/testutils" 7 "github.com/jhump/protoreflect/desc/builder" 8 ) 9 10 func TestUpperSnake(t *testing.T) { 11 // Define permutations. 12 tests := []struct { 13 name string 14 enumValues []string 15 problems testutils.Problems 16 }{ 17 {"ValidOneWord", []string{"ONE"}, testutils.Problems{}}, 18 {"ValidTwoWords", []string{"ONE_TWO"}, testutils.Problems{}}, 19 {"InvalidOneWord", []string{"one"}, testutils.Problems{{Suggestion: "ONE"}}}, 20 {"InvalidTwoWordsCamel", []string{"oneTwo"}, testutils.Problems{{Suggestion: "ONE_TWO"}}}, 21 {"InvalidTwoWordsLowerSnake", []string{"one_two"}, testutils.Problems{{Suggestion: "ONE_TWO"}}}, 22 {"OneProblem", []string{"one_two", "THREE_FOUR"}, testutils.Problems{{Suggestion: "ONE_TWO"}}}, 23 { 24 "TwoProblems", 25 []string{"one_two", "three_four"}, 26 testutils.Problems{{Suggestion: "ONE_TWO"}, {Suggestion: "THREE_FOUR"}}, 27 }, 28 } 29 30 // Test each permutation. 31 for _, test := range tests { 32 t.Run(test.name, func(t *testing.T) { 33 enumBuilder := builder.NewEnum("Number") 34 for _, enumValue := range test.enumValues { 35 enumBuilder.AddValue(builder.NewEnumValue(enumValue)) 36 } 37 38 enum, err := enumBuilder.Build() 39 if err != nil { 40 t.Fatalf("Could not build an enum with values %v", test.enumValues) 41 } 42 43 // If this test expects problems, they correspond 1:1 with the 44 // enum value order. 45 for i := range test.problems { 46 test.problems[i].Descriptor = enum.GetValues()[i] 47 } 48 49 // Run the lint rule, and establish that we got the correct problems. 50 problems := enumValueUpperSnakeCase.Lint(enum.GetFile()) 51 if diff := test.problems.Diff(problems); diff != "" { 52 t.Errorf(diff) 53 } 54 }) 55 } 56 }