emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 8a40c5a 2/2: * test/automated/tabulated-list-test.e


From: Artur Malabarba
Subject: [Emacs-diffs] master 8a40c5a 2/2: * test/automated/tabulated-list-test.el: New file
Date: Wed, 07 Oct 2015 14:14:18 +0000

branch: master
commit 8a40c5a67eb6b89574ff98f7d55b456d89ff22ee
Author: Artur Malabarba <address@hidden>
Commit: Artur Malabarba <address@hidden>

    * test/automated/tabulated-list-test.el: New file
    
    Test bug#21639 and some basic functionality.
---
 test/automated/tabulated-list-test.el |  118 +++++++++++++++++++++++++++++++++
 1 files changed, 118 insertions(+), 0 deletions(-)

diff --git a/test/automated/tabulated-list-test.el 
b/test/automated/tabulated-list-test.el
new file mode 100644
index 0000000..5731db4
--- /dev/null
+++ b/test/automated/tabulated-list-test.el
@@ -0,0 +1,118 @@
+;;; tabulated-list-test.el --- Tests for emacs-lisp/tabulated-list.el  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; Author: Artur Malabarba <address@hidden>
+
+;; 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/>.
+
+;;; Code:
+
+(require 'tabulated-list)
+(require 'ert)
+
+(defconst tabulated-list--test-entries
+  '(("zzzz-game" ["zzzz-game" "zzzz-game" "2113" "installed" " play zzzz in 
Emacs"])
+    ("4clojure"  ["4clojure" "4clojure" "1507" "obsolete" " Open and evaluate 
4clojure.com questions"])
+    ("abc-mode"  ["abc-mode" "abc-mode" "944" "available" " Major mode for 
editing abc music files"])
+    ("mode"      ["mode" "mode" "1128" "installed" " A simple mode for editing 
Actionscript 3 files"])))
+
+(defun tabulated-list--test-sort-car (a b)
+  (string< (car a) (car b)))
+
+(defconst tabulated-list--test-format
+  [("name" 10 tabulated-list--test-sort-car)
+   ("name-2" 10 t)
+   ("Version" 9 nil)
+   ("Status" 10 )
+   ("Description" 0 nil)])
+
+(defmacro tabulated-list--test-with-buffer (&rest body)
+  `(with-temp-buffer
+     (tabulated-list-mode)
+     (setq tabulated-list-entries (copy-alist tabulated-list--test-entries))
+     (setq tabulated-list-format tabulated-list--test-format)
+     (setq tabulated-list-padding 7)
+     (tabulated-list-init-header)
+     (tabulated-list-print)
+     ,@body))
+
+
+;;; Tests
+(ert-deftest tabulated-list-print ()
+  (tabulated-list--test-with-buffer
+   ;; Basic printing.
+   (should (string= (buffer-substring-no-properties (point-min) (point-max))
+                    "       zzzz-game  zzzz-game  2113      installed   play 
zzzz in Emacs
+       4clojure   4clojure   1507      obsolete    Open and evaluate 
4clojure.com questions
+       abc-mode   abc-mode   944       available   Major mode for editing abc 
music files
+       mode       mode       1128      installed   A simple mode for editing 
Actionscript 3 files\n"))
+   ;; Preseve position.
+   (forward-line 3)
+   (let ((pos (thing-at-point 'line)))
+     (pop tabulated-list-entries)
+     (tabulated-list-print t)
+     (should (equal (thing-at-point 'line) pos))
+     (should (string= (buffer-substring-no-properties (point-min) (point-max))
+                      "       4clojure   4clojure   1507      obsolete    Open 
and evaluate 4clojure.com questions
+       abc-mode   abc-mode   944       available   Major mode for editing abc 
music files
+       mode       mode       1128      installed   A simple mode for editing 
Actionscript 3 files\n"))
+     ;; Check the UPDATE argument
+     (pop tabulated-list-entries)
+     (setf (cdr (car tabulated-list-entries)) (list ["x" "x" "944" "available" 
" XX"]))
+     (tabulated-list-print t t)
+     (should (string= (buffer-substring-no-properties (point-min) (point-max))
+                      "       x          x          944       available   XX
+       mode       mode       1128      installed   A simple mode for editing 
Actionscript 3 files\n"))
+     (should (equal (thing-at-point 'line) pos)))))
+
+(ert-deftest tabulated-list-sort ()
+  (tabulated-list--test-with-buffer
+   ;; Basic sorting
+   (goto-char (point-min))
+   (skip-chars-forward "[:blank:]")
+   (tabulated-list-sort)
+   (let ((text (buffer-substring-no-properties (point-min) (point-max))))
+     (should (string= text "       4clojure   4clojure   1507      obsolete    
Open and evaluate 4clojure.com questions
+       abc-mode   abc-mode   944       available   Major mode for editing abc 
music files
+       mode       mode       1128      installed   A simple mode for editing 
Actionscript 3 files
+       zzzz-game  zzzz-game  2113      installed   play zzzz in Emacs\n"))
+
+     (skip-chars-forward "^[:blank:]")
+     (skip-chars-forward "[:blank:]")
+     (should (equal (get-text-property (point) 'tabulated-list-column-name)
+                    "name-2"))
+     (tabulated-list-sort)
+     ;; Check a `t' as the sorting predicate.
+     (should (string= text (buffer-substring-no-properties (point-min) 
(point-max))))
+     ;; Invert.
+     (tabulated-list-sort 1)
+     (should (string= (buffer-substring-no-properties (point-min) (point-max))
+                      "       zzzz-game  zzzz-game  2113      installed   play 
zzzz in Emacs
+       mode       mode       1128      installed   A simple mode for editing 
Actionscript 3 files
+       abc-mode   abc-mode   944       available   Major mode for editing abc 
music files
+       4clojure   4clojure   1507      obsolete    Open and evaluate 
4clojure.com questions\n"))
+     ;; Again
+     (tabulated-list-sort 1)
+     (should (string= text (buffer-substring-no-properties (point-min) 
(point-max)))))
+   ;; Check that you can't sort some cols.
+   (skip-chars-forward "^[:blank:]")
+   (skip-chars-forward "[:blank:]")
+   (should-error (tabulated-list-sort) :type 'user-error)
+   (should-error (tabulated-list-sort 4) :type 'user-error)))
+
+(provide 'tabulated-list-test)
+;;; tabulated-list-test.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]