From: Stefan Monnier Date: Thu, 12 Sep 2013 20:15:53 +0000 (-0400) Subject: * lisp/eshell/*.el: Use lexical-binding. X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1659 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ae5e4c483a4700fed927f546eebf06d1b1e92057;p=emacs.git * lisp/eshell/*.el: Use lexical-binding. * test/automated/eshell.el: Move from test/eshell.el. (eshell-test/for-loop, eshell-test/for-name-loop): New tests. Fixes: debbugs:15231 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5cae5873f92..b8fc9b32f98 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,7 +1,10 @@ +2013-09-12 Stefan Monnier + + * eshell/*.el: Use lexical-binding (bug#15231). + 2013-09-12 Kenichi Handa - * composite.el (compose-gstring-for-graphic): Handle enclosing - mark. + * composite.el (compose-gstring-for-graphic): Handle enclosing mark. 2013-09-12 Glenn Morris diff --git a/lisp/eshell/em-alias.el b/lisp/eshell/em-alias.el index 9a9cc4cd567..210d71be9c6 100644 --- a/lisp/eshell/em-alias.el +++ b/lisp/eshell/em-alias.el @@ -1,4 +1,4 @@ -;;; em-alias.el --- creation and management of command aliases +;;; em-alias.el --- creation and management of command aliases -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-banner.el b/lisp/eshell/em-banner.el index 8c3eebf3510..3e1970d97da 100644 --- a/lisp/eshell/em-banner.el +++ b/lisp/eshell/em-banner.el @@ -1,4 +1,4 @@ -;;; em-banner.el --- sample module that displays a login banner +;;; em-banner.el --- sample module that displays a login banner -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-basic.el b/lisp/eshell/em-basic.el index c440bd0a928..fb2eb85c8e9 100644 --- a/lisp/eshell/em-basic.el +++ b/lisp/eshell/em-basic.el @@ -1,4 +1,4 @@ -;;; em-basic.el --- basic shell builtin commands +;;; em-basic.el --- basic shell builtin commands -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-cmpl.el b/lisp/eshell/em-cmpl.el index 7120f639a70..fe7a79cf952 100644 --- a/lisp/eshell/em-cmpl.el +++ b/lisp/eshell/em-cmpl.el @@ -1,4 +1,4 @@ -;;; em-cmpl.el --- completion using the TAB key +;;; em-cmpl.el --- completion using the TAB key -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. @@ -297,19 +297,16 @@ to writing a completion function." (define-key eshell-mode-map [(meta tab)] 'eshell-complete-lisp-symbol) (define-key eshell-mode-map [(meta control ?i)] 'eshell-complete-lisp-symbol) (define-key eshell-command-map [(meta ?h)] 'eshell-completion-help) - (define-key eshell-command-map [tab] 'pcomplete-expand-and-complete) (define-key eshell-command-map [(control ?i)] 'pcomplete-expand-and-complete) (define-key eshell-command-map [space] 'pcomplete-expand) (define-key eshell-command-map [? ] 'pcomplete-expand) - (define-key eshell-mode-map [tab] 'eshell-pcomplete) - (define-key eshell-mode-map [(control ?i)] 'eshell-pcomplete) + (define-key eshell-mode-map [(control ?i)] 'pcomplete) (add-hook 'completion-at-point-functions #'pcomplete-completions-at-point nil t) ;; jww (1999-10-19): Will this work on anything but X? - (if (featurep 'xemacs) - (define-key eshell-mode-map [iso-left-tab] 'pcomplete-reverse) - (define-key eshell-mode-map [backtab] 'pcomplete-reverse)) + (define-key eshell-mode-map (if (featurep 'xemacs) [iso-left-tab] [backtab]) + 'pcomplete-reverse) (define-key eshell-mode-map [(meta ??)] 'pcomplete-list)) (defun eshell-completion-command-name () @@ -458,16 +455,7 @@ to writing a completion function." (all-completions filename obarray 'functionp)) completions))))))) -(defun eshell-pcomplete (&optional interactively) - "Eshell wrapper for `pcomplete'." - (interactive "p") - ;; Pretend to be pcomplete so that cycling works (bug#13293). - (setq this-command 'pcomplete) - (condition-case nil - (if interactively - (call-interactively 'pcomplete) - (pcomplete)) - (text-read-only (completion-at-point)))) ; Workaround for bug#12838. +(define-obsolete-function-alias 'eshell-pcomplete 'completion-at-point) (provide 'em-cmpl) diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el index e8fbe0518ac..2cfd14b5f60 100644 --- a/lisp/eshell/em-dirs.el +++ b/lisp/eshell/em-dirs.el @@ -1,4 +1,4 @@ -;;; em-dirs.el --- directory navigation commands +;;; em-dirs.el --- directory navigation commands -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-glob.el b/lisp/eshell/em-glob.el index b5ca8119470..596547c3f5e 100644 --- a/lisp/eshell/em-glob.el +++ b/lisp/eshell/em-glob.el @@ -1,4 +1,4 @@ -;;; em-glob.el --- extended file name globbing +;;; em-glob.el --- extended file name globbing -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-hist.el b/lisp/eshell/em-hist.el index 694fe71a95c..8e56de251a1 100644 --- a/lisp/eshell/em-hist.el +++ b/lisp/eshell/em-hist.el @@ -1,4 +1,4 @@ -;;; em-hist.el --- history list management +;;; em-hist.el --- history list management -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-ls.el b/lisp/eshell/em-ls.el index 3dee1adb58a..0e10d984f88 100644 --- a/lisp/eshell/em-ls.el +++ b/lisp/eshell/em-ls.el @@ -1,4 +1,4 @@ -;;; em-ls.el --- implementation of ls in Lisp +;;; em-ls.el --- implementation of ls in Lisp -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-pred.el b/lisp/eshell/em-pred.el index 14d3020530f..f7d7605107f 100644 --- a/lisp/eshell/em-pred.el +++ b/lisp/eshell/em-pred.el @@ -1,4 +1,4 @@ -;;; em-pred.el --- argument predicates and modifiers (ala zsh) +;;; em-pred.el --- argument predicates and modifiers (ala zsh) -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-prompt.el b/lisp/eshell/em-prompt.el index 18731121c4e..9b9c1095277 100644 --- a/lisp/eshell/em-prompt.el +++ b/lisp/eshell/em-prompt.el @@ -1,4 +1,4 @@ -;;; em-prompt.el --- command prompts +;;; em-prompt.el --- command prompts -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-rebind.el b/lisp/eshell/em-rebind.el index a526d590307..378a57b0687 100644 --- a/lisp/eshell/em-rebind.el +++ b/lisp/eshell/em-rebind.el @@ -1,4 +1,4 @@ -;;; em-rebind.el --- rebind keys when point is at current input +;;; em-rebind.el --- rebind keys when point is at current input -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-script.el b/lisp/eshell/em-script.el index b073928738f..1a19698faa8 100644 --- a/lisp/eshell/em-script.el +++ b/lisp/eshell/em-script.el @@ -1,4 +1,4 @@ -;;; em-script.el --- Eshell script files +;;; em-script.el --- Eshell script files -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-smart.el b/lisp/eshell/em-smart.el index aa9038aafb9..e6fa463aec3 100644 --- a/lisp/eshell/em-smart.el +++ b/lisp/eshell/em-smart.el @@ -1,4 +1,4 @@ -;;; em-smart.el --- smart display of output +;;; em-smart.el --- smart display of output -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-term.el b/lisp/eshell/em-term.el index 2932f443e4f..71329f083ee 100644 --- a/lisp/eshell/em-term.el +++ b/lisp/eshell/em-term.el @@ -1,4 +1,4 @@ -;;; em-term.el --- running visual commands +;;; em-term.el --- running visual commands -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-tramp.el b/lisp/eshell/em-tramp.el index fb816b76a7d..bb2f440313c 100644 --- a/lisp/eshell/em-tramp.el +++ b/lisp/eshell/em-tramp.el @@ -1,4 +1,4 @@ -;;; em-tramp.el --- Eshell features that require TRAMP +;;; em-tramp.el --- Eshell features that require TRAMP -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index b9b1c1635a5..52d2b4d2a2d 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -1,4 +1,4 @@ -;;; em-unix.el --- UNIX command aliases +;;; em-unix.el --- UNIX command aliases -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/em-xtra.el b/lisp/eshell/em-xtra.el index c4cab522cf2..c9d9d5bfe2f 100644 --- a/lisp/eshell/em-xtra.el +++ b/lisp/eshell/em-xtra.el @@ -1,4 +1,4 @@ -;;; em-xtra.el --- extra alias functions +;;; em-xtra.el --- extra alias functions -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-arg.el b/lisp/eshell/esh-arg.el index e3a12d5ece5..f791ad66520 100644 --- a/lisp/eshell/esh-arg.el +++ b/lisp/eshell/esh-arg.el @@ -1,4 +1,4 @@ -;;; esh-arg.el --- argument processing +;;; esh-arg.el --- argument processing -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index c2922983ae2..cc4fdd15bda 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -1,4 +1,4 @@ -;;; esh-cmd.el --- command invocation +;;; esh-cmd.el --- command invocation -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-ext.el b/lisp/eshell/esh-ext.el index 474e536de2e..8b312a2c25c 100644 --- a/lisp/eshell/esh-ext.el +++ b/lisp/eshell/esh-ext.el @@ -1,4 +1,4 @@ -;;; esh-ext.el --- commands external to Eshell +;;; esh-ext.el --- commands external to Eshell -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el index 4edb47e4758..f620890ee6b 100644 --- a/lisp/eshell/esh-io.el +++ b/lisp/eshell/esh-io.el @@ -1,4 +1,4 @@ -;;; esh-io.el --- I/O management +;;; esh-io.el --- I/O management -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el index 54a36428d58..1a80e3894e1 100644 --- a/lisp/eshell/esh-mode.el +++ b/lisp/eshell/esh-mode.el @@ -1,4 +1,4 @@ -;;; esh-mode.el --- user interface +;;; esh-mode.el --- user interface -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-module.el b/lisp/eshell/esh-module.el index 5008ef705db..181d08f8a1d 100644 --- a/lisp/eshell/esh-module.el +++ b/lisp/eshell/esh-module.el @@ -1,4 +1,4 @@ -;;; esh-module.el --- Eshell modules +;;; esh-module.el --- Eshell modules -*- lexical-binding:t -*- ;; Copyright (C) 1999-2000, 2002-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-opt.el b/lisp/eshell/esh-opt.el index c62cbc7e1dc..e9252cb540e 100644 --- a/lisp/eshell/esh-opt.el +++ b/lisp/eshell/esh-opt.el @@ -1,4 +1,4 @@ -;;; esh-opt.el --- command options processing +;;; esh-opt.el --- command options processing -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el index 171d70c0772..e77287c2f78 100644 --- a/lisp/eshell/esh-proc.el +++ b/lisp/eshell/esh-proc.el @@ -1,4 +1,4 @@ -;;; esh-proc.el --- process management +;;; esh-proc.el --- process management -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-util.el b/lisp/eshell/esh-util.el index 968d1ebad79..cac46ea8d18 100644 --- a/lisp/eshell/esh-util.el +++ b/lisp/eshell/esh-util.el @@ -1,4 +1,4 @@ -;;; esh-util.el --- general utilities +;;; esh-util.el --- general utilities -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el index 75c36a68544..f68b65dfd46 100644 --- a/lisp/eshell/esh-var.el +++ b/lisp/eshell/esh-var.el @@ -1,4 +1,4 @@ -;;; esh-var.el --- handling of variables +;;; esh-var.el --- handling of variables -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/lisp/eshell/eshell.el b/lisp/eshell/eshell.el index e3f8f0d11bc..47078d142d5 100644 --- a/lisp/eshell/eshell.el +++ b/lisp/eshell/eshell.el @@ -1,4 +1,4 @@ -;;; eshell.el --- the Emacs command shell +;;; eshell.el --- the Emacs command shell -*- lexical-binding:t -*- ;; Copyright (C) 1999-2013 Free Software Foundation, Inc. diff --git a/test/ChangeLog b/test/ChangeLog index 7b39097d3b5..3e42e18b2b4 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2013-09-12 Stefan Monnier + + * automated/eshell.el: Rename from eshell.el. + (eshell-test/for-loop, eshell-test/for-name-loop): New tests (bug#15231). + 2013-09-01 Glenn Morris * automated/Makefile.in (setwins): Avoid leading space in $wins. @@ -164,25 +169,25 @@ 2013-07-05 Michael Albinus * automated/file-notify-tests.el - (file-notify-test-remote-temporary-file-directory): Use - `null-device' on w32. + (file-notify-test-remote-temporary-file-directory): + Use `null-device' on w32. (file-notify--test-tmpfile, file-notify--test-tmpfile1) (file-notify--test-results, file-notify--test-event) (file-notify--deftest-remote, file-notify--event-test) (file-notify--test-event-handler) - (file-notify--test-make-temp-name): Renamed, in order to mark them + (file-notify--test-make-temp-name): Rename, in order to mark them internal. (tramp-message-show-message, tramp-read-passwd): Tweak them for better fitting in noninteractive tests. - (file-notify-test00-availability): Renamed from `file-notify-test0'. - (file-notify-test01-add-watch): Renamed from `file-notify-test1'. + (file-notify-test00-availability): Rename from `file-notify-test0'. + (file-notify-test01-add-watch): Rename from `file-notify-test1'. Use `temporary-file-directory '. (file-notify-test01-add-watch-remote): New test. - (file-notify-test02-events): Renamed from `file-notify-test2'. - (file-notify-test02-events-remote): Renamed from `file-notify-test3'. - (file-notify-test03-autorevert): Renamed from + (file-notify-test02-events): Rename from `file-notify-test2'. + (file-notify-test02-events-remote): Rename from `file-notify-test3'. + (file-notify-test03-autorevert): Rename from `file-notify-test4'. Use timeouts. - (file-notify-test03-autorevert-remote): Renamed from + (file-notify-test03-autorevert-remote): Rename from `file-notify-test5'. 2013-07-04 Michael Albinus @@ -192,7 +197,7 @@ 2013-06-28 Kenichi Handa * automated/decoder-tests.el (decoder-tests-gen-file): New arg FILE. - (decoder-tests-ao-gen-file): Renamed from decoder-tests-filename. + (decoder-tests-ao-gen-file): Rename from decoder-tests-filename. Callers changed. (decoder-tests-filename): New function. (decoder-tests-prefer-utf-8-read) diff --git a/test/automated/eshell.el b/test/automated/eshell.el new file mode 100644 index 00000000000..a7df2945424 --- /dev/null +++ b/test/automated/eshell.el @@ -0,0 +1,200 @@ +;;; tests/eshell.el --- Eshell test suite + +;; Copyright (C) 1999-2013 Free Software Foundation, Inc. + +;; Author: John Wiegley + +;; 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: + +;; Eshell test suite. + +;;; Code: + +(require 'ert) +(require 'eshell) + +(defmacro with-temp-eshell (&rest body) + "Evaluate BODY in a temporary Eshell buffer." + `(let ((eshell-buffer (eshell t))) + (unwind-protect + (with-current-buffer eshell-buffer + ,@body) + (kill-buffer eshell-buffer)))) + +(defun eshell-insert-command (text &optional func) + "Insert a command at the end of the buffer." + (goto-char eshell-last-output-end) + (insert-and-inherit text) + (funcall (or func 'eshell-send-input))) + +(defun eshell-match-result (regexp) + "Insert a command at the end of the buffer." + (goto-char eshell-last-input-end) + (looking-at regexp)) + +(defun eshell-command-result-p (text regexp &optional func) + "Insert a command at the end of the buffer." + (eshell-insert-command text func) + (eshell-match-result regexp)) + +;;; Tests: + +(ert-deftest eshell-test/simple-command-result () + "Test `eshell-command-result' with a simple command." + (should (equal (eshell-command-result "+ 1 2") 3))) + +(ert-deftest eshell-test/lisp-command () + "Test `eshell-command-result' with an elisp command." + (should (equal (eshell-command-result "(+ 1 2)") 3))) + +(ert-deftest eshell-test/for-loop () + "Test `eshell-command-result' with an elisp command." + (should (equal (eshell-command-result "for foo in 5 { echo $foo }") 5))) + +(ert-deftest eshell-test/for-name-loop () ;Bug#15231 + "Test `eshell-command-result' with an elisp command." + (should (equal (eshell-command-result "for name in 3 { echo $name }") 3))) + +(ert-deftest eshell-test/lisp-command-args () + "Test `eshell-command-result' with elisp and trailing args. +Test that trailing arguments outside the S-expression are +ignored. e.g. \"(+ 1 2) 3\" => 3" + (should (equal (eshell-command-result "(+ 1 2) 3") 3))) + +(ert-deftest eshell-test/subcommand () + "Test `eshell-command-result' with a simple subcommand." + (should (equal (eshell-command-result "{+ 1 2}") 3))) + +(ert-deftest eshell-test/subcommand-args () + "Test `eshell-command-result' with a subcommand and trailing args. +Test that trailing arguments outside the subcommand are ignored. +e.g. \"{+ 1 2} 3\" => 3" + (should (equal (eshell-command-result "{+ 1 2} 3") 3))) + +(ert-deftest eshell-test/subcommand-lisp () + "Test `eshell-command-result' with an elisp subcommand and trailing args. +Test that trailing arguments outside the subcommand are ignored. +e.g. \"{(+ 1 2)} 3\" => 3" + (should (equal (eshell-command-result "{(+ 1 2)} 3") 3))) + +(ert-deftest eshell-test/interp-cmd () + "Interpolate command result" + (should (equal (eshell-command-result "+ ${+ 1 2} 3") 6))) + +(ert-deftest eshell-test/interp-lisp () + "Interpolate Lisp form evaluation" + (should (equal (eshell-command-result "+ $(+ 1 2) 3") 6))) + +(ert-deftest eshell-test/interp-concat () + "Interpolate and concat command" + (should (equal (eshell-command-result "+ ${+ 1 2}3 3") 36))) + +(ert-deftest eshell-test/interp-concat-lisp () + "Interpolate and concat Lisp form" + (should (equal (eshell-command-result "+ $(+ 1 2)3 3") 36))) + +(ert-deftest eshell-test/interp-concat2 () + "Interpolate and concat two commands" + (should (equal (eshell-command-result "+ ${+ 1 2}${+ 1 2} 3") 36))) + +(ert-deftest eshell-test/interp-concat-lisp2 () + "Interpolate and concat two Lisp forms" + (should (equal (eshell-command-result "+ $(+ 1 2)$(+ 1 2) 3") 36))) + +(ert-deftest eshell-test/window-height () + "$LINES should equal (window-height)" + (should (eshell-command-result "= $LINES (window-height)"))) + +(ert-deftest eshell-test/window-width () + "$COLUMNS should equal (window-width)" + (should (eshell-command-result "= $COLUMNS (window-width)"))) + +(ert-deftest eshell-test/last-result-var () + "Test using the \"last result\" ($$) variable" + (with-temp-eshell + (should + (eshell-command-result-p "+ 1 2; + $$ 2" + "3\n5\n")))) + +(ert-deftest eshell-test/last-result-var2 () + "Test using the \"last result\" ($$) variable twice" + (with-temp-eshell + (should + (eshell-command-result-p "+ 1 2; + $$ $$" + "3\n6\n")))) + +(ert-deftest eshell-test/last-arg-var () + "Test using the \"last arg\" ($_) variable" + (with-temp-eshell + (should + (eshell-command-result-p "+ 1 2; + $_ 4" + "3\n6\n")))) + +(ert-deftest eshell-test/command-running-p () + "Modeline should show no command running" + (with-temp-eshell + (let ((eshell-status-in-mode-line t)) + (should (memq 'eshell-command-running-string mode-line-format)) + (should (equal eshell-command-running-string "--"))))) + +(ert-deftest eshell-test/forward-arg () + "Test moving across command arguments" + (with-temp-eshell + (eshell-insert-command "echo $(+ 1 (- 4 3)) \"alpha beta\" file" 'ignore) + (let ((here (point)) begin valid) + (eshell-bol) + (setq begin (point)) + (eshell-forward-argument 4) + (setq valid (= here (point))) + (eshell-backward-argument 4) + (prog1 + (and valid (= begin (point))) + (eshell-bol) + (delete-region (point) (point-max)))))) + +(ert-deftest eshell-test/queue-input () + "Test queuing command input" + (with-temp-eshell + (eshell-insert-command "sleep 2") + (eshell-insert-command "echo alpha" 'eshell-queue-input) + (let ((count 10)) + (while (and eshell-current-command + (> count 0)) + (sit-for 1) + (setq count (1- count)))) + (should (eshell-match-result "alpha\n")))) + +(ert-deftest eshell-test/flush-output () + "Test flushing of previous output" + (with-temp-eshell + (eshell-insert-command "echo alpha") + (eshell-kill-output) + (should (eshell-match-result (regexp-quote "*** output flushed ***\n"))) + (should (forward-line)) + (should (= (point) eshell-last-output-start)))) + +(ert-deftest eshell-test/run-old-command () + "Re-run an old command" + (with-temp-eshell + (eshell-insert-command "echo alpha") + (goto-char eshell-last-input-start) + (string= (eshell-get-old-input) "echo alpha"))) + +(provide 'esh-test) + +;;; tests/eshell.el ends here diff --git a/test/eshell.el b/test/eshell.el deleted file mode 100644 index 126a47220c4..00000000000 --- a/test/eshell.el +++ /dev/null @@ -1,192 +0,0 @@ -;;; tests/eshell.el --- Eshell test suite - -;; Copyright (C) 1999-2013 Free Software Foundation, Inc. - -;; Author: John Wiegley - -;; 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: - -;; Eshell test suite. - -;;; Code: - -(require 'ert) -(require 'eshell) - -(defmacro with-temp-eshell (&rest body) - "Evaluate BODY in a temporary Eshell buffer." - `(let ((eshell-buffer (eshell t))) - (unwind-protect - (with-current-buffer eshell-buffer - ,@body) - (kill-buffer eshell-buffer)))) - -(defun eshell-insert-command (text &optional func) - "Insert a command at the end of the buffer." - (goto-char eshell-last-output-end) - (insert-and-inherit text) - (funcall (or func 'eshell-send-input))) - -(defun eshell-match-result (regexp) - "Insert a command at the end of the buffer." - (goto-char eshell-last-input-end) - (looking-at regexp)) - -(defun eshell-command-result-p (text regexp &optional func) - "Insert a command at the end of the buffer." - (eshell-insert-command text func) - (eshell-match-result regexp)) - -;;; Tests: - -(ert-deftest eshell-test/simple-command-result () - "Test `eshell-command-result' with a simple command." - (should (equal (eshell-command-result "+ 1 2") 3))) - -(ert-deftest eshell-test/lisp-command () - "Test `eshell-command-result' with an elisp command." - (should (equal (eshell-command-result "(+ 1 2)") 3))) - -(ert-deftest eshell-test/lisp-command-args () - "Test `eshell-command-result' with elisp and trailing args. -Test that trailing arguments outside the S-expression are -ignored. e.g. \"(+ 1 2) 3\" => 3" - (should (equal (eshell-command-result "(+ 1 2) 3") 3))) - -(ert-deftest eshell-test/subcommand () - "Test `eshell-command-result' with a simple subcommand." - (should (equal (eshell-command-result "{+ 1 2}") 3))) - -(ert-deftest eshell-test/subcommand-args () - "Test `eshell-command-result' with a subcommand and trailing args. -Test that trailing arguments outside the subcommand are ignored. -e.g. \"{+ 1 2} 3\" => 3" - (should (equal (eshell-command-result "{+ 1 2} 3") 3))) - -(ert-deftest eshell-test/subcommand-lisp () - "Test `eshell-command-result' with an elisp subcommand and trailing args. -Test that trailing arguments outside the subcommand are ignored. -e.g. \"{(+ 1 2)} 3\" => 3" - (should (equal (eshell-command-result "{(+ 1 2)} 3") 3))) - -(ert-deftest eshell-test/interp-cmd () - "Interpolate command result" - (should (equal (eshell-command-result "+ ${+ 1 2} 3") 6))) - -(ert-deftest eshell-test/interp-lisp () - "Interpolate Lisp form evaluation" - (should (equal (eshell-command-result "+ $(+ 1 2) 3") 6))) - -(ert-deftest eshell-test/interp-concat () - "Interpolate and concat command" - (should (equal (eshell-command-result "+ ${+ 1 2}3 3") 36))) - -(ert-deftest eshell-test/interp-concat-lisp () - "Interpolate and concat Lisp form" - (should (equal (eshell-command-result "+ $(+ 1 2)3 3") 36))) - -(ert-deftest eshell-test/interp-concat2 () - "Interpolate and concat two commands" - (should (equal (eshell-command-result "+ ${+ 1 2}${+ 1 2} 3") 36))) - -(ert-deftest eshell-test/interp-concat-lisp2 () - "Interpolate and concat two Lisp forms" - (should (equal (eshell-command-result "+ $(+ 1 2)$(+ 1 2) 3") 36))) - -(ert-deftest eshell-test/window-height () - "$LINES should equal (window-height)" - (should (eshell-command-result "= $LINES (window-height)"))) - -(ert-deftest eshell-test/window-width () - "$COLUMNS should equal (window-width)" - (should (eshell-command-result "= $COLUMNS (window-width)"))) - -(ert-deftest eshell-test/last-result-var () - "Test using the \"last result\" ($$) variable" - (with-temp-eshell - (should - (eshell-command-result-p "+ 1 2; + $$ 2" - "3\n5\n")))) - -(ert-deftest eshell-test/last-result-var2 () - "Test using the \"last result\" ($$) variable twice" - (with-temp-eshell - (should - (eshell-command-result-p "+ 1 2; + $$ $$" - "3\n6\n")))) - -(ert-deftest eshell-test/last-arg-var () - "Test using the \"last arg\" ($_) variable" - (with-temp-eshell - (should - (eshell-command-result-p "+ 1 2; + $_ 4" - "3\n6\n")))) - -(ert-deftest eshell-test/command-running-p () - "Modeline should show no command running" - (with-temp-eshell - (let ((eshell-status-in-mode-line t)) - (should (memq 'eshell-command-running-string mode-line-format)) - (should (equal eshell-command-running-string "--"))))) - -(ert-deftest eshell-test/forward-arg () - "Test moving across command arguments" - (with-temp-eshell - (eshell-insert-command "echo $(+ 1 (- 4 3)) \"alpha beta\" file" 'ignore) - (let ((here (point)) begin valid) - (eshell-bol) - (setq begin (point)) - (eshell-forward-argument 4) - (setq valid (= here (point))) - (eshell-backward-argument 4) - (prog1 - (and valid (= begin (point))) - (eshell-bol) - (delete-region (point) (point-max)))))) - -(ert-deftest eshell-test/queue-input () - "Test queuing command input" - (with-temp-eshell - (eshell-insert-command "sleep 2") - (eshell-insert-command "echo alpha" 'eshell-queue-input) - (let ((count 10)) - (while (and eshell-current-command - (> count 0)) - (sit-for 1) - (setq count (1- count)))) - (should (eshell-match-result "alpha\n")))) - -(ert-deftest eshell-test/flush-output () - "Test flushing of previous output" - (with-temp-eshell - (eshell-insert-command "echo alpha") - (eshell-kill-output) - (should (eshell-match-result (regexp-quote "*** output flushed ***\n"))) - (should (forward-line)) - (should (= (point) eshell-last-output-start)))) - -(ert-deftest eshell-test/run-old-command () - "Re-run an old command" - (with-temp-eshell - (eshell-insert-command "echo alpha") - (goto-char eshell-last-input-start) - (string= (eshell-get-old-input) "echo alpha"))) - -(provide 'esh-test) - -;;; tests/eshell.el ends here