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  }