>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