]> code.delx.au - gnu-emacs-elpa/blob - ivy-test.el
ivy-test.el (counsel-unquote-regex-parens): Add test
[gnu-emacs-elpa] / ivy-test.el
1 ;;; ivy-test.el --- tests for ivy
2
3 ;; Copyright (C) 2015 Free Software Foundation, Inc.
4
5 ;; Author: Oleh Krehel
6
7 ;; This file is part of GNU Emacs.
8
9 ;; This file is free software; you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation; either version 3, or (at your option)
12 ;; any later version.
13
14 ;; This program is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ;; GNU General Public License for more details.
18
19 ;; For a full copy of the GNU General Public License
20 ;; see <http://www.gnu.org/licenses/>.
21
22 (require 'ert)
23 (require 'ivy)
24 (require 'counsel)
25
26 (defvar ivy-expr nil
27 "Holds a test expression to evaluate with `ivy-eval'.")
28
29 (defvar ivy-result nil
30 "Holds the eval result of `ivy-expr' by `ivy-eval'.")
31
32 (defun ivy-eval ()
33 "Evaluate `ivy-expr'."
34 (interactive)
35 (setq ivy-result (eval ivy-expr)))
36
37 (global-set-key (kbd "C-c e") 'ivy-eval)
38
39 (defun ivy-with (expr keys)
40 "Evaluate EXPR followed by KEYS."
41 (let ((ivy-expr expr))
42 (execute-kbd-macro
43 (vconcat (kbd "C-c e")
44 (kbd keys)))
45 ivy-result))
46
47 (ert-deftest ivy-read ()
48 (should (equal
49 (ivy-with '(ivy-read "pattern: " '("blue" "yellow"))
50 "C-m")
51 "blue"))
52 (should (equal
53 (ivy-with '(ivy-read "pattern: " '("blue" "yellow"))
54 "y C-m")
55 "yellow"))
56 (should (equal
57 (ivy-with '(ivy-read "pattern: " '("blue" "yellow"))
58 "y DEL b C-m")
59 "blue"))
60 (should (equal
61 (ivy-with '(ivy-read "pattern: " '("blue" "yellow"))
62 "z C-m")
63 "z"))
64 (should (equal
65 (ivy-with '(ivy-read "pattern: " '("blue" "yellow"))
66 "y <backspace> C-m")
67 "blue"))
68 (should (equal
69 (ivy-with '(let ((ivy-re-builders-alist '((t . ivy--regex-fuzzy))))
70 (ivy-read "pattern: " '("package-list-packages" "something-else")))
71 "plp C-m")
72 "package-list-packages"))
73 (should (equal
74 (ivy-with '(ivy-read "test" '("aaab" "aaac"))
75 "a C-n <tab> C-m")
76 "aaac"))
77 (should (equal
78 (ivy-with '(ivy-read "pattern: " '("can do" "can" "can't do"))
79 "can C-m")
80 "can")))
81
82 (ert-deftest swiper--re-builder ()
83 (setq swiper--width 4)
84 (should (string= (swiper--re-builder "^")
85 "."))
86 (should (string= (swiper--re-builder "^a")
87 "^ ?\\(a\\)"))
88 (should (string= (swiper--re-builder "^a b")
89 "^ \\(a\\).*?\\(b\\)")))
90
91 (ert-deftest ivy--split ()
92 (should (equal (ivy--split "King of the who?")
93 '("King" "of" "the" "who?")))
94 (should (equal (ivy--split "The Brittons.")
95 '("The Brittons.")))
96 (should (equal (ivy--split "Who are the Brittons?")
97 '("Who are" "the Brittons?")))
98 (should (equal (ivy--split "We're all Britons and I am your king.")
99 '("We're all Britons"
100 "and I am"
101 "your king."))))
102
103 (ert-deftest ivy--regex-fuzzy ()
104 (should (string= (ivy--regex-fuzzy "tmux")
105 "\\(t\\).*\\(m\\).*\\(u\\).*\\(x\\)"))
106 (should (string= (ivy--regex-fuzzy "^tmux")
107 "^\\(t\\).*\\(m\\).*\\(u\\).*\\(x\\)"))
108 (should (string= (ivy--regex-fuzzy "^tmux$")
109 "^\\(t\\).*\\(m\\).*\\(u\\).*\\(x\\)$"))
110 (should (string= (ivy--regex-fuzzy "")
111 ""))
112 (should (string= (ivy--regex-fuzzy "^")
113 "^"))
114 (should (string= (ivy--regex-fuzzy "$")
115 "$")))
116
117 (ert-deftest ivy--regex-ignore-order ()
118 (should (equal (ivy--regex-ignore-order "tmux")
119 '(("tmux" . t))))
120 (should (equal (ivy--regex-ignore-order "^tmux")
121 '(("^tmux" . t))))
122 (should (equal (ivy--regex-ignore-order "^tmux$")
123 '(("^tmux$" . t))))
124 (should (equal (ivy--regex-ignore-order "")
125 ""))
126 (should (equal (ivy--regex-ignore-order "^")
127 '(("^" . t))))
128 (should (equal (ivy--regex-ignore-order "$")
129 '(("$" . t))))
130 (should (equal (ivy--regex-ignore-order "one two")
131 '(("one" . t) ("two" . t))))
132 (should (equal (ivy--regex-ignore-order "one two !three")
133 '(("one" . t) ("two" . t) ("three"))))
134 (should (equal (ivy--regex-ignore-order "one two !three four")
135 '(("one" . t) ("two" . t) ("three") ("four"))))
136 (should (equal (ivy--regex-ignore-order "!three four")
137 '(("" . t) (("three") ("four"))))))
138
139 (ert-deftest ivy--format ()
140 (should (string= (let ((ivy--index 10)
141 (ivy-format-function (lambda (x) (mapconcat (lambda (y) (car y)) x "\n")))
142 (cands '("NAME"
143 "SYNOPSIS"
144 "DESCRIPTION"
145 "FUNCTION LETTERS"
146 "SWITCHES"
147 "DIAGNOSTICS"
148 "EXAMPLE 1"
149 "EXAMPLE 2"
150 "EXAMPLE 3"
151 "SEE ALSO"
152 "AUTHOR")))
153 (ivy--format cands))
154 #("\nDESCRIPTION\nFUNCTION LETTERS\nSWITCHES\nDIAGNOSTICS\nEXAMPLE 1\nEXAMPLE 2\nEXAMPLE 3\nSEE ALSO\nAUTHOR"
155 0 90 (read-only nil)
156 90 96 (face ivy-current-match read-only nil)))))
157
158 (ert-deftest ivy--filter ()
159 (setq ivy-last (make-ivy-state))
160 (should (equal (ivy--filter "the" '("foo" "the" "The"))
161 '("the" "The")))
162 (should (equal (ivy--filter "The" '("foo" "the" "The"))
163 '("The"))))
164
165 (ert-deftest counsel-unquote-regex-parens ()
166 (should (equal (counsel-unquote-regex-parens
167 (ivy--regex "foo bar"))
168 "(foo).*?(bar)")))