]> git.eshelyaron.com Git - emacs.git/commitdiff
Split up and add tests for two page.el functions
authorSimen Heggestøyl <simenheg@gmail.com>
Sat, 22 Jun 2019 10:49:04 +0000 (12:49 +0200)
committerSimen Heggestøyl <simenheg@gmail.com>
Sun, 23 Jun 2019 05:27:19 +0000 (07:27 +0200)
* 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)

lisp/textmodes/page.el
test/lisp/textmodes/page-tests.el

index 8921b697f3be6d725ff564ceb101ca31b2609c14..a42fc6e05382a49b5e8bfe51f90ef9452d1fd0a5 100644 (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 count-lines-page ()
-  "Report number of lines on current page, and how many are before or after point."
-  (interactive)
+(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)) beg end
-         total before after)
+    (let ((opoint (point)))
       (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))))
+      (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 what-page ()
-  "Print page and line number of point."
+(defun count-lines-page ()
+  "Report number of lines on current page, and how many are before or after point."
   (interactive)
+  (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 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))))
 
 \f
 ;;; Place `provide' at end of file.
index 0834d654338f3bfba67732722dc3c3cb1fdafb1d..517f1d5a9e512379d65e590e4aac402c86438c9b 100644 (file)
     (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\f\nbar\n\f\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\f\nbar\n\f\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