>From 5996f483ad5ee1a14436c4239dc2f83e9d097e9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Wojnowski?= Date: Sun, 17 May 2015 21:49:05 +0200 Subject: [PATCH] * test/automated/sgml-mode-tests.el: Tests for sgml-delete-tag A test case for (Bug#8203). --- test/automated/sgml-mode-tests.el | 135 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 test/automated/sgml-mode-tests.el diff --git a/test/automated/sgml-mode-tests.el b/test/automated/sgml-mode-tests.el new file mode 100644 index 0000000..0e9272d --- /dev/null +++ b/test/automated/sgml-mode-tests.el @@ -0,0 +1,135 @@ +;;; sgml-mode-tests.el --- Tests for sgml-mode + +;; Copyright (C) 2015 Free Software Foundation, Inc. + +;; Author: Przemysław Wojnowski +;; Keywords: tests + +;; 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 . + +;;; Commentary: + +;;; Code: + +(require 'sgml-mode) +(require 'ert) + +(defmacro with-content (content &rest body) + "Insert CONTENT into a temporary `sgml-mode' buffer and execute BODY on it. +The point is set to the beginning of the buffer." + `(with-temp-buffer + (sgml-mode) + (insert ,content) + (goto-char (point-min)) + ,@body)) + + +;;; sgml-delete-tag tests: +(ert-deftest should-not-delete-tags-when-wrong-args () + "Don't delete tag, when number of tags to delete is not positive number." + (let ((content "

Valar Morghulis

")) + (with-content + content + (sgml-delete-tag -1) + (should (string= content (buffer-string))) + (sgml-delete-tag 0) + (should (string= content (buffer-string)))))) + +(ert-deftest should-delete-tags-n-times () + ;; Delete only 1, when 1 available: + (with-content + "
" + (sgml-delete-tag 1) + (should (string= "" (buffer-string)))) + ;; Delete from position on whitespaces before tag: + (with-content + " \t\n
" + (sgml-delete-tag 1) + (should (string= "" (buffer-string)))) + ;; Delete from position on tag: + (with-content + "
" + (goto-char 3) + (sgml-delete-tag 1) + (should (string= "" (buffer-string)))) + ;; Delete one by one: + (with-content + "

You know nothing, Jon Snow.

" + (sgml-delete-tag 1) + (should (string= "

You know nothing, Jon Snow.

" (buffer-string))) + (sgml-delete-tag 1) + (should (string= "You know nothing, Jon Snow." (buffer-string)))) + ;; Delete 2 at a time, when 2 available: + (with-content + "

You know nothing, Jon Snow.

" + (sgml-delete-tag 2) + (should (string= "You know nothing, Jon Snow." (buffer-string))))) + +(ert-deftest should-delete-unclosed-tag () + (with-content + "
  • Keep your stones connected.
" + (goto-char 5) ; position on "li" tag + (sgml-delete-tag 1) + (should (string= "
    Keep your stones connected.
" (buffer-string))))) + +(ert-deftest should-signal-error-for-malformed-tags () + (let ((content "

Drakaris!

")) + ;; Delete outside tag: + (with-content + content + (sgml-delete-tag 1) + (should (string= "

Drakaris!

" (buffer-string)))) + ;; Delete inner tag: + (with-content + content + (goto-char 5) ; position the inner tag + (sgml-delete-tag 1) + (should (string= "

Drakaris!

" (buffer-string)))))) + +(ert-deftest should-signal-error-when-deleting-too-much () + (let ((content "Drakaris!")) + ;; No tags to delete: + (with-content + "Drakaris!" + (should-error (sgml-delete-tag 1) :type 'error) + (should (string= "Drakaris!" (buffer-string)))) + ;; Trying to delete 2 tags, when only 1 available: + (with-content + content + (should-error (sgml-delete-tag 2) :type 'error) + (should (string= "Drakaris!" (buffer-string)))) + ;; Trying to delete a tag, but not on/before a tag: + (with-content + content + (goto-char 7) ; D in Drakaris + (should-error (sgml-delete-tag 1) :type 'error) + (should (string= content (buffer-string)))) + ;; Trying to delete a tag from position outside tag: + (with-content + content + (goto-char (point-max)) + (should-error (sgml-delete-tag 1) :type 'error) + (should (string= content (buffer-string)))))) + +(ert-deftest bug-8203-sgml-delete-tag-should-not-delete-apostrophe () + :expected-result :failed + (with-content + "Winter is comin'" + (sgml-delete-tag 1) + (should (string= "Winter is comin'" (buffer-string))))) + +(provide 'sgml-mode-tests) +;;; sgml-mode-tests.el ends here -- 2.1.0