]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/eshell/*.el: Use lexical-binding.
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 12 Sep 2013 20:15:53 +0000 (16:15 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 12 Sep 2013 20:15:53 +0000 (16:15 -0400)
* test/automated/eshell.el: Move from test/eshell.el.
(eshell-test/for-loop, eshell-test/for-name-loop): New tests.

Fixes: debbugs:15231
32 files changed:
lisp/ChangeLog
lisp/eshell/em-alias.el
lisp/eshell/em-banner.el
lisp/eshell/em-basic.el
lisp/eshell/em-cmpl.el
lisp/eshell/em-dirs.el
lisp/eshell/em-glob.el
lisp/eshell/em-hist.el
lisp/eshell/em-ls.el
lisp/eshell/em-pred.el
lisp/eshell/em-prompt.el
lisp/eshell/em-rebind.el
lisp/eshell/em-script.el
lisp/eshell/em-smart.el
lisp/eshell/em-term.el
lisp/eshell/em-tramp.el
lisp/eshell/em-unix.el
lisp/eshell/em-xtra.el
lisp/eshell/esh-arg.el
lisp/eshell/esh-cmd.el
lisp/eshell/esh-ext.el
lisp/eshell/esh-io.el
lisp/eshell/esh-mode.el
lisp/eshell/esh-module.el
lisp/eshell/esh-opt.el
lisp/eshell/esh-proc.el
lisp/eshell/esh-util.el
lisp/eshell/esh-var.el
lisp/eshell/eshell.el
test/ChangeLog
test/automated/eshell.el [new file with mode: 0644]
test/eshell.el [deleted file]

index 5cae5873f929304ee946f1256ad59218461f4d5f..b8fc9b32f989c5759657abcc25acdd2dbfbc734f 100644 (file)
@@ -1,7 +1,10 @@
+2013-09-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * eshell/*.el: Use lexical-binding (bug#15231).
+
 2013-09-12  Kenichi Handa  <handa@gnu.org>
 
-       * composite.el (compose-gstring-for-graphic): Handle enclosing
-       mark.
+       * composite.el (compose-gstring-for-graphic): Handle enclosing mark.
 
 2013-09-12  Glenn Morris  <rgm@gnu.org>
 
index 9a9cc4cd567f7efd38a1c35f074e956705eb3c83..210d71be9c61ac4046fc93533a1d1613e2be6054 100644 (file)
@@ -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.
 
index 8c3eebf35100105c2af17aa9a3c67e6c3f43fcfc..3e1970d97da45657d19f0cb0908b700f60ff4056 100644 (file)
@@ -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.
 
index c440bd0a9287b9f31d7bc0d7341136c7487a6a68..fb2eb85c8e9cca1428e3bfbe7ac588cf1795f5ea 100644 (file)
@@ -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.
 
index 7120f639a70d18469d02ea299c7bb9ae543e37ee..fe7a79cf9526081ca1a61b3c6e6c5c2d65e69515 100644 (file)
@@ -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)
 
index e8fbe0518ac92c8896d3565a7ee1cdc8d5897d4c..2cfd14b5f60b17e3658b01ba3d5ae549d2524d84 100644 (file)
@@ -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.
 
index b5ca811947043e38ff236c3380726f965f164a75..596547c3f5e2e9459039e8ec52cceee46b9664e4 100644 (file)
@@ -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.
 
index 694fe71a95c4c54acc8911fbae9592b733baeb11..8e56de251a1fae64d8de3383d593aedc290bd865 100644 (file)
@@ -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.
 
index 3dee1adb58a966ac831cfdc051cfad8b161b689e..0e10d984f888bc4ec596e7f1990fd74f6389339d 100644 (file)
@@ -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.
 
index 14d3020530fbf2d9aa866d5b2474ff9c39d95984..f7d7605107fac49d1472856f52adc22823d928d2 100644 (file)
@@ -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.
 
index 18731121c4e679c7add950ee5460d9e63ffafc3d..9b9c1095277850fedea1fbb7a9d73ee2cdfb3c04 100644 (file)
@@ -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.
 
index a526d590307c958637b8ab4e00b89357eecb2789..378a57b06876d43b84edae9e12741f914fda3ff4 100644 (file)
@@ -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.
 
index b073928738ffc1faab0b301b4df7e1ac590e023a..1a19698faa8c07fb4d95742c2cd0dfc47ce3aeb9 100644 (file)
@@ -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.
 
index aa9038aafb96f58da6f10fd20b8e0a1ef6fdc4a1..e6fa463aec3c36716e0485d8230d50ccc13e6f00 100644 (file)
@@ -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.
 
index 2932f443e4fcac577dc0fb9c370d832bd7a85159..71329f083ee4a14a7dcbdec1030d47c8bb25ec3d 100644 (file)
@@ -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.
 
index fb816b76a7d1a2aa6a082bbe0c63e54e2dc70842..bb2f440313c0cd8b08ac4c81a559926c6d10ab1b 100644 (file)
@@ -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.
 
index b9b1c1635a5719b00111bd1e4f79342c17165ad2..52d2b4d2a2ddb262fafa2fb8bf1abb7dd2676820 100644 (file)
@@ -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.
 
index c4cab522cf220f30613ed5aceb8cf43ea4fd122e..c9d9d5bfe2f8ea06c65150305e64bce7e424ddc2 100644 (file)
@@ -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.
 
index e3a12d5ece52a6280fe9a5905ce0c9d81039d3a5..f791ad66520fa1efd6403f667346ee842a6e5363 100644 (file)
@@ -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.
 
index c2922983ae213d439ab4e825dd6a92443433020f..cc4fdd15bda4dfde0a72705347e7cca370b98f13 100644 (file)
@@ -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.
 
index 474e536de2eb07434b10ef5f02f0691c13155012..8b312a2c25cd3ac8f6934c1f12a6ade4d35d4b17 100644 (file)
@@ -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.
 
index 4edb47e4758cfa2a078a3a70264d421fe6e030fc..f620890ee6bc5a6db1f0f750a828c98bd320c057 100644 (file)
@@ -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.
 
index 54a36428d580252b38e1f13a9d874feb0109e322..1a80e3894e1f8e9aa487f2e5baa96d177ab75833 100644 (file)
@@ -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.
 
index 5008ef705db8c6dbb51baded58cf60c29e72740e..181d08f8a1d83a4a5a5fe8a9e293677ae07d38b5 100644 (file)
@@ -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.
 
index c62cbc7e1dc3d0637ae22cfa011832736c58b00a..e9252cb540ecff629314b3901aea959fb65df455 100644 (file)
@@ -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.
 
index 171d70c0772a005743f39214224febfc191064cb..e77287c2f7823428471cabfb8fb989d505730b54 100644 (file)
@@ -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.
 
index 968d1ebad793c1661bc3d96e4accd5a8a3f7cb37..cac46ea8d18ad786f042290951b7b8d6eb4acc41 100644 (file)
@@ -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.
 
index 75c36a6854418aaa1db8a4b06bc41be0f818c698..f68b65dfd46847408d496420fe53ea8ceccbd705 100644 (file)
@@ -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.
 
index e3f8f0d11bc6948bfb9d69951d2134a4cea32fc6..47078d142d5414340bf82c22f300ed503e590361 100644 (file)
@@ -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.
 
index 7b39097d3b5876abda347a81e6005efab7bd4788..3e42e18b2b48a351b6200112ba4ee833995455ae 100644 (file)
@@ -1,3 +1,8 @@
+2013-09-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * 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  <rgm@gnu.org>
 
        * automated/Makefile.in (setwins): Avoid leading space in $wins.
 2013-07-05  Michael Albinus  <michael.albinus@gmx.de>
 
        * 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  <michael.albinus@gmx.de>
 2013-06-28  Kenichi Handa  <handa@gnu.org>
 
        * 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 (file)
index 0000000..a7df294
--- /dev/null
@@ -0,0 +1,200 @@
+;;; tests/eshell.el --- Eshell test suite
+
+;; Copyright (C) 1999-2013 Free Software Foundation, Inc.
+
+;; Author: John Wiegley <johnw@gnu.org>
+
+;; 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 <http://www.gnu.org/licenses/>.
+
+;;; 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 (file)
index 126a472..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-;;; tests/eshell.el --- Eshell test suite
-
-;; Copyright (C) 1999-2013 Free Software Foundation, Inc.
-
-;; Author: John Wiegley <johnw@gnu.org>
-
-;; 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 <http://www.gnu.org/licenses/>.
-
-;;; 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