@@ -108,7 +108,6 @@ func TestTranslationFilesValid(t *testing.T) {
108
108
if err != nil {
109
109
t .Fatalf ("failed to get translation files: %v" , err )
110
110
}
111
- re := regexp .MustCompile (`{{\..+?}}` )
112
111
for _ , filename := range languageFiles {
113
112
lang := filepath .Base (filename )
114
113
t .Run (lang , func (t * testing.T ) {
@@ -136,19 +135,15 @@ func TestTranslationFilesValid(t *testing.T) {
136
135
}
137
136
138
137
// get all variables (ex. {{.name}})
139
- keyVariables := re . FindAllString ( k , - 1 )
140
- valueVariables := re . FindAllString ( v , - 1 )
138
+ keyVariables := distinctVariables ( k )
139
+ valueVariables := distinctVariables ( v )
141
140
142
141
// check if number of original string and translated variables match
143
142
if len (keyVariables ) != len (valueVariables ) {
144
- t .Errorf ("line %q has mismatching number of variables; original string variables: %s; translated variables: %s" , k , keyVariables , valueVariables )
143
+ t .Errorf ("line %q: %q has mismatching number of variables\n original string variables: %s; translated variables: %s" , k , v , keyVariables , valueVariables )
145
144
continue
146
145
}
147
146
148
- // sort so comparing variables is easier
149
- sort .Strings (keyVariables )
150
- sort .Strings (valueVariables )
151
-
152
147
// for each variable in the original string
153
148
for i , keyVar := range keyVariables {
154
149
// check if translated string has same variable
@@ -161,3 +156,27 @@ func TestTranslationFilesValid(t *testing.T) {
161
156
})
162
157
}
163
158
}
159
+
160
+ func distinctVariables (line string ) []string {
161
+ re := regexp .MustCompile (`{{\..+?}}` )
162
+
163
+ // get all the variables from the string (possiible duplicates)
164
+ variables := re .FindAllString (line , - 1 )
165
+ distinctMap := make (map [string ]bool )
166
+
167
+ // add them to a map to get distinct list of variables
168
+ for _ , variable := range variables {
169
+ distinctMap [variable ] = true
170
+ }
171
+ distinct := []string {}
172
+
173
+ // convert map into slice
174
+ for k := range distinctMap {
175
+ distinct = append (distinct , k )
176
+ }
177
+
178
+ // sort the slice to make the comparison easier
179
+ sort .Strings (distinct )
180
+
181
+ return distinct
182
+ }
0 commit comments