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
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