@@ -227,6 +227,122 @@ void main() {
227
227
},
228
228
);
229
229
230
+ group ('replaceMentions with special regex characters' , () {
231
+ test ('should handle usernames with parentheses' , () {
232
+ final user = User (id: 'user1' , name: 'Tester (X)' );
233
+
234
+ final message = Message (
235
+ text: 'Hello, @Tester (X)!' ,
236
+ mentionedUsers: [user],
237
+ );
238
+
239
+ final modifiedMessage = message.replaceMentions ();
240
+
241
+ expect (modifiedMessage.text, equals ('Hello, [@Tester (X)](user1)!' ));
242
+ });
243
+
244
+ test ('should handle usernames with square brackets' , () {
245
+ final user = User (id: 'user1' , name: 'User[123]' );
246
+
247
+ final message = Message (
248
+ text: 'Hello, @User[123]!' ,
249
+ mentionedUsers: [user],
250
+ );
251
+
252
+ final modifiedMessage = message.replaceMentions ();
253
+
254
+ expect (modifiedMessage.text, equals ('Hello, [@User[123]](user1)!' ));
255
+ });
256
+
257
+ test ('should handle usernames with dots and asterisks' , () {
258
+ final user = User (id: 'user1' , name: 'user.name*' );
259
+
260
+ final message = Message (
261
+ text: 'Hello, @user.name*!' ,
262
+ mentionedUsers: [user],
263
+ );
264
+
265
+ final modifiedMessage = message.replaceMentions ();
266
+
267
+ expect (modifiedMessage.text, equals ('Hello, [@user.name*](user1)!' ));
268
+ });
269
+
270
+ test ('should handle usernames with plus and question marks' , () {
271
+ final user = User (id: 'user1' , name: 'test+user?' );
272
+
273
+ final message = Message (
274
+ text: 'Hello, @test+user?!' ,
275
+ mentionedUsers: [user],
276
+ );
277
+
278
+ final modifiedMessage = message.replaceMentions ();
279
+
280
+ expect (modifiedMessage.text, equals ('Hello, [@test+user?](user1)!' ));
281
+ });
282
+
283
+ test ('should handle usernames without linkify' , () {
284
+ final user = User (id: 'user1' , name: 'Tester (X)' );
285
+
286
+ final message = Message (
287
+ text: 'Hello, @Tester (X)!' ,
288
+ mentionedUsers: [user],
289
+ );
290
+
291
+ final modifiedMessage = message.replaceMentions (linkify: false );
292
+
293
+ expect (modifiedMessage.text, equals ('Hello, @Tester (X)!' ));
294
+ });
295
+
296
+ test ('should not replace partial matches' , () {
297
+ final user = User (id: 'user1' , name: 'Test (X)' );
298
+
299
+ final message = Message (
300
+ text: 'Hello, @Test (X) and @Test (Y)!' ,
301
+ mentionedUsers: [user],
302
+ );
303
+
304
+ final modifiedMessage = message.replaceMentions ();
305
+
306
+ expect (
307
+ modifiedMessage.text,
308
+ equals ('Hello, [@Test (X)](user1) and @Test (Y)!' ),
309
+ );
310
+ });
311
+
312
+ test ('should handle userIds with special characters' , () {
313
+ final user = User (id: 'user.id+123' , name: 'TestUser' );
314
+
315
+ final message = Message (
316
+ text: 'Hello, @user.id+123!' ,
317
+ mentionedUsers: [user],
318
+ );
319
+
320
+ final modifiedMessage = message.replaceMentions ();
321
+
322
+ expect (
323
+ modifiedMessage.text,
324
+ equals ('Hello, [@TestUser](user.id+123)!' ),
325
+ );
326
+ });
327
+
328
+ test ('should handle both userId and userName with special characters' ,
329
+ () {
330
+ final user = User (id: 'user[123]' , name: 'Test (X)' );
331
+
332
+ final message = Message (
333
+ text: 'Hello, @user[123] and @Test (X)!' ,
334
+ mentionedUsers: [user],
335
+ );
336
+
337
+ final modifiedMessage = message.replaceMentions ();
338
+
339
+ expect (
340
+ modifiedMessage.text,
341
+ equals ('Hello, [@Test (X)](user[123]) and [@Test (X)](user[123])!' ),
342
+ );
343
+ });
344
+ });
345
+
230
346
test ('replaceMentionsWithId should replace user names with IDs' , () {
231
347
final user1 = User (id: 'user1' , name: 'Alice' );
232
348
final user2 = User (id: 'user2' , name: 'Bob' );
0 commit comments