...

Source file src/go.einride.tech/aip/resourcename/scanner_test.go

Documentation: go.einride.tech/aip/resourcename

     1  package resourcename
     2  
     3  import (
     4  	"testing"
     5  
     6  	"gotest.tools/v3/assert"
     7  )
     8  
     9  func TestSegmentScanner(t *testing.T) {
    10  	t.Parallel()
    11  	for _, tt := range []struct {
    12  		name        string
    13  		input       string
    14  		full        bool
    15  		serviceName string
    16  		segments    []Segment
    17  	}{
    18  		{
    19  			name:     "empty",
    20  			input:    "",
    21  			segments: []Segment{},
    22  		},
    23  
    24  		{
    25  			name:     "singleton",
    26  			input:    "singleton",
    27  			segments: []Segment{"singleton"},
    28  		},
    29  
    30  		{
    31  			name:     "two segments",
    32  			input:    "shippers/1",
    33  			segments: []Segment{"shippers", "1"},
    34  		},
    35  
    36  		{
    37  			name:     "three segments",
    38  			input:    "shippers/1/settings",
    39  			segments: []Segment{"shippers", "1", "settings"},
    40  		},
    41  
    42  		{
    43  			name:     "wildcard segment",
    44  			input:    "shippers/1/shipments/-",
    45  			segments: []Segment{"shippers", "1", "shipments", "-"},
    46  		},
    47  
    48  		{
    49  			name:     "empty middle segment",
    50  			input:    "shippers//shipments",
    51  			segments: []Segment{"shippers", "", "shipments"},
    52  		},
    53  
    54  		{
    55  			name:     "empty end segment",
    56  			input:    "shippers/",
    57  			segments: []Segment{"shippers", ""},
    58  		},
    59  
    60  		{
    61  			name:        "full",
    62  			input:       "//library.googleapis.com/publishers/123/books/les-miserables",
    63  			full:        true,
    64  			serviceName: "library.googleapis.com",
    65  			segments:    []Segment{"publishers", "123", "books", "les-miserables"},
    66  		},
    67  
    68  		{
    69  			name:        "full without segments",
    70  			input:       "//library.googleapis.com",
    71  			full:        true,
    72  			serviceName: "library.googleapis.com",
    73  			segments:    []Segment{},
    74  		},
    75  
    76  		{
    77  			name:        "full without service name",
    78  			input:       "//",
    79  			full:        true,
    80  			serviceName: "",
    81  			segments:    []Segment{},
    82  		},
    83  	} {
    84  		tt := tt
    85  		t.Run(tt.name, func(t *testing.T) {
    86  			t.Parallel()
    87  			actualSegments := make([]Segment, 0, len(tt.segments))
    88  			var sc Scanner
    89  			sc.Init(tt.input)
    90  			for sc.Scan() {
    91  				actualSegments = append(actualSegments, sc.Segment())
    92  			}
    93  			assert.Equal(t, tt.full, sc.Full())
    94  			assert.Equal(t, tt.serviceName, sc.ServiceName())
    95  			assert.DeepEqual(t, tt.segments, actualSegments)
    96  		})
    97  	}
    98  }
    99  
   100  //nolint:gochecknoglobals
   101  var stringSink string
   102  
   103  func BenchmarkScanner(b *testing.B) {
   104  	const name = "//library.googleapis.com/publishers/123/books/les-miserables"
   105  	for i := 0; i < b.N; i++ {
   106  		var sc Scanner
   107  		sc.Init(name)
   108  		for sc.Scan() {
   109  			stringSink = sc.Segment().Literal().ResourceID()
   110  		}
   111  	}
   112  }
   113  

View as plain text