Subject: Re: [PATCH] Add basic test suits for tildify package.
From: Stefan Monnier <[email-masked]>
To: Michal Nazarewicz <[email-masked]>
Cc: Milan Zamazal <[email-masked]>, [email-masked]
Date: Tue, 27 May 2014 21:02:36 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

[ Please try not to send the same email to both emacs-devel and
  bug-gnu-emacs.  ]

Thanks, installed.

        Stefan

>>>>> "Michal" == Michal Nazarewicz <[email-masked]> writes:

> ---
>  lisp/ChangeLog                  |   5 ++
>  lisp/textmodes/tildify.el       |  22 +++++----
>  test/ChangeLog                  |   4 ++
>  test/automated/tildify-tests.el | 106 ++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 128 insertions(+), 9 deletions(-)
>  create mode 100644 test/automated/tildify-tests.el

> diff --git a/lisp/ChangeLog b/lisp/ChangeLog
> index 09796f7..c2b1612 100644
> --- a/lisp/ChangeLog
> +++ b/lisp/ChangeLog
> @@ -1,3 +1,8 @@
> +2014-05-21  Michal Nazarewicz  <[email-masked]>
> +
> +	* textmodes/tildify.el (tildify-buffer, tildify-region): Add
> +	dont-ask option.
> +
>  2014-05-19  Leo Liu  <[email-masked]>
 
>  	* emacs-lisp/cl-lib.el (cl-endp): Conform to CL's semantics.
> diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el
> index 9732e7f..339f900 100644
> --- a/lisp/textmodes/tildify.el
> +++ b/lisp/textmodes/tildify.el
> @@ -3,7 +3,7 @@
>  ;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
 
>  ;; Author:     Milan Zamazal <[email-masked]>
> -;; Version:    4.5
> +;; Version:    4.5.1
>  ;; Keywords:   text, TeX, SGML, wp
 
>  ;; This file is part of GNU Emacs.
> @@ -172,20 +172,22 @@ END-REGEX defines end of the corresponding text part and can be either:
>  ;;; *** Interactive functions ***
 
>  ;;;###autoload
> -(defun tildify-region (beg end)
> +(defun tildify-region (beg end &optional dont-ask)
>    "Add hard spaces in the region between BEG and END.
>  See variables `tildify-pattern-alist', `tildify-string-alist', and
>  `tildify-ignored-environments-alist' for information about configuration
>  parameters.
> -This function performs no refilling of the changed text."
> -  (interactive "*r")
> +This function performs no refilling of the changed text.
> +If DONT-ASK is set, or called interactively with prefix argument, user
> +won't be prompted for confirmation of each substitution."
> +  (interactive "*rP")
>    (setq tildify-count 0)
>    (let (a
>  	z
>  	(marker-end (copy-marker end))
>  	end-env
>  	finish
> -	(ask t)
> +	(ask (not dont-ask))
>  	(case-fold-search nil)
>  	(regexp (tildify-build-regexp))	; beginnings of environments
>  	aux)
> @@ -226,14 +228,16 @@ This function performs no refilling of the changed text."
>    (message "%d spaces replaced." tildify-count))
 
>  ;;;###autoload
> -(defun tildify-buffer ()
> +(defun tildify-buffer (&optional dont-ask)
>    "Add hard spaces in the current buffer.
>  See variables `tildify-pattern-alist', `tildify-string-alist', and
>  `tildify-ignored-environments-alist' for information about configuration
>  parameters.
> -This function performs no refilling of the changed text."
> -  (interactive  "*")
> -  (tildify-region (point-min) (point-max)))
> +This function performs no refilling of the changed text.
> +If DONT-ASK is set, or called interactively with prefix argument, user
> +won't be prompted for confirmation of each substitution."
> +  (interactive  "*P")
> +  (tildify-region (point-min) (point-max) dont-ask))

>  ;;; *** Auxiliary functions ***
> diff --git a/test/ChangeLog b/test/ChangeLog
> index 3fed975..17468c2 100644
> --- a/test/ChangeLog
> +++ b/test/ChangeLog
> @@ -1,3 +1,7 @@
> +2014-05-21  Michal Nazarewicz  <[email-masked]>
> +
> +	* automated/tildify-tests.el: New file.
> +
>  2014-05-15  Dmitry Antipov  <[email-masked]>
 
>  	* automated/fns-tests.el: New file.
> diff --git a/test/automated/tildify-tests.el b/test/automated/tildify-tests.el
> new file mode 100644
> index 0000000..4223029
> --- /dev/null
> +++ b/test/automated/tildify-tests.el
> @@ -0,0 +1,106 @@
> +;;; tildify-test.el --- ERT tests for teldify.el
> +
> +;; Copyright (C) 2014 Free Software Foundation, Inc.
> +
> +;; Author:     Michal Nazarewicz <[email-masked]>
> +;; Version:    4.5
> +;; Keywords:   text, TeX, SGML, wp
> +
> +;; This file is part of GNU Emacs.
> +
> +;; GNU Emacs is free software: you can redistribute it and/or modify
> +;; it under the terms of the GNU General Public License as published by
> +;; the Free Software Foundation, either version 3 of the License, or
> +;; (at your option) any later version.
> +
> +;; GNU Emacs is distributed in the hope that it will be useful,
> +;; but WITHOUT ANY WARRANTY; without even the implied warranty of
> +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +;; GNU General Public License for more details.
> +
> +;; You should have received a copy of the GNU General Public License
> +;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
> +
> +;;; Commentary:
> +
> +;; This package defines regression tests for the tildify package.
> +
> +;;; Code:
> +
> +(require 'ert)
> +(require 'tildify)
> +
> +(defun tildify-test--example-sentence (space)
> +  "Return an example sentence with SPACE where hard space is required."
> +  (concat "Lorem ipsum v" space "dolor sit amet, a" space
> +          "consectetur adipiscing elit."))
> +
> +
> +(defun tildify-test--example-html (sentence &optional with-nbsp)
> +  "Return an example HTML code.
> +SENTENCE is placed where spaces should not be replaced with hard spaces, and
> +WITH-NBSP is placed where spaces should be replaced with hard spaces.  If the
> +latter is missing, SENTENCE will be used in all placeholder positions."
> +  (let ((with-nbsp (or with-nbsp sentence)))
> +    (concat "<p>" with-nbsp "</p>\n"
> +            "<pre>" sentence "</pre>\n"
> +            "<! -- " sentence " -- >\n"
> +            "<p>" with-nbsp "</p>\n"
> +            "<" sentence ">\n")))
> +
> +
> +(defun tildify-test--test (modes input expected)
> +  "Test tildify running in MODES.
> +INPUT is the initial content of the buffer and EXPECTED is expected result
> +after `tildify-buffer' is run."
> +  (dolist (mode modes)
> +    (with-temp-buffer
> +      (funcall mode)
> +      (let ((header (concat "Testing `tildify-buffer' in "
> +                            (symbol-name mode) "\n")))
> +        (insert header input)
> +        (tildify-buffer t)
> +        (should (string-equal (concat header expected) (buffer-string)))))
> +    (with-temp-buffer
> +      (funcall mode)
> +      (let ((header (concat "Testing `tildify-region' in "
> +                            (symbol-name mode) "\n")))
> +        (insert header input)
> +        (tildify-region (point-min) (point-max) t)
> +        (should (string-equal (concat header expected) (buffer-string)))))))
> +
> +(ert-deftest tildify-test-html ()
> +  "Tests tildification in an HTML document"
> +  (let* ((sentence (tildify-test--example-sentence " "))
> +         (with-nbsp (tildify-test--example-sentence "&nbsp;")))
> +    (tildify-test--test '(html-mode sgml-mode)
> +                        (tildify-test--example-html sentence sentence)
> +                        (tildify-test--example-html sentence with-nbsp))))
> +
> +
> +(defun tildify-test--example-tex (sentence &optional with-nbsp)
> +  "Return an example (La)Tex code.
> +SENTENCE is placed where spaces should not be replaced with hard spaces, and
> +WITH-NBSP is placed where spaces should be replaced with hard spaces.  If the
> +latter is missing, SENTENCE will be used in all placeholder positions."
> +  (let ((with-nbsp (or with-nbsp sentence)))
> +    (concat with-nbsp "\n"
> +            "\\begin{verbatim}\n" sentence "\n\\end{verbatim}\n"
> +            "\\verb#" sentence "#\n"
> +            "$$" sentence "$$\n"
> +            "$" sentence "$\n"
> +            "\\[" sentence "\\]\n"
> +            "\\v A % " sentence "\n"
> +            with-nbsp "\n")))
> +
> +(ert-deftest tildify-test-tex ()
> +  "Tests tildification in a (La)TeX document"
> +  (let* ((sentence (tildify-test--example-sentence " "))
> +         (with-nbsp (tildify-test--example-sentence "~")))
> +    (tildify-test--test '(tex-mode latex-mode plain-tex-mode)
> +                        (tildify-test--example-tex sentence sentence)
> +                        (tildify-test--example-tex sentence with-nbsp))))
> +
> +(provide 'tildify-tests)
> +
> +;;; tildify-tests.el ends here
> -- 
> 1.9.1.423.g4596e3a