@@ -284,6 +284,79 @@ http://bugs.ledger-cli.org/show_bug.cgi?id=256"
284284 (call-interactively 'ledger-insert-effective-date ))
285285 (should (equal (buffer-string ) orig-file-contents)))))
286286
287+ (ert-deftest ledger-mode/test-009 ()
288+ " Baseline test for `ledger-insert-effective-date-region' ."
289+ :tags '(mode baseline)
290+
291+ (cl-flet ((file-with-dates (date-1 date-2)
292+ ; ; A file with two optional effective dates.
293+ (format
294+ " \
295+ 2024-01-01%s Grocery Store
296+ Expenses:Groceries $30
297+ Liabilities:Credit Card
298+
299+ 2024-01-02%s Grocery Store
300+ Expenses:Groceries $10
301+ Expenses:Tax $1.50
302+ Liabilities:Credit Card -$11.50
303+ "
304+ (if date-1 (concat " =" date-1) " " )
305+ (if date-2 (concat " =" date-2) " " ))))
306+ (ledger-tests-with-temp-file
307+ (file-with-dates nil nil )
308+
309+ ; ; With no prefix arg, insert or replace effective date for xacts that
310+ ; ; start on a line that overlaps the range. With one, remove the
311+ ; ; effective date.
312+
313+ ; ; Range fully contained in start line.
314+ (save-excursion
315+ (let ((min (progn (forward-char 1 ) (point )))
316+ (max (progn (forward-char 1 ) (point ))))
317+ (ledger-insert-effective-date-region min max " 2024-03-01" )
318+ (should (equal (buffer-string ) (file-with-dates " 2024-03-01" nil )))))
319+
320+ ; ; Range doesn't overlap the start of an xact: don't do anything.
321+ (save-excursion
322+ (let ((min (progn (forward-line 1 ) (point )))
323+ (max (progn (forward-line 3 ) (point ))))
324+ (ledger-insert-effective-date-region min max " 2024-03-02" )
325+ (should (equal (buffer-string ) (file-with-dates " 2024-03-01" nil )))))
326+
327+ ; ; Range overlaps multiple xacts: update them all.
328+ (save-excursion
329+ (let ((min (point ))
330+ (max (progn (forward-line 4 ) (forward-char 1 ) (point ))))
331+ (ledger-insert-effective-date-region min max " 2024-03-03" )
332+ (should (equal (buffer-string )
333+ (file-with-dates " 2024-03-03" " 2024-03-03" )))))
334+
335+ ; ; Remove effective date from multiple.
336+ (save-excursion
337+ (let ((min (point ))
338+ (max (progn (forward-line 4 ) (forward-char 1 ) (point )))
339+ (current-prefix-arg '(4 )))
340+ (ledger-insert-effective-date-region min max nil )
341+ (should (equal (buffer-string ) (file-with-dates nil nil )))))
342+
343+ ; ; Add it back to both.
344+ (save-excursion
345+ (let ((min (point ))
346+ (max (progn (forward-line 4 ) (forward-char 1 ) (point ))))
347+ (ledger-insert-effective-date-region min max " 2024-03-04" )
348+ (should (equal (buffer-string )
349+ (file-with-dates " 2024-03-04" " 2024-03-04" )))))
350+
351+ ; ; Remove from just the first.
352+ (save-excursion
353+ (let ((min (progn (forward-char 1 ) (point )))
354+ (max (progn (forward-char 1 ) (point )))
355+ (current-prefix-arg '(4 )))
356+ (ledger-insert-effective-date-region min max nil )
357+ (should (equal (buffer-string )
358+ (file-with-dates nil " 2024-03-04" ))))))))
359+
287360(provide 'mode-test )
288361
289362; ;; mode-test.el ends here
0 commit comments