Split up and add tests for two page.el functions

* lisp/textmodes/page.el (page--count-lines-page): New function
extracted from `count-lines-page'.
(count-lines-page): Extract main logic into `page--count-lines-page'.
(page--what-page); New function extracted from `what-page'.
(what-page): Extract main logic into `page--what-page'.

* test/lisp/textmodes/page-tests.el (page-tests-count-lines-page)
(page-tests-what-page): New tests for `page--count-lines-page' and
`page--what-page'.  (Bug#36009)
This commit is contained in:
Simen Heggestøyl 2019-06-22 12:49:04 +02:00
parent b9d0337c84
commit abf7d0d802
2 changed files with 53 additions and 27 deletions

View file

@ -125,41 +125,50 @@ thus showing a page other than the one point was originally in."
(point)))))
(put 'narrow-to-page 'disabled t)
(defun page--count-lines-page ()
"Return a list of line counts on the current page.
The list is on the form (TOTAL BEFORE AFTER), where TOTAL is the
total number of lines on the current page, while BEFORE and AFTER
are the number of lines on the current page before and after
point, respectively."
(save-excursion
(let ((opoint (point)))
(forward-page)
(beginning-of-line)
(unless (looking-at page-delimiter)
(end-of-line))
(let ((end (point)))
(backward-page)
(list (count-lines (point) end)
(count-lines (point) opoint)
(count-lines opoint end))))))
(defun count-lines-page ()
"Report number of lines on current page, and how many are before or after point."
(interactive)
(save-excursion
(let ((opoint (point)) beg end
total before after)
(forward-page)
(beginning-of-line)
(or (looking-at page-delimiter)
(end-of-line))
(setq end (point))
(backward-page)
(setq beg (point))
(setq total (count-lines beg end)
before (count-lines beg opoint)
after (count-lines opoint end))
(message (ngettext "Page has %d line (%d + %d)"
"Page has %d lines (%d + %d)" total)
total before after))))
(pcase-let ((`(,total ,before ,after) (page--count-lines-page)))
(message (ngettext "Page has %d line (%d + %d)"
"Page has %d lines (%d + %d)" total)
total before after)))
(defun what-page ()
"Print page and line number of point."
(interactive)
(defun page--what-page ()
"Return a list of the page and line number of point."
(save-restriction
(widen)
(save-excursion
(let ((count 1)
(opoint (point)))
(goto-char (point-min))
(while (re-search-forward page-delimiter opoint t)
(if (= (match-beginning 0) (match-end 0))
(forward-char 1))
(setq count (1+ count)))
(message "Page %d, line %d" count (line-number-at-pos opoint))))))
(opoint (point)))
(goto-char (point-min))
(while (re-search-forward page-delimiter opoint t)
(when (= (match-beginning 0) (match-end 0))
(forward-char))
(setq count (1+ count)))
(list count (line-number-at-pos opoint))))))
(defun what-page ()
"Print page and line number of point."
(interactive)
(apply #'message (cons "Page %d, line %d" (page--what-page))))
;;; Place `provide' at end of file.

View file

@ -82,5 +82,22 @@
(narrow-to-page -1)
(should (equal (buffer-string) "bar\n"))))
(provide 'page-tests)
(ert-deftest page-tests-count-lines-page ()
(with-temp-buffer
(insert "foo\n \nbar\n \nbaz")
(goto-char (point-min))
(should (equal (page--count-lines-page) '(1 0 1)))
(goto-char (point-max))
(should (equal (page--count-lines-page) '(2 2 0)))))
(ert-deftest page-tests-what-page ()
(with-temp-buffer
(insert "foo\n \nbar\n \nbaz")
(goto-char (point-min))
(should (equal (page--what-page) '(1 1)))
(forward-page)
(should (equal (page--what-page) '(2 2)))
(forward-page)
(should (equal (page--what-page) '(3 4)))))
;;; page-tests.el ends here