aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMichael Albinus2017-02-19 17:14:35 +0100
committerMichael Albinus2017-02-19 17:14:35 +0100
commit143bc75c414434badcb324db056ad37c15893bd9 (patch)
treeedb4c926bd940e39ec9a88ea13324d55f925223c /test
parentb6a1a74522120979fe1a63b2d5517a490ee572b0 (diff)
downloademacs-143bc75c414434badcb324db056ad37c15893bd9.tar.gz
emacs-143bc75c414434badcb324db056ad37c15893bd9.zip
Rework connection local variables
For connection local variables interface, `class' is renamed to `profile'. All arguments `criteria' are a plist now. * doc/lispref/variables.texi (Connection Local Variables): Rewrite. * lisp/files-x.el (connection-local-profile-alist): Rename from `connection-local-class-alist'. Adapt docstring. (connection-local-criteria-alist): Adapt docstring. (connection-local-normalize-criteria): New defun. (connection-local-get-profiles): Rename from `connection-local-get-classes'. Rewrite. (connection-local-set-profiles): Rename from `connection-local-set-classes'. Rewrite. (connection-local-get-profile-variables): Rename from `connection-local-get-class-variables'. Rewrite. (connection-local-set-profile-variables): Rename from `connection-local-set-class-variables'. Rewrite. (hack-connection-local-variables) (hack-connection-local-variables-apply)): Rewrite. (with-connection-local-profiles): Rename from `ith-connection-local-classes'. Rewrite. * lisp/net/tramp.el (tramp-set-connection-local-variables): Compute criteria. * lisp/net/tramp-cmds.el (tramp-bug): Use `connection-local-profile-alist'. * test/lisp/files-x-tests.el (files-x-test--variables1) (files-x-test--variables2, files-x-test--variables3) (files-x-test--variables4, files-x-test--criteria1) (files-x-test--criteria2): Make them a defconst. (files-x-test--application) (files-x-test--another-application, files-x-test--protocol) (files-x-test--user, files-x-test--machine): New defconst. (files-x-test--criteria): New defvar. (files-x-test--criteria3): Remove. (files-x-test-connection-local-set-profile-variables): Rename from `files-x-test-connection-local-set-class-variables'. Rewrite. (files-x-test-connection-local-set-profiles): Rename from `files-x-test-connection-local-set-classes'. Rewrite. (files-x-test-hack-connection-local-variables-apply) Rewrite. (files-x-test-with-connection-local-profiles): Rename from `files-x-test-with-connection-local-classes'. Rewrite.
Diffstat (limited to 'test')
-rw-r--r--test/lisp/files-x-tests.el214
1 files changed, 125 insertions, 89 deletions
diff --git a/test/lisp/files-x-tests.el b/test/lisp/files-x-tests.el
index 88b58fe9576..21d0087ebcf 100644
--- a/test/lisp/files-x-tests.el
+++ b/test/lisp/files-x-tests.el
@@ -24,130 +24,167 @@
24(require 'ert) 24(require 'ert)
25(require 'files-x) 25(require 'files-x)
26 26
27(defvar files-x-test--criteria1 "my-user@my-remote-host") 27(defconst files-x-test--variables1
28(defvar files-x-test--criteria2
29 (lambda (identification)
30 (string-match "another-user@my-remote-host" identification)))
31(defvar files-x-test--criteria3 nil)
32
33(defvar files-x-test--variables1
34 '((remote-shell-file-name . "/bin/bash") 28 '((remote-shell-file-name . "/bin/bash")
35 (remote-shell-command-switch . "-c") 29 (remote-shell-command-switch . "-c")
36 (remote-shell-interactive-switch . "-i") 30 (remote-shell-interactive-switch . "-i")
37 (remote-shell-login-switch . "-l"))) 31 (remote-shell-login-switch . "-l")))
38(defvar files-x-test--variables2 32(defconst files-x-test--variables2
39 '((remote-shell-file-name . "/bin/ksh"))) 33 '((remote-shell-file-name . "/bin/ksh")))
40(defvar files-x-test--variables3 34(defconst files-x-test--variables3
41 '((remote-null-device . "/dev/null"))) 35 '((remote-null-device . "/dev/null")))
42(defvar files-x-test--variables4 36(defconst files-x-test--variables4
43 '((remote-null-device . "null"))) 37 '((remote-null-device . "null")))
44 38
45(ert-deftest files-x-test-connection-local-set-class-variables () 39(defconst files-x-test--application '(:application 'my-application))
46 "Test setting connection-local class variables." 40(defconst files-x-test--another-application
47 41 '(:application 'another-application))
48 ;; Declare (CLASS VARIABLES) objects. 42(defconst files-x-test--protocol '(:protocol "my-protocol"))
49 (let (connection-local-class-alist connection-local-criteria-alist) 43(defconst files-x-test--user '(:user "my-user"))
50 (connection-local-set-class-variables 'remote-bash files-x-test--variables1) 44(defconst files-x-test--machine '(:machine "my-machine"))
45
46(defvar files-x-test--criteria nil)
47(defconst files-x-test--criteria1
48 (append files-x-test--application files-x-test--protocol
49 files-x-test--user files-x-test--machine))
50(defconst files-x-test--criteria2
51 (append files-x-test--another-application files-x-test--protocol
52 files-x-test--user files-x-test--machine))
53
54(ert-deftest files-x-test-connection-local-set-profile-variables ()
55 "Test setting connection-local profile variables."
56
57 ;; Declare (PROFILE VARIABLES) objects.
58 (let (connection-local-profile-alist connection-local-criteria-alist)
59 (connection-local-set-profile-variables
60 'remote-bash files-x-test--variables1)
51 (should 61 (should
52 (equal 62 (equal
53 (connection-local-get-class-variables 'remote-bash) 63 (connection-local-get-profile-variables 'remote-bash)
54 files-x-test--variables1)) 64 files-x-test--variables1))
55 65
56 (connection-local-set-class-variables 'remote-ksh files-x-test--variables2) 66 (connection-local-set-profile-variables
67 'remote-ksh files-x-test--variables2)
57 (should 68 (should
58 (equal 69 (equal
59 (connection-local-get-class-variables 'remote-ksh) 70 (connection-local-get-profile-variables 'remote-ksh)
60 files-x-test--variables2)) 71 files-x-test--variables2))
61 72
62 (connection-local-set-class-variables 73 (connection-local-set-profile-variables
63 'remote-nullfile files-x-test--variables3) 74 'remote-nullfile files-x-test--variables3)
64 (should 75 (should
65 (equal 76 (equal
66 (connection-local-get-class-variables 'remote-nullfile) 77 (connection-local-get-profile-variables 'remote-nullfile)
67 files-x-test--variables3)) 78 files-x-test--variables3))
68 79
69 ;; A redefinition overwrites existing values. 80 ;; A redefinition overwrites existing values.
70 (connection-local-set-class-variables 81 (connection-local-set-profile-variables
71 'remote-nullfile files-x-test--variables4) 82 'remote-nullfile files-x-test--variables4)
72 (should 83 (should
73 (equal 84 (equal
74 (connection-local-get-class-variables 'remote-nullfile) 85 (connection-local-get-profile-variables 'remote-nullfile)
75 files-x-test--variables4)))) 86 files-x-test--variables4))))
76 87
77(ert-deftest files-x-test-connection-local-set-classes () 88(ert-deftest files-x-test-connection-local-set-profiles ()
78 "Test setting connection-local classes." 89 "Test setting connection-local profiles."
79 90
80 ;; Declare (CRITERIA CLASSES) objects. 91 ;; Declare (CRITERIA PROFILES) objects.
81 (let (connection-local-class-alist connection-local-criteria-alist) 92 (let (connection-local-profile-alist connection-local-criteria-alist)
82 (connection-local-set-class-variables 'remote-bash files-x-test--variables1) 93 (connection-local-set-profile-variables
83 (connection-local-set-class-variables 'remote-ksh files-x-test--variables2) 94 'remote-bash files-x-test--variables1)
84 (connection-local-set-class-variables 95 (connection-local-set-profile-variables
96 'remote-ksh files-x-test--variables2)
97 (connection-local-set-profile-variables
85 'remote-nullfile files-x-test--variables3) 98 'remote-nullfile files-x-test--variables3)
86 99
87 (connection-local-set-classes 100 ;; Use a criteria with all properties.
88 files-x-test--criteria1 'remote-bash 'remote-ksh) 101 (setq files-x-test--criteria
102 (append files-x-test--application files-x-test--protocol
103 files-x-test--user files-x-test--machine))
104 ;; An empty variable list is accepted (but makes no sense).
105 (connection-local-set-profiles files-x-test--criteria)
106 (should-not (connection-local-get-profiles files-x-test--criteria))
107 (connection-local-set-profiles
108 files-x-test--criteria 'remote-bash 'remote-ksh)
89 (should 109 (should
90 (equal 110 (equal
91 (connection-local-get-classes files-x-test--criteria1) 111 (connection-local-get-profiles files-x-test--criteria)
92 '(remote-bash remote-ksh))) 112 '(remote-bash remote-ksh)))
93 113 ;; Changing the order of properties doesn't matter.
94 (connection-local-set-classes files-x-test--criteria2 'remote-ksh) 114 (setq files-x-test--criteria
115 (append files-x-test--protocol files-x-test--application
116 files-x-test--machine files-x-test--user))
95 (should 117 (should
96 (equal 118 (equal
97 (connection-local-get-classes files-x-test--criteria2) 119 (connection-local-get-profiles files-x-test--criteria)
98 '(remote-ksh))) 120 '(remote-bash remote-ksh)))
99 ;; A further call adds classes. 121 ;; A further call adds profiles.
100 (connection-local-set-classes files-x-test--criteria2 'remote-nullfile) 122 (connection-local-set-profiles files-x-test--criteria 'remote-nullfile)
101 (should 123 (should
102 (equal 124 (equal
103 (connection-local-get-classes files-x-test--criteria2) 125 (connection-local-get-profiles files-x-test--criteria)
104 '(remote-ksh remote-nullfile))) 126 '(remote-bash remote-ksh remote-nullfile)))
105 ;; Adding existing classes doesn't matter. 127 ;; Adding existing profiles doesn't matter.
106 (connection-local-set-classes 128 (connection-local-set-profiles
107 files-x-test--criteria2 'remote-bash 'remote-nullfile) 129 files-x-test--criteria 'remote-bash 'remote-nullfile)
108 (should 130 (should
109 (equal 131 (equal
110 (connection-local-get-classes files-x-test--criteria2) 132 (connection-local-get-profiles files-x-test--criteria)
111 '(remote-ksh remote-nullfile remote-bash))) 133 '(remote-bash remote-ksh remote-nullfile)))
112 134
113 ;; An empty variable list is accepted (but makes no sense). 135 ;; Use a criteria without application.
114 (connection-local-set-classes files-x-test--criteria3) 136 (setq files-x-test--criteria
115 (should-not (connection-local-get-classes files-x-test--criteria3)) 137 (append files-x-test--protocol
138 files-x-test--user files-x-test--machine))
139 (connection-local-set-profiles files-x-test--criteria 'remote-ksh)
140 (should
141 (equal
142 (connection-local-get-profiles files-x-test--criteria)
143 '(remote-ksh)))
144 ;; An application not used in any registered criteria matches also this.
145 (setq files-x-test--criteria
146 (append files-x-test--another-application files-x-test--protocol
147 files-x-test--user files-x-test--machine))
148 (should
149 (equal
150 (connection-local-get-profiles files-x-test--criteria)
151 '(remote-ksh)))
116 152
117 ;; Using a nil criteria also works. Duplicate classes are trashed. 153 ;; Using a nil criteria also works. Duplicate profiles are trashed.
118 (connection-local-set-classes 154 (connection-local-set-profiles
119 files-x-test--criteria3 'remote-bash 'remote-ksh 'remote-ksh 'remote-bash) 155 nil 'remote-bash 'remote-ksh 'remote-ksh 'remote-bash)
120 (should 156 (should
121 (equal 157 (equal
122 (connection-local-get-classes files-x-test--criteria3) 158 (connection-local-get-profiles nil)
123 '(remote-bash remote-ksh))) 159 '(remote-bash remote-ksh)))
124 160
125 ;; A criteria other than nil, regexp or lambda function is wrong. 161 ;; A criteria other than plist is wrong.
126 (should-error (connection-local-set-classes 'dummy)))) 162 (should-error (connection-local-set-profiles 'dummy))))
127 163
128(ert-deftest files-x-test-hack-connection-local-variables-apply () 164(ert-deftest files-x-test-hack-connection-local-variables-apply ()
129 "Test setting connection-local variables." 165 "Test setting connection-local variables."
130 166
131 (let (connection-local-class-alist connection-local-criteria-alist) 167 (let (connection-local-profile-alist connection-local-criteria-alist)
132 168
133 (connection-local-set-class-variables 'remote-bash files-x-test--variables1) 169 (connection-local-set-profile-variables
134 (connection-local-set-class-variables 'remote-ksh files-x-test--variables2) 170 'remote-bash files-x-test--variables1)
135 (connection-local-set-class-variables 171 (connection-local-set-profile-variables
172 'remote-ksh files-x-test--variables2)
173 (connection-local-set-profile-variables
136 'remote-nullfile files-x-test--variables3) 174 'remote-nullfile files-x-test--variables3)
137 175
138 (connection-local-set-classes 176 (connection-local-set-profiles
139 files-x-test--criteria1 'remote-bash 'remote-ksh) 177 files-x-test--criteria1 'remote-bash 'remote-ksh)
140 (connection-local-set-classes 178 (connection-local-set-profiles
141 files-x-test--criteria2 'remote-ksh 'remote-nullfile) 179 files-x-test--criteria2 'remote-ksh 'remote-nullfile)
142 180
143 ;; Apply the variables. 181 ;; Apply the variables.
144 (with-temp-buffer 182 (with-temp-buffer
145 (let ((enable-connection-local-variables t) 183 (let ((enable-connection-local-variables t))
146 (default-directory "/sudo:my-user@my-remote-host:"))
147 (should-not connection-local-variables-alist) 184 (should-not connection-local-variables-alist)
148 (should-not (local-variable-p 'remote-shell-file-name)) 185 (should-not (local-variable-p 'remote-shell-file-name))
149 (should-not (boundp 'remote-shell-file-name)) 186 (should-not (boundp 'remote-shell-file-name))
150 (hack-connection-local-variables-apply) 187 (hack-connection-local-variables-apply files-x-test--criteria1)
151 ;; All connection-local variables are set. They apply in 188 ;; All connection-local variables are set. They apply in
152 ;; reverse order in `connection-local-variables-alist'. The 189 ;; reverse order in `connection-local-variables-alist'. The
153 ;; settings from `remote-ksh' are not contained, because they 190 ;; settings from `remote-ksh' are not contained, because they
@@ -163,12 +200,11 @@
163 200
164 ;; The second test case. 201 ;; The second test case.
165 (with-temp-buffer 202 (with-temp-buffer
166 (let ((enable-connection-local-variables t) 203 (let ((enable-connection-local-variables t))
167 (default-directory "/ssh:another-user@my-remote-host:"))
168 (should-not connection-local-variables-alist) 204 (should-not connection-local-variables-alist)
169 (should-not (local-variable-p 'remote-shell-file-name)) 205 (should-not (local-variable-p 'remote-shell-file-name))
170 (should-not (boundp 'remote-shell-file-name)) 206 (should-not (boundp 'remote-shell-file-name))
171 (hack-connection-local-variables-apply) 207 (hack-connection-local-variables-apply files-x-test--criteria2)
172 ;; All connection-local variables are set. They apply in 208 ;; All connection-local variables are set. They apply in
173 ;; reverse order in `connection-local-variables-alist'. 209 ;; reverse order in `connection-local-variables-alist'.
174 (should 210 (should
@@ -182,18 +218,17 @@
182 (should 218 (should
183 (string-equal (symbol-value 'remote-shell-file-name) "/bin/ksh")))) 219 (string-equal (symbol-value 'remote-shell-file-name) "/bin/ksh"))))
184 220
185 ;; The third test case. Both `files-x-test--criteria1' and 221 ;; The third test case. Both criteria `files-x-test--criteria1'
186 ;; `files-x-test--criteria3' apply, but there are no double 222 ;; and `files-x-test--criteria2' apply, but there are no double
187 ;; entries. 223 ;; entries.
188 (connection-local-set-classes 224 (connection-local-set-profiles
189 files-x-test--criteria3 'remote-bash 'remote-ksh) 225 nil 'remote-bash 'remote-ksh)
190 (with-temp-buffer 226 (with-temp-buffer
191 (let ((enable-connection-local-variables t) 227 (let ((enable-connection-local-variables t))
192 (default-directory "/sudo:my-user@my-remote-host:"))
193 (should-not connection-local-variables-alist) 228 (should-not connection-local-variables-alist)
194 (should-not (local-variable-p 'remote-shell-file-name)) 229 (should-not (local-variable-p 'remote-shell-file-name))
195 (should-not (boundp 'remote-shell-file-name)) 230 (should-not (boundp 'remote-shell-file-name))
196 (hack-connection-local-variables-apply) 231 (hack-connection-local-variables-apply nil)
197 ;; All connection-local variables are set. They apply in 232 ;; All connection-local variables are set. They apply in
198 ;; reverse order in `connection-local-variables-alist'. The 233 ;; reverse order in `connection-local-variables-alist'. The
199 ;; settings from `remote-ksh' are not contained, because they 234 ;; settings from `remote-ksh' are not contained, because they
@@ -209,31 +244,32 @@
209 244
210 ;; When `enable-connection-local-variables' is nil, nothing happens. 245 ;; When `enable-connection-local-variables' is nil, nothing happens.
211 (with-temp-buffer 246 (with-temp-buffer
212 (let ((enable-connection-local-variables nil) 247 (let ((enable-connection-local-variables nil))
213 (default-directory "/ssh:another-user@my-remote-host:"))
214 (should-not connection-local-variables-alist) 248 (should-not connection-local-variables-alist)
215 (should-not (local-variable-p 'remote-shell-file-name)) 249 (should-not (local-variable-p 'remote-shell-file-name))
216 (should-not (boundp 'remote-shell-file-name)) 250 (should-not (boundp 'remote-shell-file-name))
217 (hack-connection-local-variables-apply) 251 (hack-connection-local-variables-apply nil)
218 (should-not connection-local-variables-alist) 252 (should-not connection-local-variables-alist)
219 (should-not (local-variable-p 'remote-shell-file-name)) 253 (should-not (local-variable-p 'remote-shell-file-name))
220 (should-not (boundp 'remote-shell-file-name)))))) 254 (should-not (boundp 'remote-shell-file-name))))))
221 255
222(ert-deftest files-x-test-with-connection-local-classes () 256(ert-deftest files-x-test-with-connection-local-profiles ()
223 "Test setting connection-local variables." 257 "Test setting connection-local variables."
224 258
225 (let (connection-local-class-alist connection-local-criteria-alist) 259 (let (connection-local-profile-alist connection-local-criteria-alist)
226 (connection-local-set-class-variables 'remote-bash files-x-test--variables1) 260 (connection-local-set-profile-variables
227 (connection-local-set-class-variables 'remote-ksh files-x-test--variables2) 261 'remote-bash files-x-test--variables1)
228 (connection-local-set-class-variables 262 (connection-local-set-profile-variables
263 'remote-ksh files-x-test--variables2)
264 (connection-local-set-profile-variables
229 'remote-nullfile files-x-test--variables3) 265 'remote-nullfile files-x-test--variables3)
230 (connection-local-set-classes 266
231 files-x-test--criteria3 'remote-ksh 'remote-nullfile) 267 (connection-local-set-profiles
268 nil 'remote-ksh 'remote-nullfile)
232 269
233 (with-temp-buffer 270 (with-temp-buffer
234 (let ((enable-connection-local-variables t) 271 (let ((enable-connection-local-variables t))
235 (default-directory "/sudo:my-user@my-remote-host:")) 272 (hack-connection-local-variables-apply nil)
236 (hack-connection-local-variables-apply)
237 273
238 ;; All connection-local variables are set. They apply in 274 ;; All connection-local variables are set. They apply in
239 ;; reverse order in `connection-local-variables-alist'. 275 ;; reverse order in `connection-local-variables-alist'.
@@ -255,7 +291,7 @@
255 (should-not (local-variable-p 'remote-shell-command-switch)) 291 (should-not (local-variable-p 'remote-shell-command-switch))
256 292
257 ;; Use the macro. 293 ;; Use the macro.
258 (with-connection-local-classes '(remote-bash remote-ksh) 294 (with-connection-local-profiles '(remote-bash remote-ksh)
259 ;; All connection-local variables are set. They apply in 295 ;; All connection-local variables are set. They apply in
260 ;; reverse order in `connection-local-variables-alist'. 296 ;; reverse order in `connection-local-variables-alist'.
261 ;; This variable keeps only the variables to be set inside 297 ;; This variable keeps only the variables to be set inside