Adapt filenotify-tests for emba

* test/lisp/filenotify-tests.el (file-notify-test03-events)
(file-notify-test05-file-validity)
(file-notify-test06-dir-validity)
(file-notify-test07-many-events)
(file-notify-test09-watched-file-in-watched-dir): Adapt tests for emba.
This commit is contained in:
Michael Albinus 2019-01-06 15:42:57 +01:00
parent a3d52b3057
commit cfa54ab7d8
2 changed files with 118 additions and 88 deletions

View file

@ -114,7 +114,7 @@ Could be different from the directory watched by the backend library."
(when-let* ((watch (gethash (car event) file-notify-descriptors)))
(directory-file-name
(expand-file-name
(or (and (stringp (nth 2 event)) (nth 2 event)) "")
(or (and (stringp (nth 2 event)) (nth 2 event)) "")
(file-notify--watch-directory watch)))))
;; Only `gfilenotify' could return two file names.
@ -240,8 +240,10 @@ EVENT is the cadr of the event in `file-notify-handle-event'
(file-notify--watch-filename watch)
(file-name-nondirectory file1)))))
;;(message
;;"file-notify-callback %S %S %S %S %S"
;;desc action file file1 watch)
;;"file-notify-callback %S %S %S %S %S %S %S"
;;desc action file file1 watch
;;(file-notify--event-watched-file event)
;;(file-notify--watch-directory watch))
(funcall (file-notify--watch-callback watch)
(if file1
`(,desc ,action ,file ,file1)
@ -419,11 +421,9 @@ DESCRIPTOR should be an object returned by `file-notify-add-watch'."
descriptor))
t))))
;; TODO:
;; * Watching a /dir/file may receive events for dir.
;; (This may be the desired behavior.)
;; * Watching a file in an already watched directory
;; * Watching a file in an already watched directory.
;; If the file is created and *then* a watch is added to that file, the
;; watch might receive events which occurred prior to it being created,
;; due to the way events are propagated during idle time. Note: This

View file

@ -588,7 +588,6 @@ delivered."
(ert-deftest file-notify-test03-events ()
"Check file creation/change/removal notifications."
:tags (if (getenv "EMACS_EMBA_CI") '(:unstable))
(skip-unless (file-notify--test-local-enabled))
(unwind-protect
@ -689,6 +688,11 @@ delivered."
'(created deleted stopped))
((string-equal (file-notify--test-library) "kqueue")
'(created changed deleted stopped))
;; inotify on emba does not detect `deleted' and
;; `stopped' events of the directory.
((and (string-equal (file-notify--test-library) "inotify")
(getenv "EMACS_EMBA_CI"))
'(created changed deleted))
(t '(created changed deleted deleted stopped)))
(write-region
"any text" nil file-notify--test-tmpfile nil 'no-message)
@ -734,6 +738,11 @@ delivered."
'(created created changed changed deleted stopped))
((string-equal (file-notify--test-library) "kqueue")
'(created changed created changed deleted stopped))
;; inotify on emba does not detect `deleted' and
;; `stopped' events of the directory.
((and (string-equal (file-notify--test-library) "inotify")
(getenv "EMACS_EMBA_CI"))
'(created changed created changed deleted deleted))
(t '(created changed created changed
deleted deleted deleted stopped)))
(write-region
@ -786,6 +795,11 @@ delivered."
'(created created deleted deleted stopped))
((string-equal (file-notify--test-library) "kqueue")
'(created changed renamed deleted stopped))
;; inotify on emba does not detect `deleted' and
;; `stopped' events of the directory.
((and (string-equal (file-notify--test-library) "inotify")
(getenv "EMACS_EMBA_CI"))
'(created changed renamed deleted))
(t '(created changed renamed deleted deleted stopped)))
(write-region
"any text" nil file-notify--test-tmpfile nil 'no-message)
@ -946,7 +960,6 @@ delivered."
(ert-deftest file-notify-test05-file-validity ()
"Check `file-notify-valid-p' for files."
:tags (if (getenv "EMACS_EMBA_CI") '(:unstable))
(skip-unless (file-notify--test-local-enabled))
(unwind-protect
@ -1004,62 +1017,66 @@ delivered."
;; Cleanup.
(file-notify--test-cleanup))
(unwind-protect
(let ((file-notify--test-tmpdir
(make-temp-file "file-notify-test-parent" t)))
(should
(setq file-notify--test-tmpfile (file-notify--test-make-temp-name)
file-notify--test-desc
(file-notify-add-watch
file-notify--test-tmpdir
'(change) #'file-notify--test-event-handler)))
(should (file-notify-valid-p file-notify--test-desc))
(file-notify--test-with-events
(cond
;; w32notify does not raise `deleted' and `stopped' events
;; for the watched directory.
((string-equal (file-notify--test-library) "w32notify")
'(created changed deleted))
;; gvfs-monitor-dir on cygwin does not detect the `created'
;; event reliably.
((string-equal (file-notify--test-library) "gvfs-monitor-dir.exe")
'((deleted stopped)
(created deleted stopped)))
;; There are two `deleted' events, for the file and for the
;; directory. Except for cygwin and kqueue. And cygwin
;; does not raise a `changed' event.
((eq system-type 'cygwin)
'(created deleted stopped))
((string-equal (file-notify--test-library) "kqueue")
'(created changed deleted stopped))
(t '(created changed deleted deleted stopped)))
(write-region
"any text" nil file-notify--test-tmpfile nil 'no-message)
(file-notify--test-read-event)
(delete-directory file-notify--test-tmpdir 'recursive))
;; After deleting the parent directory, the descriptor must
;; not be valid anymore.
(should-not (file-notify-valid-p file-notify--test-desc))
;; w32notify doesn't generate `stopped' events when the parent
;; directory is deleted, which doesn't provide a chance for
;; filenotify.el to remove the descriptor from the internal
;; hash table it maintains. So we must remove the descriptor
;; manually.
(if (string-equal (file-notify--test-library) "w32notify")
(file-notify--rm-descriptor file-notify--test-desc))
;; inotify on emba does not detect `deleted' and
;; `stopped' events of the directory.
(unless (and (string-equal (file-notify--test-library) "inotify")
(getenv "EMACS_EMBA_CI"))
(unwind-protect
(let ((file-notify--test-tmpdir
(make-temp-file "file-notify-test-parent" t)))
(should
(setq file-notify--test-tmpfile (file-notify--test-make-temp-name)
file-notify--test-desc
(file-notify-add-watch
file-notify--test-tmpdir
'(change) #'file-notify--test-event-handler)))
(should (file-notify-valid-p file-notify--test-desc))
(file-notify--test-with-events
(cond
;; w32notify does not raise `deleted' and `stopped'
;; events for the watched directory.
((string-equal (file-notify--test-library) "w32notify")
'(created changed deleted))
;; gvfs-monitor-dir on cygwin does not detect the
;; `created' event reliably.
((string-equal
(file-notify--test-library) "gvfs-monitor-dir.exe")
'((deleted stopped)
(created deleted stopped)))
;; There are two `deleted' events, for the file and for
;; the directory. Except for cygwin and kqueue. And
;; cygwin does not raise a `changed' event.
((eq system-type 'cygwin)
'(created deleted stopped))
((string-equal (file-notify--test-library) "kqueue")
'(created changed deleted stopped))
(t '(created changed deleted deleted stopped)))
(write-region
"any text" nil file-notify--test-tmpfile nil 'no-message)
(file-notify--test-read-event)
(delete-directory file-notify--test-tmpdir 'recursive))
;; After deleting the parent directory, the descriptor must
;; not be valid anymore.
(should-not (file-notify-valid-p file-notify--test-desc))
;; w32notify doesn't generate `stopped' events when the
;; parent directory is deleted, which doesn't provide a
;; chance for filenotify.el to remove the descriptor from
;; the internal hash table it maintains. So we must remove
;; the descriptor manually.
(if (string-equal (file-notify--test-library) "w32notify")
(file-notify--rm-descriptor file-notify--test-desc))
;; The environment shall be cleaned up.
(file-notify--test-cleanup-p))
;; The environment shall be cleaned up.
(file-notify--test-cleanup-p))
;; Cleanup.
(file-notify--test-cleanup)))
;; Cleanup.
(file-notify--test-cleanup))))
(file-notify--deftest-remote file-notify-test05-file-validity
"Check `file-notify-valid-p' via file notification for remote files.")
(ert-deftest file-notify-test06-dir-validity ()
"Check `file-notify-valid-p' for directories."
:tags (if (getenv "EMACS_EMBA_CI") '(:unstable))
(skip-unless (file-notify--test-local-enabled))
(unwind-protect
@ -1087,39 +1104,42 @@ delivered."
;; Cleanup.
(file-notify--test-cleanup))
(unwind-protect
(progn
(should
(setq file-notify--test-tmpfile
(make-temp-file "file-notify-test-parent" t)))
(should
(setq file-notify--test-desc
(file-notify-add-watch
file-notify--test-tmpfile '(change) #'ignore)))
(should (file-notify-valid-p file-notify--test-desc))
;; After deleting the directory, the descriptor must not be
;; valid anymore.
(delete-directory file-notify--test-tmpfile 'recursive)
(file-notify--wait-for-events
(file-notify--test-timeout)
(not (file-notify-valid-p file-notify--test-desc)))
(should-not (file-notify-valid-p file-notify--test-desc))
(if (string-equal (file-notify--test-library) "w32notify")
(file-notify--rm-descriptor file-notify--test-desc))
;; inotify on emba does not detect `deleted' and
;; `stopped' events of the directory.
(unless (and (string-equal (file-notify--test-library) "inotify")
(getenv "EMACS_EMBA_CI"))
(unwind-protect
(progn
(should
(setq file-notify--test-tmpfile
(make-temp-file "file-notify-test-parent" t)))
(should
(setq file-notify--test-desc
(file-notify-add-watch
file-notify--test-tmpfile '(change) #'ignore)))
(should (file-notify-valid-p file-notify--test-desc))
;; After deleting the directory, the descriptor must not be
;; valid anymore.
(delete-directory file-notify--test-tmpfile 'recursive)
(file-notify--wait-for-events
(file-notify--test-timeout)
(not (file-notify-valid-p file-notify--test-desc)))
(should-not (file-notify-valid-p file-notify--test-desc))
(if (string-equal (file-notify--test-library) "w32notify")
(file-notify--rm-descriptor file-notify--test-desc))
;; The environment shall be cleaned up.
(file-notify--test-cleanup-p))
;; The environment shall be cleaned up.
(file-notify--test-cleanup-p))
;; Cleanup.
(file-notify--test-cleanup)))
;; Cleanup.
(file-notify--test-cleanup))))
(file-notify--deftest-remote file-notify-test06-dir-validity
"Check `file-notify-valid-p' via file notification for remote directories.")
(ert-deftest file-notify-test07-many-events ()
"Check that events are not dropped."
:tags (if (getenv "EMACS_EMBA_CI")
'(:expensive-test :unstable) '(:expensive-test))
:tags '(:expensive-test)
(skip-unless (file-notify--test-local-enabled))
(should
@ -1178,7 +1198,9 @@ delivered."
(file-notify--test-read-event)
(delete-file file)))
(delete-directory file-notify--test-tmpfile)
(if (string-equal (file-notify--test-library) "w32notify")
(if (or (string-equal (file-notify--test-library) "w32notify")
(and (string-equal (file-notify--test-library) "inotify")
(getenv "EMACS_EMBA_CI")))
(file-notify--rm-descriptor file-notify--test-desc))
;; The environment shall be cleaned up.
@ -1278,8 +1300,7 @@ descriptors that were issued when registering the watches. This
test caters for the situation in bug#22736 where the callback for
the directory received events for the file with the descriptor of
the file watch."
:tags (if (getenv "EMACS_EMBA_CI")
'(:expensive-test :unstable) '(:expensive-test))
:tags '(:expensive-test)
(skip-unless (file-notify--test-local-enabled))
;; A directory to be watched.
@ -1388,11 +1409,20 @@ the file watch."
;; w32notify does not raise `deleted' and `stopped'
;; events for the watched directory.
((string-equal (file-notify--test-library) "w32notify") '())
;; inotify on emba does not detect `deleted' and
;; `stopped' events of the directory.
((and (string-equal (file-notify--test-library) "inotify")
(getenv "EMACS_EMBA_CI"))
'())
(t '(deleted stopped))))))
(delete-directory file-notify--test-tmpfile 'recursive))
(should-not (file-notify-valid-p file-notify--test-desc1))
(should-not (file-notify-valid-p file-notify--test-desc2))
(when (string-equal (file-notify--test-library) "w32notify")
(unless (and (string-equal (file-notify--test-library) "inotify")
(getenv "EMACS_EMBA_CI"))
(should-not (file-notify-valid-p file-notify--test-desc1))
(should-not (file-notify-valid-p file-notify--test-desc2)))
(when (or (string-equal (file-notify--test-library) "w32notify")
(and (string-equal (file-notify--test-library) "inotify")
(getenv "EMACS_EMBA_CI")))
(file-notify--rm-descriptor file-notify--test-desc1)
(file-notify--rm-descriptor file-notify--test-desc2))