From d2a9dae40057ff16683d9c5f30a3b04500ebc4cf Mon Sep 17 00:00:00 2001 From: Jim Porter Date: Sun, 18 Sep 2022 17:42:09 -0700 Subject: [PATCH] Only strip newlines when stringifying a value for Eshell * lisp/eshell/esh-util.el (eshell-stringify): Use 'string-trim-right' instead of stripping the last character of the result of 'pp-to-string' (bug#58810). * test/lisp/eshell/esh-util-tests.el: New file. --- lisp/eshell/esh-util.el | 11 +++--- test/lisp/eshell/esh-util-tests.el | 57 ++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 test/lisp/eshell/esh-util-tests.el diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el index f47373c115f..ecb6888651f 100644 --- a/lisp/eshell/esh-util.el +++ b/lisp/eshell/esh-util.el @@ -350,16 +350,13 @@ Prepend remote identification of `default-directory', if any." "Convert OBJECT into a string value." (cond ((stringp object) object) - ((and (listp object) - (not (eq object nil))) - (let ((string (pp-to-string object))) - (substring string 0 (1- (length string))))) ((numberp object) (number-to-string object)) + ((and (eq object t) + (not eshell-stringify-t)) + nil) (t - (unless (and (eq object t) - (not eshell-stringify-t)) - (pp-to-string object))))) + (string-trim-right (pp-to-string object))))) (defsubst eshell-stringify-list (args) "Convert each element of ARGS into a string value." diff --git a/test/lisp/eshell/esh-util-tests.el b/test/lisp/eshell/esh-util-tests.el new file mode 100644 index 00000000000..1cbd015999f --- /dev/null +++ b/test/lisp/eshell/esh-util-tests.el @@ -0,0 +1,57 @@ +;;; esh-util-tests.el --- esh-util test suite -*- lexical-binding:t -*- + +;; Copyright (C) 2022 Free Software Foundation, Inc. + +;; 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 . + +;;; Code: + +(require 'ert) +(require 'esh-util) + +;;; Tests: + +(ert-deftest esh-util-test/eshell-stringify/string () + "Test that `eshell-stringify' preserves the value of strings." + (should (equal (eshell-stringify "hello") "hello"))) + +(ert-deftest esh-util-test/eshell-stringify/number () + "Test that `eshell-stringify' converts numbers to strings." + (should (equal (eshell-stringify 42) "42")) + (should (equal (eshell-stringify 4.2) "4.2"))) + +(ert-deftest esh-util-test/eshell-stringify/t () + "Test that `eshell-stringify' treats `t' according to `eshell-stringify-t'." + (let ((eshell-stringify-t t)) + (should (equal (eshell-stringify t) "t"))) + (let ((eshell-stringify-t nil)) + (should (equal (eshell-stringify t) nil)))) + +(ert-deftest esh-util-test/eshell-stringify/nil () + "Test that `eshell-stringify' converts nil to a string." + (should (equal (eshell-stringify nil) "nil"))) + +(ert-deftest esh-util-test/eshell-stringify/list () + "Test that `eshell-stringify' correctly stringifies lists." + (should (equal (eshell-stringify '(1 2 3)) "(1 2 3)")) + (should (equal (eshell-stringify '((1 2) (3 . 4))) + "((1 2)\n (3 . 4))"))) + +(ert-deftest esh-util-test/eshell-stringify/complex () + "Test that `eshell-stringify' correctly stringifies complex objects." + (should (equal (eshell-stringify (list 'quote 'hello)) "'hello"))) + +;;; esh-util-tests.el ends here -- 2.39.2