38
38
39
39
static WGroup owner ;
40
40
static WEdit * test_edit ;
41
+ static const char * * replace_regex__from ;
42
+ static const char * * replace_regex__to ;
41
43
static gboolean only_in_selection = FALSE;
42
44
43
- static const char * test_regex_in = "qwe\n" //
44
- "qwe\n" //
45
- "qwe\n" //
46
- "qwe\n" //
47
- "qwe\n" //
48
- "qwe\n" //
49
- "qwe\n" //
50
- "qwe\n" ; //
51
- static const char * test_regex_out = "Xqwe\n" //
52
- "Xqwe\n" //
53
- "Xqwe\n" //
54
- "Xqwe\n" //
55
- "Xqwe\n" //
56
- "Xqwe\n" //
57
- "Xqwe\n" //
58
- "Xqwe\n" ; //
59
-
60
- static const char * test_regex_selected_in = "qwe\n" //
61
- "qwe\n" //
62
- "qwe\n" // selected, mark1 = 8 (begin of line) or 9
63
- "qwe\n" // selected
64
- "qwe\n" // selected
65
- "qwe\n" // mark2 = 20, begin of line
66
- "qwe\n" //
67
- "qwe\n" ; //
45
+ // input text: entire text
46
+ static const char * test_regex_in = "qwe\n" //
47
+ "qwe\n" //
48
+ "qwe\n" //
49
+ "qwe\n" //
50
+ "qwe\n" //
51
+ "qwe\n" //
52
+ "qwe\n" //
53
+ "qwe\n" ; //
54
+
55
+ // insert char at begin of string:
56
+ // s/^.*/X\\0
57
+ // s/^/X
58
+ // not in selection
59
+ static const char * test_regex_out1 = "Xqwe\n" //
60
+ "Xqwe\n" //
61
+ "Xqwe\n" //
62
+ "Xqwe\n" //
63
+ "Xqwe\n" //
64
+ "Xqwe\n" //
65
+ "Xqwe\n" //
66
+ "Xqwe\n" ; //
67
+
68
+ // replace first char of string:
69
+ // s/^./X
70
+ // not in selection
71
+ static const char * test_regex_out2 = "Xwe\n" //
72
+ "Xwe\n" //
73
+ "Xwe\n" //
74
+ "Xwe\n" //
75
+ "Xwe\n" //
76
+ "Xwe\n" //
77
+ "Xwe\n" //
78
+ "Xwe\n" ; //
79
+
80
+ // input text: selected
81
+ static const char * test_regex_selected_in = "qwe\n" //
82
+ "qwe\n" //
83
+ "qwe\n" // selected, mark1 = 8 (begin of string) or 9
84
+ "qwe\n" // selected
85
+ "qwe\n" // selected
86
+ "qwe\n" // mark2 = 20, begin of string
87
+ "qwe\n" //
88
+ "qwe\n" ; //
89
+
90
+ // insert char at begin of string:
91
+ // s/^.*/X\\0
92
+ // in selection from begin of string
68
93
static const char * test1_regex_selected_out = "qwe\n" //
69
94
"qwe\n" //
70
- "Xqwe\n" // selected, mark1 = 8 (begin of line )
95
+ "Xqwe\n" // selected, mark1 = 8 (begin of string )
71
96
"Xqwe\n" // selected
72
97
"Xqwe\n" // selected
73
- "qwe\n" // mark2 = 20, begin of line
98
+ "qwe\n" // mark2 = 20, begin of string
74
99
"qwe\n" //
75
100
"qwe\n" ; //
101
+
102
+ // insert char at begin of string:
103
+ // s/^.*/X\\0
104
+ // in selection not from begin of string
76
105
static const char * test2_regex_selected_out = "qwe\n" //
77
106
"qwe\n" //
78
- "qwe\n" // selected, mark1 = 9 (not begin of line )
107
+ "qwe\n" // selected, mark1 = 9 (not begin of string )
79
108
"Xqwe\n" // selected
80
109
"Xqwe\n" // selected
81
- "qwe\n" // mark2 = 20, begin of line
110
+ "qwe\n" // mark2 = 20, begin of string
82
111
"qwe\n" //
83
112
"qwe\n" ; //
84
113
85
- static const char * replace_regex_from = "^.*" ;
86
- static const char * replace_regex_to = "X\\0" ;
114
+ static const char * replace_regex_entire_string__from = "^.*" ;
115
+ static const char * replace_regex_entire_string__to = "X\\0" ;
116
+
117
+ static const char * replace_regex_insert_char_at_begin_of_string__from = "^" ;
118
+ static const char * replace_regex_replace_first_char_of_string__from = "^." ;
119
+ static const char * replace_regex_begin_of_string__to = "X" ;
87
120
88
121
/* --------------------------------------------------------------------------------------------- */
89
122
@@ -145,8 +178,8 @@ edit_dialog_replace_show (WEdit *edit, const char *search_default, const char *r
145
178
(void ) search_default ;
146
179
(void ) replace_default ;
147
180
148
- * search_text = g_strdup (replace_regex_from );
149
- * replace_text = g_strdup (replace_regex_to );
181
+ * search_text = g_strdup (* replace_regex__from );
182
+ * replace_text = g_strdup (* replace_regex__to );
150
183
151
184
edit_search_options .type = MC_SEARCH_T_REGEX ;
152
185
edit_search_options .only_in_selection = only_in_selection ;
@@ -264,10 +297,61 @@ test_replace_check (const char *test_out)
264
297
265
298
/* --------------------------------------------------------------------------------------------- */
266
299
267
- START_TEST (test_replace_regex )
300
+ // replace entire string
301
+ START_TEST (test_replace_regex__entire_string )
302
+ {
303
+ // given
304
+ only_in_selection = FALSE;
305
+ replace_regex__from = & replace_regex_entire_string__from ;
306
+ replace_regex__to = & replace_regex_entire_string__to ;
307
+ test_edit -> mark1 = 0 ;
308
+ test_edit -> mark2 = 0 ;
309
+
310
+ for (const char * ti = test_regex_in ; * ti != '\0' ; ti ++ )
311
+ edit_buffer_insert (& test_edit -> buffer , * ti );
312
+
313
+ // when
314
+ edit_cursor_move (test_edit , 0 );
315
+ edit_replace_cmd (test_edit , FALSE);
316
+
317
+ // then
318
+ test_replace_check (test_regex_out1 );
319
+ }
320
+ END_TEST
321
+
322
+ /* --------------------------------------------------------------------------------------------- */
323
+
324
+ // insert first char in string
325
+ START_TEST (test_replace_regex__insert_char_at_begin_of_string )
326
+ {
327
+ // given
328
+ only_in_selection = FALSE;
329
+ replace_regex__from = & replace_regex_insert_char_at_begin_of_string__from ;
330
+ replace_regex__to = & replace_regex_begin_of_string__to ;
331
+ test_edit -> mark1 = 0 ;
332
+ test_edit -> mark2 = 0 ;
333
+
334
+ for (const char * ti = test_regex_in ; * ti != '\0' ; ti ++ )
335
+ edit_buffer_insert (& test_edit -> buffer , * ti );
336
+
337
+ // when
338
+ edit_cursor_move (test_edit , 0 );
339
+ edit_replace_cmd (test_edit , FALSE);
340
+
341
+ // then
342
+ test_replace_check (test_regex_out1 );
343
+ }
344
+ END_TEST
345
+
346
+ /* --------------------------------------------------------------------------------------------- */
347
+
348
+ // replace first char of string
349
+ START_TEST (test_replace_regex__replace_first_char_of_string )
268
350
{
269
351
// given
270
352
only_in_selection = FALSE;
353
+ replace_regex__from = & replace_regex_replace_first_char_of_string__from ;
354
+ replace_regex__to = & replace_regex_begin_of_string__to ;
271
355
test_edit -> mark1 = 0 ;
272
356
test_edit -> mark2 = 0 ;
273
357
@@ -279,16 +363,19 @@ START_TEST (test_replace_regex)
279
363
edit_replace_cmd (test_edit , FALSE);
280
364
281
365
// then
282
- test_replace_check (test_regex_out );
366
+ test_replace_check (test_regex_out2 );
283
367
}
284
368
END_TEST
285
369
286
370
/* --------------------------------------------------------------------------------------------- */
287
371
288
- START_TEST (test1_replace_regex_in_selection )
372
+ // replace from begin of string in selection
373
+ START_TEST (test_replace_regex__in_selection_top_down_1 )
289
374
{
290
375
// given
291
376
only_in_selection = TRUE;
377
+ replace_regex__from = & replace_regex_entire_string__from ;
378
+ replace_regex__to = & replace_regex_entire_string__to ;
292
379
test_edit -> mark1 = 8 ;
293
380
test_edit -> mark2 = 20 ;
294
381
@@ -306,10 +393,13 @@ END_TEST
306
393
307
394
/* --------------------------------------------------------------------------------------------- */
308
395
309
- START_TEST (test2_replace_regex_in_selection )
396
+ // replace not from begin of string in selection
397
+ START_TEST (test_replace_regex__in_selection_top_down_2 )
310
398
{
311
399
// given
312
400
only_in_selection = TRUE;
401
+ replace_regex__from = & replace_regex_entire_string__from ;
402
+ replace_regex__to = & replace_regex_entire_string__to ;
313
403
test_edit -> mark1 = 9 ;
314
404
test_edit -> mark2 = 20 ;
315
405
@@ -327,6 +417,54 @@ END_TEST
327
417
328
418
/* --------------------------------------------------------------------------------------------- */
329
419
420
+ // replace from begin of string in selection
421
+ START_TEST (test_replace_regex__in_selection_bottom_up_1 )
422
+ {
423
+ // given
424
+ only_in_selection = TRUE;
425
+ replace_regex__from = & replace_regex_entire_string__from ;
426
+ replace_regex__to = & replace_regex_entire_string__to ;
427
+ test_edit -> mark1 = 20 ;
428
+ test_edit -> mark2 = 8 ;
429
+
430
+ for (const char * ti = test_regex_selected_in ; * ti != '\0' ; ti ++ )
431
+ edit_buffer_insert (& test_edit -> buffer , * ti );
432
+
433
+ // when
434
+ edit_cursor_move (test_edit , 0 );
435
+ edit_replace_cmd (test_edit , FALSE);
436
+
437
+ // then
438
+ test_replace_check (test1_regex_selected_out );
439
+ }
440
+ END_TEST
441
+
442
+ /* --------------------------------------------------------------------------------------------- */
443
+
444
+ // replace not from begin of string in selection
445
+ START_TEST (test_replace_regex__in_selection_bottom_up_2 )
446
+ {
447
+ // given
448
+ only_in_selection = TRUE;
449
+ replace_regex__from = & replace_regex_entire_string__from ;
450
+ replace_regex__to = & replace_regex_entire_string__to ;
451
+ test_edit -> mark1 = 20 ;
452
+ test_edit -> mark2 = 9 ;
453
+
454
+ for (const char * ti = test_regex_selected_in ; * ti != '\0' ; ti ++ )
455
+ edit_buffer_insert (& test_edit -> buffer , * ti );
456
+
457
+ // when
458
+ edit_cursor_move (test_edit , 0 );
459
+ edit_replace_cmd (test_edit , FALSE);
460
+
461
+ // then
462
+ test_replace_check (test2_regex_selected_out );
463
+ }
464
+ END_TEST
465
+
466
+ /* --------------------------------------------------------------------------------------------- */
467
+
330
468
int
331
469
main (void )
332
470
{
@@ -337,9 +475,13 @@ main (void)
337
475
tcase_add_checked_fixture (tc_core , setup , teardown );
338
476
339
477
// Add new tests here: ***************
340
- tcase_add_test (tc_core , test_replace_regex );
341
- tcase_add_test (tc_core , test1_replace_regex_in_selection );
342
- tcase_add_test (tc_core , test2_replace_regex_in_selection );
478
+ tcase_add_test (tc_core , test_replace_regex__entire_string );
479
+ tcase_add_test (tc_core , test_replace_regex__insert_char_at_begin_of_string );
480
+ tcase_add_test (tc_core , test_replace_regex__replace_first_char_of_string );
481
+ tcase_add_test (tc_core , test_replace_regex__in_selection_top_down_1 );
482
+ tcase_add_test (tc_core , test_replace_regex__in_selection_top_down_2 );
483
+ tcase_add_test (tc_core , test_replace_regex__in_selection_bottom_up_1 );
484
+ tcase_add_test (tc_core , test_replace_regex__in_selection_bottom_up_2 );
343
485
// ***********************************
344
486
345
487
return mctest_run_all (tc_core );
0 commit comments