diff options
| author | Noam Postavsky | 2015-12-12 23:10:15 -0500 |
|---|---|---|
| committer | Noam Postavsky | 2016-12-02 20:25:15 -0500 |
| commit | e7cd98b86fc7cb7d8b187087ffff95f106124dc5 (patch) | |
| tree | b3f5fc89734ca6246059a4854d62a39b4d63c48f /test/src | |
| parent | d3faef9baedadc9eaec46814ba9bbe5168048328 (diff) | |
| download | emacs-e7cd98b86fc7cb7d8b187087ffff95f106124dc5.tar.gz emacs-e7cd98b86fc7cb7d8b187087ffff95f106124dc5.zip | |
Add tests for watchpoints
* test/src/data-tests.el (data-tests-variable-watchers):
(data-tests-local-variable-watchers): New tests.
Diffstat (limited to 'test/src')
| -rw-r--r-- | test/src/data-tests.el | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/test/src/data-tests.el b/test/src/data-tests.el index 0a292336f35..4c2ea54862c 100644 --- a/test/src/data-tests.el +++ b/test/src/data-tests.el | |||
| @@ -255,3 +255,118 @@ comparing the subr with a much slower lisp implementation." | |||
| 255 | (v2 (test-bool-vector-bv-from-hex-string "0000C")) | 255 | (v2 (test-bool-vector-bv-from-hex-string "0000C")) |
| 256 | (v3 (bool-vector-not v1))) | 256 | (v3 (bool-vector-not v1))) |
| 257 | (should (equal v2 v3)))) | 257 | (should (equal v2 v3)))) |
| 258 | |||
| 259 | (ert-deftest data-tests-variable-watchers () | ||
| 260 | (defvar data-tests-var 0) | ||
| 261 | (let* ((watch-data nil) | ||
| 262 | (collect-watch-data | ||
| 263 | (lambda (&rest args) (push args watch-data)))) | ||
| 264 | (cl-flet ((should-have-watch-data (data) | ||
| 265 | (should (equal (pop watch-data) data)) | ||
| 266 | (should (null watch-data)))) | ||
| 267 | (add-variable-watcher 'data-tests-var collect-watch-data) | ||
| 268 | (setq data-tests-var 1) | ||
| 269 | (should-have-watch-data '(data-tests-var 1 set nil)) | ||
| 270 | (let ((data-tests-var 2)) | ||
| 271 | (should-have-watch-data '(data-tests-var 2 let nil)) | ||
| 272 | (setq data-tests-var 3) | ||
| 273 | (should-have-watch-data '(data-tests-var 3 set nil))) | ||
| 274 | (should-have-watch-data '(data-tests-var 1 unlet nil)) | ||
| 275 | ;; `setq-default' on non-local variable is same as `setq'. | ||
| 276 | (setq-default data-tests-var 4) | ||
| 277 | (should-have-watch-data '(data-tests-var 4 set nil)) | ||
| 278 | (makunbound 'data-tests-var) | ||
| 279 | (should-have-watch-data '(data-tests-var nil makunbound nil)) | ||
| 280 | (setq data-tests-var 5) | ||
| 281 | (should-have-watch-data '(data-tests-var 5 set nil)) | ||
| 282 | (remove-variable-watcher 'data-tests-var collect-watch-data) | ||
| 283 | (setq data-tests-var 6) | ||
| 284 | (should (null watch-data))))) | ||
| 285 | |||
| 286 | (ert-deftest data-tests-varalias-watchers () | ||
| 287 | (defvar data-tests-var0 0) | ||
| 288 | (defvar data-tests-var1 0) | ||
| 289 | (defvar data-tests-var2 0) | ||
| 290 | (defvar data-tests-var3 0) | ||
| 291 | (let* ((watch-data nil) | ||
| 292 | (collect-watch-data | ||
| 293 | (lambda (&rest args) (push args watch-data)))) | ||
| 294 | (cl-flet ((should-have-watch-data (data) | ||
| 295 | (should (equal (pop watch-data) data)) | ||
| 296 | (should (null watch-data)))) | ||
| 297 | ;; Watch var0, then alias it. | ||
| 298 | (add-variable-watcher 'data-tests-var0 collect-watch-data) | ||
| 299 | (defvaralias 'data-tests-var0-alias 'data-tests-var0) | ||
| 300 | (setq data-tests-var0 1) | ||
| 301 | (should-have-watch-data '(data-tests-var0 1 set nil)) | ||
| 302 | (setq data-tests-var0-alias 2) | ||
| 303 | (should-have-watch-data '(data-tests-var0 2 set nil)) | ||
| 304 | ;; Alias var1, then watch var1-alias. | ||
| 305 | (defvaralias 'data-tests-var1-alias 'data-tests-var1) | ||
| 306 | (add-variable-watcher 'data-tests-var1-alias collect-watch-data) | ||
| 307 | (setq data-tests-var1 1) | ||
| 308 | (should-have-watch-data '(data-tests-var1 1 set nil)) | ||
| 309 | (setq data-tests-var1-alias 2) | ||
| 310 | (should-have-watch-data '(data-tests-var1 2 set nil)) | ||
| 311 | ;; Alias var2, then watch it. | ||
| 312 | (defvaralias 'data-tests-var2-alias 'data-tests-var2) | ||
| 313 | (add-variable-watcher 'data-tests-var2 collect-watch-data) | ||
| 314 | (setq data-tests-var2 1) | ||
| 315 | (should-have-watch-data '(data-tests-var2 1 set nil)) | ||
| 316 | (setq data-tests-var2-alias 2) | ||
| 317 | (should-have-watch-data '(data-tests-var2 2 set nil)) | ||
| 318 | ;; Watch var3-alias, then make it alias var3 (this removes the | ||
| 319 | ;; watcher flag). | ||
| 320 | (defvar data-tests-var3-alias 0) | ||
| 321 | (add-variable-watcher 'data-tests-var3-alias collect-watch-data) | ||
| 322 | (defvaralias 'data-tests-var3-alias 'data-tests-var3) | ||
| 323 | (should-have-watch-data '(data-tests-var3-alias | ||
| 324 | data-tests-var3 defvaralias nil)) | ||
| 325 | (setq data-tests-var3 1) | ||
| 326 | (setq data-tests-var3-alias 2) | ||
| 327 | (should (null watch-data))))) | ||
| 328 | |||
| 329 | (ert-deftest data-tests-local-variable-watchers () | ||
| 330 | (defvar-local data-tests-lvar 0) | ||
| 331 | (let* ((buf1 (current-buffer)) | ||
| 332 | (buf2 nil) | ||
| 333 | (watch-data nil) | ||
| 334 | (collect-watch-data | ||
| 335 | (lambda (&rest args) (push args watch-data)))) | ||
| 336 | (cl-flet ((should-have-watch-data (data) | ||
| 337 | (should (equal (pop watch-data) data)) | ||
| 338 | (should (null watch-data)))) | ||
| 339 | (add-variable-watcher 'data-tests-lvar collect-watch-data) | ||
| 340 | (setq data-tests-lvar 1) | ||
| 341 | (should-have-watch-data `(data-tests-lvar 1 set ,buf1)) | ||
| 342 | (let ((data-tests-lvar 2)) | ||
| 343 | (should-have-watch-data `(data-tests-lvar 2 let ,buf1)) | ||
| 344 | (setq data-tests-lvar 3) | ||
| 345 | (should-have-watch-data `(data-tests-lvar 3 set ,buf1))) | ||
| 346 | (should-have-watch-data `(data-tests-lvar 1 unlet ,buf1)) | ||
| 347 | (setq-default data-tests-lvar 4) | ||
| 348 | (should-have-watch-data `(data-tests-lvar 4 set nil)) | ||
| 349 | (with-temp-buffer | ||
| 350 | (setq buf2 (current-buffer)) | ||
| 351 | (setq data-tests-lvar 1) | ||
| 352 | (should-have-watch-data `(data-tests-lvar 1 set ,buf2)) | ||
| 353 | (let ((data-tests-lvar 2)) | ||
| 354 | (should-have-watch-data `(data-tests-lvar 2 let ,buf2)) | ||
| 355 | (setq data-tests-lvar 3) | ||
| 356 | (should-have-watch-data `(data-tests-lvar 3 set ,buf2))) | ||
| 357 | (should-have-watch-data `(data-tests-lvar 1 unlet ,buf2)) | ||
| 358 | (kill-local-variable 'data-tests-lvar) | ||
| 359 | (should-have-watch-data `(data-tests-lvar nil makunbound ,buf2)) | ||
| 360 | (setq data-tests-lvar 3.5) | ||
| 361 | (should-have-watch-data `(data-tests-lvar 3.5 set ,buf2)) | ||
| 362 | (kill-all-local-variables) | ||
| 363 | (should-have-watch-data `(data-tests-lvar nil makunbound ,buf2))) | ||
| 364 | (setq-default data-tests-lvar 4) | ||
| 365 | (should-have-watch-data `(data-tests-lvar 4 set nil)) | ||
| 366 | (makunbound 'data-tests-lvar) | ||
| 367 | (should-have-watch-data '(data-tests-lvar nil makunbound nil)) | ||
| 368 | (setq data-tests-lvar 5) | ||
| 369 | (should-have-watch-data `(data-tests-lvar 5 set ,buf1)) | ||
| 370 | (remove-variable-watcher 'data-tests-lvar collect-watch-data) | ||
| 371 | (setq data-tests-lvar 6) | ||
| 372 | (should (null watch-data))))) | ||