unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Kangas <stefan@marxist.se>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 28557@debbugs.gnu.org, gazally@runbox.com, monnier@IRO.UMontreal.CA
Subject: bug#28557: 26.0.60; Bugs using (:documentation FORM) in closures
Date: Sun, 03 May 2020 21:22:58 +0200	[thread overview]
Message-ID: <87sggg257x.fsf@stefankangas.se> (raw)
In-Reply-To: <83y2q9oytk.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 03 May 2020 17:52:39 +0300")

[-- Attachment #1: Type: text/plain, Size: 624 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

>> There is a long list of tests here, but it seems like none of this was
>> ever committed to master.  Should it be?
>
> Why not?  Tests are always good and can never break anything in Emacs.

OK.  However, we only got a .el file by Gemini Lasswell, not a patch.

Is there any reason not to commit this in his name like in the
attached patch?

I have made only very minor changes in the attached patch to mark
three tests as ':expected-result :failed' and comment out the two
tests where the byte-compiler fails.  I also wrote a ChangeLog entry.

Thanks.

Best regards,
Stefan Kangas


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-new-cconv-tests-Bug-28557.patch --]
[-- Type: text/x-diff, Size: 8985 bytes --]

From daa65afc86c07ee38c792911a6056eb30d34cd5c Mon Sep 17 00:00:00 2001
From: Gemini Lasswell <gazally@runbox.com>
Date: Sun, 3 May 2020 21:15:14 +0200
Subject: [PATCH] Add new cconv-tests (Bug#28557)

* test/lisp/emacs-lisp/cconv-tests.el
(top-level): Add two commented out tests which the byte-compiler
can't handle.
(cconv-tests-lambda-:documentation)
(cconv-tests-pcase-lambda-:documentation)
(cconv-tests-defun-:documentation)
(cconv-tests-cl-defun-:documentation)
(cconv-tests-cl-iter-defun-:documentation)
(cconv-tests-iter-defun-:documentation)
(cconv-tests-function-:documentation)
(cconv-tests-cl-defgeneric-literal-:documentation)
(cconv-tests-defsubst-:documentation)
(cconv-tests-cl-defsubst-:documentation): New tests.
(cconv-tests-iter-lambda-:documentation)
(cconv-tests-cl-function-:documentation)
(cconv-tests-cl-defgeneric-:documentation): New failing tests.
---
 test/lisp/emacs-lisp/cconv-tests.el | 156 ++++++++++++++++++++++++++++
 1 file changed, 156 insertions(+)

diff --git a/test/lisp/emacs-lisp/cconv-tests.el b/test/lisp/emacs-lisp/cconv-tests.el
index c8d46541ad..390714590f 100644
--- a/test/lisp/emacs-lisp/cconv-tests.el
+++ b/test/lisp/emacs-lisp/cconv-tests.el
@@ -2,6 +2,8 @@
 
 ;; Copyright (C) 2018-2020 Free Software Foundation, Inc.
 
+;; Author: Gemini Lasswell <gazally@runbox.com>
+
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software: you can redistribute it and/or modify
@@ -20,6 +22,160 @@
 ;;; Commentary:
 
 (require 'ert)
+(require 'cl-lib)
+
+(ert-deftest cconv-tests-lambda-:documentation ()
+  "Docstring for lambda can be specified with :documentation."
+  (let ((fun (lambda ()
+               (:documentation (concat "lambda" " documentation"))
+               'lambda-result)))
+    (should (string= (documentation fun) "lambda documentation"))
+    (should (eq (funcall fun) 'lambda-result))))
+
+(ert-deftest cconv-tests-pcase-lambda-:documentation ()
+  "Docstring for pcase-lambda can be specified with :documentation."
+  (let ((fun (pcase-lambda (`(,a ,b))
+               (:documentation (concat "pcase-lambda" " documentation"))
+               (list b a))))
+    (should (string= (documentation fun) "pcase-lambda documentation"))
+    (should (equal '(2 1) (funcall fun '(1 2))))))
+
+(defun cconv-tests-defun ()
+  (:documentation (concat "defun" " documentation"))
+  'defun-result)
+(ert-deftest cconv-tests-defun-:documentation ()
+  "Docstring for defun can be specified with :documentation."
+  (should (string= (documentation 'cconv-tests-defun)
+                   "defun documentation"))
+  (should (eq (cconv-tests-defun) 'defun-result)))
+
+(cl-defun cconv-tests-cl-defun ()
+  (:documentation (concat "cl-defun" " documentation"))
+  'cl-defun-result)
+(ert-deftest cconv-tests-cl-defun-:documentation ()
+  "Docstring for cl-defun can be specified with :documentation."
+  (should (string= (documentation 'cconv-tests-cl-defun)
+                   "cl-defun documentation"))
+  (should (eq (cconv-tests-cl-defun) 'cl-defun-result)))
+
+;; FIXME: The byte-complier croaks on this.  See Bug#28557.
+;; (defmacro cconv-tests-defmacro ()
+;;   (:documentation (concat "defmacro" " documentation"))
+;;   '(quote defmacro-result))
+;; (ert-deftest cconv-tests-defmacro-:documentation ()
+;;   "Docstring for defmacro can be specified with :documentation."
+;;   (should (string= (documentation 'cconv-tests-defmacro)
+;;                    "defmacro documentation"))
+;;   (should (eq (cconv-tests-defmacro) 'defmacro-result)))
+
+;; FIXME: The byte-complier croaks on this.  See Bug#28557.
+;; (cl-defmacro cconv-tests-cl-defmacro ()
+;;   (:documentation (concat "cl-defmacro" " documentation"))
+;;   '(quote cl-defmacro-result))
+;; (ert-deftest cconv-tests-cl-defmacro-:documentation ()
+;;   "Docstring for cl-defmacro can be specified with :documentation."
+;;   (should (string= (documentation 'cconv-tests-cl-defmacro)
+;;                    "cl-defmacro documentation"))
+;;   (should (eq (cconv-tests-cl-defmacro) 'cl-defmacro-result)))
+
+(cl-iter-defun cconv-tests-cl-iter-defun ()
+  (:documentation (concat "cl-iter-defun" " documentation"))
+  (iter-yield 'cl-iter-defun-result))
+(ert-deftest cconv-tests-cl-iter-defun-:documentation ()
+  "Docstring for cl-iter-defun can be specified with :documentation."
+  (should (string= (documentation 'cconv-tests-cl-iter-defun)
+                   "cl-iter-defun documentation"))
+  (should (eq (iter-next (cconv-tests-cl-iter-defun))
+              'cl-iter-defun-result)))
+
+(iter-defun cconv-tests-iter-defun ()
+  (:documentation (concat "iter-defun" " documentation"))
+  (iter-yield 'iter-defun-result))
+(ert-deftest cconv-tests-iter-defun-:documentation ()
+  "Docstring for iter-defun can be specified with :documentation."
+  (should (string= (documentation 'cconv-tests-iter-defun)
+                   "iter-defun documentation"))
+  (should (eq (iter-next (cconv-tests-iter-defun)) 'iter-defun-result)))
+
+(ert-deftest cconv-tests-iter-lambda-:documentation ()
+  "Docstring for iter-lambda can be specified with :documentation."
+  ;; FIXME: See Bug#28557.
+  :expected-result :failed
+  (let ((iter-fun
+         (iter-lambda ()
+           (:documentation (concat "iter-lambda" " documentation"))
+           (iter-yield 'iter-lambda-result))))
+    (should (string= (documentation iter-fun) "iter-lambda documentation"))
+    (should (eq (iter-next (funcall iter-fun)) 'iter-lambda-result))))
+
+(ert-deftest cconv-tests-cl-function-:documentation ()
+  "Docstring for cl-function can be specified with :documentation."
+  ;; FIXME: See Bug#28557.
+  :expected-result :failed
+  (let ((fun (cl-function (lambda (&key arg)
+                            (:documentation (concat "cl-function"
+                                                    " documentation"))
+                            (list arg 'cl-function-result)))))
+    (should (string= (documentation fun) "cl-function documentation"))
+    (should (equal (funcall fun :arg t) '(t cl-function-result)))))
+
+(ert-deftest cconv-tests-function-:documentation ()
+  "Docstring for lambda inside function can be specified with :documentation."
+  (let ((fun #'(lambda (arg)
+                 (:documentation (concat "function" " documentation"))
+                 (list arg 'function-result))))
+    (should (string= (documentation fun) "function documentation"))
+    (should (equal (funcall fun t) '(t function-result)))))
+
+(fmakunbound 'cconv-tests-cl-defgeneric)
+(setplist 'cconv-tests-cl-defgeneric nil)
+(cl-defgeneric cconv-tests-cl-defgeneric (n)
+  (:documentation (concat "cl-defgeneric" " documentation")))
+(cl-defmethod cconv-tests-cl-defgeneric ((n integer))
+  (:documentation (concat "cl-defmethod" " documentation"))
+  (+ 1 n))
+(ert-deftest cconv-tests-cl-defgeneric-:documentation ()
+  "Docstring for cl-defgeneric can be specified with :documentation."
+  ;; FIXME: See Bug#28557.
+  :expected-result :failed
+  (let ((descr (describe-function 'cconv-tests-cl-defgeneric)))
+    (set-text-properties 0 (length descr) nil descr)
+    (should (string-match-p "cl-defgeneric documentation" descr))
+    (should (string-match-p "cl-defmethod documentation" descr)))
+  (should (= 11 (cconv-tests-cl-defgeneric 10))))
+
+(fmakunbound 'cconv-tests-cl-defgeneric-literal)
+(setplist 'cconv-tests-cl-defgeneric-literal nil)
+(cl-defgeneric cconv-tests-cl-defgeneric-literal (n)
+  (:documentation "cl-defgeneric-literal documentation"))
+(cl-defmethod cconv-tests-cl-defgeneric-literal ((n integer))
+  (:documentation "cl-defmethod-literal documentation")
+  (+ 1 n))
+(ert-deftest cconv-tests-cl-defgeneric-literal-:documentation ()
+  "Docstring for cl-defgeneric can be specified with :documentation."
+  (let ((descr (describe-function 'cconv-tests-cl-defgeneric-literal)))
+    (set-text-properties 0 (length descr) nil descr)
+    (should (string-match-p "cl-defgeneric-literal documentation" descr))
+    (should (string-match-p "cl-defmethod-literal documentation" descr)))
+  (should (= 11 (cconv-tests-cl-defgeneric-literal 10))))
+
+(defsubst cconv-tests-defsubst ()
+  (:documentation (concat "defsubst" " documentation"))
+  'defsubst-result)
+(ert-deftest cconv-tests-defsubst-:documentation ()
+  "Docstring for defsubst can be specified with :documentation."
+  (should (string= (documentation 'cconv-tests-defsubst)
+                   "defsubst documentation"))
+  (should (eq (cconv-tests-defsubst) 'defsubst-result)))
+
+(cl-defsubst cconv-tests-cl-defsubst ()
+  (:documentation (concat "cl-defsubst" " documentation"))
+  'cl-defsubst-result)
+(ert-deftest cconv-tests-cl-defsubst-:documentation ()
+  "Docstring for cl-defsubst can be specified with :documentation."
+  (should (string= (documentation 'cconv-tests-cl-defsubst)
+                   "cl-defsubst documentation"))
+  (should (eq (cconv-tests-cl-defsubst) 'cl-defsubst-result)))
 
 (ert-deftest cconv-convert-lambda-lifted ()
   "Bug#30872."
-- 
2.26.2


  reply	other threads:[~2020-05-03 19:22 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-22 17:30 bug#28557: 26.0.60; Bugs using (:documentation FORM) in closures Gemini Lasswell
2020-05-03  1:32 ` Stefan Kangas
2020-05-03 14:52   ` Eli Zaretskii
2020-05-03 19:22     ` Stefan Kangas [this message]
2020-05-04 13:47       ` Eli Zaretskii
2020-08-04 17:06         ` Stefan Kangas
2020-08-13  1:07           ` Gemini Lasswell
2021-12-21  3:05 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87sggg257x.fsf@stefankangas.se \
    --to=stefan@marxist.se \
    --cc=28557@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    --cc=gazally@runbox.com \
    --cc=monnier@IRO.UMontreal.CA \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).