From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Aaron S. Hawley" Newsgroups: gmane.emacs.bugs Subject: bug#22800: [PATCH] Unit tests for `forward-sexp' and related commands Date: Thu, 25 Feb 2016 10:45:15 -0500 Message-ID: <1456415115-32007-2-git-send-email-aaron.s.hawley@gmail.com> References: <878u29xrac.fsf@gnus.org> <1456415115-32007-1-git-send-email-aaron.s.hawley@gmail.com> NNTP-Posting-Host: plane.gmane.org X-Trace: ger.gmane.org 1456415189 9590 80.91.229.3 (25 Feb 2016 15:46:29 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 25 Feb 2016 15:46:29 +0000 (UTC) Cc: "Aaron S. Hawley" To: 22800@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Feb 25 16:46:18 2016 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1aYy7N-0001Rm-Nq for geb-bug-gnu-emacs@m.gmane.org; Thu, 25 Feb 2016 16:46:17 +0100 Original-Received: from localhost ([::1]:44021 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYy7N-0005ds-8r for geb-bug-gnu-emacs@m.gmane.org; Thu, 25 Feb 2016 10:46:17 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:48055) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYy7E-0005XJ-PL for bug-gnu-emacs@gnu.org; Thu, 25 Feb 2016 10:46:14 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aYy78-0002WL-Tb for bug-gnu-emacs@gnu.org; Thu, 25 Feb 2016 10:46:08 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:49150) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYy78-0002W7-PB for bug-gnu-emacs@gnu.org; Thu, 25 Feb 2016 10:46:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84) (envelope-from ) id 1aYy78-0004I4-Kg for bug-gnu-emacs@gnu.org; Thu, 25 Feb 2016 10:46:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: "Aaron S. Hawley" Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 25 Feb 2016 15:46:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 22800 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 22800-submit@debbugs.gnu.org id=B22800.145641515216465 (code B ref 22800); Thu, 25 Feb 2016 15:46:02 +0000 Original-Received: (at 22800) by debbugs.gnu.org; 25 Feb 2016 15:45:52 +0000 Original-Received: from localhost ([127.0.0.1]:46276 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aYy6x-0004HV-Nl for submit@debbugs.gnu.org; Thu, 25 Feb 2016 10:45:51 -0500 Original-Received: from mail-qk0-f181.google.com ([209.85.220.181]:36198) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aYy6w-0004H5-9n for 22800@debbugs.gnu.org; Thu, 25 Feb 2016 10:45:50 -0500 Original-Received: by mail-qk0-f181.google.com with SMTP id s68so20728798qkh.3 for <22800@debbugs.gnu.org>; Thu, 25 Feb 2016 07:45:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7mDWTTAyrdzkd8XZTN3QIUTF8B7uJx8DEWWFMzorC3c=; b=O5jnEVshMLrJKSt+gow1db9qCHzg7MTnXC8+vHZv5dAIfZ6mZX9CPPMKI1iqmQ/xrR DKLVRvVkKnYNgluIrZnjZwFi5CI5DHIOF5kV/W+ZnLEKnj08Z/zbxALANFjfCgDzKIyt L25zPb3CTdBabwXV2aNu+3fcpOE4W/ykjzVmv+QrVqHsr5VZQtmnIZdguqk2ZbwmumpR fFXWl7U+rt0Tpba8J9tyfdJ6lHbgMLO5Yo5sDv7X/JiyqTl4SmR8T5rgWZoTPz0pn3Kn SBg2VwpCKKloPDPpIqdHc8O/ImrA0mJ9Wy2TCMVlwEpQLX/bvbChi+D5cFOeoknLkYUk FiUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7mDWTTAyrdzkd8XZTN3QIUTF8B7uJx8DEWWFMzorC3c=; b=EbHka6MSKZWeT/QJvm88opRvtBOshtE3a8AepYX615nolgE7dGP1ppSuQQpnfgFPoL NPLz0tNRY3w8v/xa01n/dcEpOMckDL9AYscMC6+42vd2EXjib+GiK91oejcgIoXqEQF5 6RUP/svSDDWfutPXrEx43Acmqz+ZSRwFs5AXVFZxWcu4+T8lugy8HyLDRovMm/4Nn44v i5Otj1vKBm2EAKSMVqnTATxUZp0/O0VrZIest6oStcuwmQ1z2CYMYUxGzvDH5Ey4EoMd VQNbP60R9cmwEOIrGS9X1hfOEmdWL5/CVEPQWaHHD4S0xbuk4Q+Y4/xYAtjaU0I+RNi8 mh8Q== X-Gm-Message-State: AG10YORXbrfjIjatnNNZu6Jo/rCT81QI2cSny3qY0+7einZjEzoqgqSMktsw5TTY6oxB2A== X-Received: by 10.55.192.89 with SMTP id o86mr34126730qki.31.1456415144881; Thu, 25 Feb 2016 07:45:44 -0800 (PST) Original-Received: from Aarons-MacBook-Air.local.com ([67.217.115.210]) by smtp.gmail.com with ESMTPSA id y99sm3510380qge.3.2016.02.25.07.45.44 (version=TLS1 cipher=AES128-SHA bits=128/128); Thu, 25 Feb 2016 07:45:44 -0800 (PST) X-Mailer: git-send-email 2.3.0 (Apple Git-54) In-Reply-To: <1456415115-32007-1-git-send-email-aaron.s.hawley@gmail.com> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:113805 Archived-At: * test/lisp/emacs-lisp/lisp-tests.el: New file. --- test/lisp/emacs-lisp/lisp-tests.el | 211 +++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 test/lisp/emacs-lisp/lisp-tests.el diff --git a/test/lisp/emacs-lisp/lisp-tests.el b/test/lisp/emacs-lisp/lisp-tests.el new file mode 100644 index 0000000..4fe20f0 --- /dev/null +++ b/test/lisp/emacs-lisp/lisp-tests.el @@ -0,0 +1,211 @@ +;;; lisp-tests.el --- Test Lisp editing commands -*- lexical-binding: t; -*- + +;; Copyright (C) 2013-2016 Free Software Foundation, Inc. + +;; Author: Aaron S. Hawley +;; Keywords: internal + +;; 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: + +;; Testing of `forward-sexp' and related functions. + +;;; Code: + +(require 'ert) +(require 'python) + +(ert-deftest lisp-forward-sexp-1-empty-parens () + "Test basics of \\[forward-sexp]." + (with-temp-buffer + (insert "()") + (goto-char (point-min)) + (should (null + (forward-sexp 1))))) + +(ert-deftest lisp-forward-sexp-1-error-mismatch () + "Test basics of \\[forward-sexp]." + (with-temp-buffer + (insert "(") + (goto-char (point-min)) + (should-error + (forward-sexp 1)))) + +(ert-deftest lisp-backward-sexp-1-empty-parens () + "Test basics of \\[backward-sexp]." + (with-temp-buffer + (insert "()") + (should (null + (forward-sexp -1))))) + +(ert-deftest lisp-backward-sexp-1-error-mismatch () + "Test mismatched parens with \\[backward-sexp]." + (with-temp-buffer + (insert "(") + (should-error + (forward-sexp -1)))) + +(ert-deftest lisp-forward-sexp-1-eobp () + "Test \\[forward-sexp] at `eobp'." + (with-temp-buffer + (insert "()") + (should (null ;; (should-error ;; No, per #13994 + (forward-sexp 1))))) + +(ert-deftest lisp-backward-sexp-1-eobp () + "Test \\[backward-sexp] at `bobp'." + (with-temp-buffer + (insert "()") + (goto-char (point-min)) + (should (null ;; (should-error ;; No, per #13994 + (forward-sexp -1))))) + +(ert-deftest lisp-forward-sexp-2-eobp () + "Test \\[forward-sexp] beyond `eobp'." + (with-temp-buffer + (insert "()") + (goto-char (point-min)) + (should (null ;; (should-error ;; No, per #13994 + (forward-sexp 2))) + (should (eobp)))) + +(ert-deftest lisp-backward-sexp-2-bobp () + "Test \\[backward-sexp] beyond `bobp'." + (with-temp-buffer + (insert "()") + (should (null ;; (should-error ;; No, per #13994 + (forward-sexp -2))) + (should (bobp)))) + +(ert-deftest lisp-forward-sexp-2-eobp-and-subsequent () + "Test \\[forward-sexp] beyond `eobp' and again." + (with-temp-buffer + (insert "()") + (goto-char (point-min)) + (should (null ;; (should-error ;; No, per #13994 + (forward-sexp 2))) + (should (eobp)) + (should (null ;; (should-error ;; No, per #13994 + (forward-sexp 1))))) + +(ert-deftest lisp-backward-sexp-2-bobp-and-subsequent () + "Test \\[backward-sexp] ahead of `bobp' and again." + (with-temp-buffer + (insert "()") + (should (null ;; (should-error ;; No, per #13994 + (forward-sexp -2))) + (should (bobp)) + (should (null ;; (should-error ;; No, per #13994 + (forward-sexp -1))))) + +(ert-deftest lisp-delete-pair-parens () + "Test \\[delete-pair] with parens." + (with-temp-buffer + (insert "(foo)") + (goto-char (point-min)) + (delete-pair) + (should (string-equal "foo" (buffer-string))))) + +(ert-deftest lisp-delete-pair-quotation-marks () + "Test \\[delete-pair] with quotation marks." + (with-temp-buffer + (insert "\"foo\"") + (goto-char (point-min)) + (delete-pair) + (should (string-equal "foo" (buffer-string))))) + +(ert-deftest lisp-delete-pair-quotes-in-text-mode () + "Test \\[delete-pair] against string in Text Mode for #15014." + (with-temp-buffer + (text-mode) + (insert "\"foo\"") + (goto-char (point-min)) + (delete-pair) + (should (string-equal "fo\"" (buffer-string))))) + +(ert-deftest lisp-delete-pair-quotes-text-mode-syntax-table () + "Test \\[delete-pair] with modified Text Mode syntax for #15014." + (with-temp-buffer + (text-mode) + (let ((st (copy-syntax-table text-mode-syntax-table))) + (with-syntax-table st + ;; (modify-syntax-entry ?\" "." text-mode-syntax-table) + (modify-syntax-entry ?\" "$" st) + (insert "\"foo\"") + (goto-char (point-min)) + (delete-pair) + (should (string-equal "foo" (buffer-string))))))) + +(ert-deftest lisp-forward-sexp-elisp-inside-symbol () + "Test \\[forward-sexp] on symbol in Emacs Lisp Mode for #20492." + (with-temp-buffer + (emacs-lisp-mode) + (insert "hide-ifdef-env ") + (insert (concat (number-sequence 32 126))) + (goto-char (point-min)) + (re-search-forward "hide" nil t) ;; (forward-char 4) + (should (looking-at "-")) + (forward-sexp) + (should (looking-at " ")))) + +(ert-deftest lisp-forward-sexp-elisp-quoted-symbol () + "Test \\[forward-sexp] on symbol in Emacs Lisp Mode for #20492." + (with-temp-buffer + (emacs-lisp-mode) + (insert "`hide-ifdef-env'.") + (goto-char (point-min)) + (re-search-forward "hide" nil t) ;; (forward-char 5) + (should (= ?- (char-after))) + (forward-sexp) + (should (= ?. (char-before))))) + +(ert-deftest lisp-forward-sexp-python-triple-quoted-string () + "Test \\[forward-sexp] on Python doc strings for #11321." + (with-temp-buffer + (insert "\"\"\"Triple-quoted string\"\"\"") + (goto-char (point-min)) + (let ((python-indent-guess-indent-offset nil)) + (python-mode)) + (forward-sexp) + (should (eobp)))) + +(ert-deftest lisp-forward-sexp-python-triple-quotes-string () + "Test \\[forward-sexp] on Python doc strings for #11321." + (with-temp-buffer + (insert "'''Triple-quoted string'''") + (goto-char (point-min)) + (let ((python-indent-guess-indent-offset nil)) + (python-mode)) + (forward-sexp) + (should (eobp)))) + +(ert-deftest lisp-forward-sexp-emacs-lisp-semi-char-error () + "Test \\[forward-sexp] on expression with unquoted semicolon per #4030." + (with-temp-buffer + (emacs-lisp-mode) + (insert "(insert ?;)") + (goto-char (point-min)) + (should-error (forward-sexp)))) ;; FIXME: Shouldn't be an error. + +(ert-deftest lisp-forward-sexp-emacs-lisp-quote-char () + "Test \\[forward-sexp] on expression with unquoted quote per #4030." + (with-temp-buffer + (emacs-lisp-mode) + (insert "(insert ?\")") + (goto-char (point-min)) + (should-error (forward-sexp)))) ;; FIXME: Shouldn't be an error. + +(provide 'lisp-tests) +;;; lisp-tests.el ends here -- 2.3.0 (Apple Git-54)