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' Date: Wed, 24 Feb 2016 14:50:13 -0500 Message-ID: <1456343413-64418-2-git-send-email-aaron.s.hawley@gmail.com> References: <1456343413-64418-1-git-send-email-aaron.s.hawley@gmail.com> NNTP-Posting-Host: plane.gmane.org X-Trace: ger.gmane.org 1456343491 29036 80.91.229.3 (24 Feb 2016 19:51:31 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 24 Feb 2016 19:51:31 +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 Wed Feb 24 20:51:21 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 1aYfSq-00085m-WD for geb-bug-gnu-emacs@m.gmane.org; Wed, 24 Feb 2016 20:51:13 +0100 Original-Received: from localhost ([::1]:37982 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYfSq-0005wd-F1 for geb-bug-gnu-emacs@m.gmane.org; Wed, 24 Feb 2016 14:51:12 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:54050) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYfSl-0005w2-NH for bug-gnu-emacs@gnu.org; Wed, 24 Feb 2016 14:51:09 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aYfSh-0000fC-7w for bug-gnu-emacs@gnu.org; Wed, 24 Feb 2016 14:51:07 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:47104) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYfSh-0000f8-57 for bug-gnu-emacs@gnu.org; Wed, 24 Feb 2016 14:51:03 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84) (envelope-from ) id 1aYfSg-0006sl-W5 for bug-gnu-emacs@gnu.org; Wed, 24 Feb 2016 14:51:03 -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: Wed, 24 Feb 2016 19:51:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 22800 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.145634346126431 (code B ref -1); Wed, 24 Feb 2016 19:51:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 24 Feb 2016 19:51:01 +0000 Original-Received: from localhost ([127.0.0.1]:44229 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aYfSe-0006sE-Fz for submit@debbugs.gnu.org; Wed, 24 Feb 2016 14:51:00 -0500 Original-Received: from eggs.gnu.org ([208.118.235.92]:34722) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aYfSd-0006s3-77 for submit@debbugs.gnu.org; Wed, 24 Feb 2016 14:50:59 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aYfSW-0000XG-RB for submit@debbugs.gnu.org; Wed, 24 Feb 2016 14:50:54 -0500 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:46775) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYfSW-0000XB-OC for submit@debbugs.gnu.org; Wed, 24 Feb 2016 14:50:52 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:53906) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYfSV-0005uM-Cb for bug-gnu-emacs@gnu.org; Wed, 24 Feb 2016 14:50:52 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aYfSQ-0000W7-8Q for bug-gnu-emacs@gnu.org; Wed, 24 Feb 2016 14:50:51 -0500 Original-Received: from mail-qk0-x232.google.com ([2607:f8b0:400d:c09::232]:33927) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYfSQ-0000W3-31 for bug-gnu-emacs@gnu.org; Wed, 24 Feb 2016 14:50:46 -0500 Original-Received: by mail-qk0-x232.google.com with SMTP id x1so11232808qkc.1 for ; Wed, 24 Feb 2016 11:50:45 -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=qfQzn2ZloNzXF5mv9kQO0CFGVXZ6qxDNtuSgqTqWsrE=; b=e4n+X+z3CKgESRy1bCL0Bq2fapIZ3nGL6NqiqR0UCWESFnyt1dNTDDDbYN1COK4fLB JuSimBaN0ZmokFb3i+KQVNt9RbEIloYDuWvIgpexpeEvN3mrOzMJaZdRJ6B/NocKQod0 R78gxTk51ghGbTT9VG2eWR7PRFWPHvu7yUnd7dJfUzDwRXZegaVDemKTrUsVAv6/+RO6 T1nN+XA4uf73IAeu8l6iyWREuW+tQ+w/6hXEywdS+RSlXJ/U9VJzgWO5Zs0gmMB2zVy1 iJyzzbT3KxVKFwP2FdLCBPRdFt8PRerL30tNqFjvB2AuPMnKEe6q+l3Y2OXCnkHc3Py6 4XHQ== 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=qfQzn2ZloNzXF5mv9kQO0CFGVXZ6qxDNtuSgqTqWsrE=; b=NM0rWpiwJy/TFN2FZ2C6m+XZZpvrvaSbqiafCK1Zg+FvApi+M+RerJnh63MhE9IjAT VJzVTFc/Cni7qH03imCBJPfKVza9fxrAB5Pg9IZbd0mqssoJTJYZuxawAsp9NP9iZ418 H7pnPRbgHG9fhOsfkwPyOqlmhQYWRGJyzcSTLcgRTH7Jh2y+SgwOo2YYJWaOP2NxJeeT Qn0zVMAdeYvtydOkg9KSYfOm87VB2oziA1wcl02srzOxRsF3redIdsh6pKYxPvvfrk88 jEGUHHELs4oHqN3Lm8BmDRS4c4TP6jhskN1KAnEsWwL39pMXrbghmYS/MrGDPaCq+O2A A0+Q== X-Gm-Message-State: AG10YOTG4xdfe7rIE0RJhPT1D9fVuVFzEwz8xeYpID8dnzcv1Qrir+oyqoTzieD3HeQ8SQ== X-Received: by 10.55.201.219 with SMTP id m88mr36566360qkl.41.1456343445618; Wed, 24 Feb 2016 11:50:45 -0800 (PST) Original-Received: from aarons-air.mi.middil.com ([67.217.115.210]) by smtp.gmail.com with ESMTPSA id b135sm1856016qka.2.2016.02.24.11.50.44 (version=TLS1 cipher=AES128-SHA bits=128/128); Wed, 24 Feb 2016 11:50:45 -0800 (PST) X-Mailer: git-send-email 2.3.0 (Apple Git-54) In-Reply-To: <1456343413-64418-1-git-send-email-aaron.s.hawley@gmail.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x 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:113743 Archived-At: * test/lisp/forward-sexp-tests.el: New file. --- test/lisp/forward-sexp-tests.el | 199 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 test/lisp/forward-sexp-tests.el diff --git a/test/lisp/forward-sexp-tests.el b/test/lisp/forward-sexp-tests.el new file mode 100644 index 0000000..6eb13ae --- /dev/null +++ b/test/lisp/forward-sexp-tests.el @@ -0,0 +1,199 @@ +;;; forward-sexp-tests.el --- Test forward-sexp and related functions -*- 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'. + +;;; Code: + +(require 'ert) + +(ert-deftest forward-sexp-1 () + "Test basics of \\[forward-sexp]." + (with-temp-buffer + (insert "()") + (goto-char (point-min)) + (should (null + (forward-sexp 1))))) + +(ert-deftest 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 forward-sexp-backward-1 () + "Test basics of \\[backward-sexp]." + (with-temp-buffer + (insert "()") + (should (null + (forward-sexp -1))))) + +(ert-deftest forwrad-sexp-backward-1-error-mismatch () + "Test mismatched parens with \\[backward-sexp]." + (with-temp-buffer + (insert "(") + (should-error + (forward-sexp -1)))) + +(ert-deftest 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 forward-sexp-backward-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 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 forward-sexp-backward-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 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 forward-sexp-backward-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 forward-sexp-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 forward-sexp-delete-pair-quotes () + "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 forward-sexp-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 forward-sexp-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 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 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 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)) + (python-mode) + (forward-sexp) + (should (eobp)))) + +(ert-deftest 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 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 'forward-sexp-tests) +;;; forward-sexp-tests.el ends here -- 2.3.0 (Apple Git-54)