3
3
using Cake . Xamarin . Tests . Fakes ;
4
4
using Cake . Core . IO ;
5
5
using Xunit ;
6
+ using System . Text ;
6
7
7
8
namespace Cake . FileHelpers . Tests
8
9
{
@@ -82,6 +83,17 @@ public void FindTextInFiles()
82
83
Assert . Single ( monkeyFiles ) ;
83
84
}
84
85
86
+ [ Fact ]
87
+ public void FindTextInFilesWithUTF8Encoding ( )
88
+ {
89
+ SetupFilesUTF8 ( ) ;
90
+
91
+ var files = context . CakeContext . FindTextInFiles ( "./testdata/*-utf8.txt" , Encoding . UTF8 , "Monkey🐒" ) ;
92
+
93
+ Assert . NotNull ( files ) ;
94
+ Assert . Single ( files ) ;
95
+ }
96
+
85
97
[ Fact ]
86
98
public void FindRegexInFiles ( )
87
99
{
@@ -93,6 +105,16 @@ public void FindRegexInFiles()
93
105
Assert . Single ( files ) ;
94
106
}
95
107
108
+ [ Fact ]
109
+ public void FindRegexInFilesWithUTF8Encoding ( )
110
+ {
111
+ SetupFilesUTF8 ( ) ;
112
+
113
+ var files = context . CakeContext . FindRegexInFiles ( "./testdata/*-utf8.txt" , Encoding . UTF8 , @"\s{1}Monkey🐒\s{1,}" ) ;
114
+
115
+ Assert . NotNull ( files ) ;
116
+ Assert . Single ( files ) ;
117
+ }
96
118
97
119
[ Fact ]
98
120
public void ReplaceTextInFiles ( )
@@ -110,6 +132,23 @@ public void ReplaceTextInFiles()
110
132
}
111
133
}
112
134
135
+ [ Fact ]
136
+ public void ReplaceTextInFilesWithUTF8Encoding ( )
137
+ {
138
+ SetupFilesUTF8 ( ) ;
139
+
140
+ var files = context . CakeContext . ReplaceTextInFiles ( "./testdata/*.txt" , Encoding . UTF8 , "Monkey🐒" , "Tamarin" ) ;
141
+
142
+ Assert . NotNull ( files ) ;
143
+ Assert . Single ( files ) ;
144
+
145
+ foreach ( var f in files )
146
+ {
147
+ var contents = context . CakeContext . FileReadText ( f , Encoding . UTF8 ) ;
148
+ Assert . Equal ( string . Format ( PATTERN_FILE_BASE_VALUE , "Tamarin" ) , contents ) ;
149
+ }
150
+ }
151
+
113
152
[ Fact ]
114
153
public void ReplaceRegexInFiles ( )
115
154
{
@@ -126,9 +165,29 @@ public void ReplaceRegexInFiles()
126
165
}
127
166
}
128
167
168
+ [ Fact ]
169
+ public void ReplaceRegexInFilesWithUTF8Encoding ( )
170
+ {
171
+ SetupFilesUTF8 ( ) ;
172
+
173
+ var files = context . CakeContext . ReplaceRegexInFiles ( "./testdata/*-utf8.txt" , Encoding . UTF8 , @"\s{1}Monkey🐒\s{1,}" , " Tamarin " ) ;
174
+
175
+ Assert . NotNull ( files ) ;
176
+ Assert . Single ( files ) ;
177
+
178
+ foreach ( var f in files )
179
+ {
180
+ var contents = context . CakeContext . FileReadText ( f , Encoding . UTF8 ) ;
181
+ Assert . Equal ( string . Format ( PATTERN_FILE_BASE_VALUE , "Tamarin" ) , contents ) ;
182
+ }
183
+ }
184
+
129
185
public const string GROUPS_FILE = "./testdata/Groups.txt" ;
186
+ public const string GROUPS_FILE_UTF8 = "./testdata/Groups-utf8.txt" ;
130
187
public const string GROUPS_FILE_CONTENT = "Hello World! This is A quick Test to Capture multiple Groups." ;
188
+ public const string GROUPS_FILE_CONTENT_UTF8 = "🐒Hello 🐒World! 🐒This is A quick 🐒Test to 🐒Capture multiple 🐒Groups." ;
131
189
public const string GROUPS_PATTERN = "([A-Z])(\\ w+)" ;
190
+ public const string GROUPS_PATTERN_UTF8 = "(🐒[A-Z])(\\ w+)" ;
132
191
133
192
[ Fact ]
134
193
public void FindRegexMatchesGroupsInFile ( )
@@ -144,6 +203,20 @@ public void FindRegexMatchesGroupsInFile()
144
203
Assert . Equal ( 3 , g . Count ) ;
145
204
}
146
205
206
+ [ Fact ]
207
+ public void FindRegexMatchesGroupsInFileWithUTF8Encoding ( )
208
+ {
209
+ context . CakeContext . FileWriteText ( GROUPS_FILE_UTF8 , GROUPS_FILE_CONTENT_UTF8 ) ;
210
+
211
+ var matchesGroups = context . CakeContext . FindRegexMatchesGroupsInFile ( GROUPS_FILE_UTF8 , GROUPS_PATTERN_UTF8 , RegexOptions . None ) ;
212
+
213
+ Assert . NotNull ( matchesGroups ) ;
214
+ Assert . Equal ( 6 , matchesGroups . Count ) ;
215
+
216
+ foreach ( var g in matchesGroups )
217
+ Assert . Equal ( 3 , g . Count ) ;
218
+ }
219
+
147
220
[ Fact ]
148
221
public void FindRegexMatchGroupsInFile ( )
149
222
{
@@ -155,6 +228,18 @@ public void FindRegexMatchGroupsInFile()
155
228
Assert . Equal ( 3 , matchGroups . Count ) ;
156
229
}
157
230
231
+
232
+ [ Fact ]
233
+ public void FindRegexMatchGroupsInFileWithUTF8Encoding ( )
234
+ {
235
+ context . CakeContext . FileWriteText ( GROUPS_FILE_UTF8 , GROUPS_FILE_CONTENT_UTF8 ) ;
236
+
237
+ var matchGroups = context . CakeContext . FindRegexMatchGroupsInFile ( GROUPS_FILE_UTF8 , GROUPS_PATTERN_UTF8 , RegexOptions . None ) ;
238
+
239
+ Assert . NotNull ( matchGroups ) ;
240
+ Assert . Equal ( 3 , matchGroups . Count ) ;
241
+ }
242
+
158
243
[ Fact ]
159
244
public void FindRegexMatchGroupInFile ( )
160
245
{
@@ -168,6 +253,19 @@ public void FindRegexMatchGroupInFile()
168
253
Assert . Equal ( "ello" , matchGroup . Value ) ;
169
254
}
170
255
256
+ [ Fact ]
257
+ public void FindRegexMatchGroupInFileWithUTF8Encoding ( )
258
+ {
259
+ context . CakeContext . FileWriteText ( GROUPS_FILE_UTF8 , GROUPS_FILE_CONTENT_UTF8 ) ;
260
+
261
+ var matchGroup = context . CakeContext . FindRegexMatchGroupInFile ( GROUPS_FILE_UTF8 , GROUPS_PATTERN_UTF8 , 2 , RegexOptions . None ) ;
262
+ var invalidMatchGroup = context . CakeContext . FindRegexMatchGroupInFile ( GROUPS_FILE_UTF8 , GROUPS_PATTERN_UTF8 , 8 , RegexOptions . None ) ;
263
+
264
+ Assert . NotNull ( matchGroup ) ;
265
+ Assert . Null ( invalidMatchGroup ) ;
266
+ Assert . Equal ( "ello" , matchGroup . Value ) ;
267
+ }
268
+
171
269
public const string PATTERN_FILE_BASE_VALUE = "The {0} makes great software.\n This is not a surprise." ;
172
270
173
271
void SetupFiles ( )
@@ -179,6 +277,18 @@ void SetupFiles()
179
277
string . Format ( PATTERN_FILE_BASE_VALUE , i == 2 ? "Monkey" : "Ape" ) ) ;
180
278
}
181
279
}
280
+
281
+ void SetupFilesUTF8 ( )
282
+ {
283
+ // Setup files
284
+ for ( int i = 1 ; i < 5 ; i ++ )
285
+ {
286
+ context . CakeContext . FileWriteText (
287
+ string . Format ( "./testdata/{0}-utf8.txt" , i ) ,
288
+ Encoding . UTF8 ,
289
+ string . Format ( PATTERN_FILE_BASE_VALUE , i == 2 ? "Monkey🐒" : "Ape🦧" ) ) ;
290
+ }
291
+ }
182
292
}
183
293
}
184
294
0 commit comments