diff options
Diffstat (limited to 'elpa/irony-20220110.849/server/test/elisp/irony-iotask.el')
-rw-r--r-- | elpa/irony-20220110.849/server/test/elisp/irony-iotask.el | 249 |
1 files changed, 0 insertions, 249 deletions
diff --git a/elpa/irony-20220110.849/server/test/elisp/irony-iotask.el b/elpa/irony-20220110.849/server/test/elisp/irony-iotask.el deleted file mode 100644 index 7ef213b..0000000 --- a/elpa/irony-20220110.849/server/test/elisp/irony-iotask.el +++ /dev/null @@ -1,249 +0,0 @@ -;; -*-no-byte-compile: t; -*- -(load (concat (file-name-directory (or load-file-name - buffer-file-name)) - "test-config")) - -;; load irony-iotask -;; -;; XXX: No idea why this is necessary, test-config already adds the directory to -;; the load-path so irony is found... -(unless (require 'irony-iotask nil t) - (let ((irony-iotask-dir (expand-file-name "../../.." test-dir))) - (add-to-list 'load-path irony-iotask-dir) - (require 'irony-iotask))) - -(defun irony-iotask-echo-process-exit-filter (process output) - (when (buffer-live-p (process-buffer process)) - (with-current-buffer (process-buffer process) - (goto-char (process-mark process)) - (insert output) - (set-marker (process-mark process) (point)) - (when (>= (buffer-size) (length "exit\n")) - (should (string= (buffer-string) "exit\n")) - (erase-buffer))))) - -;; Note: these tests use process communication with the standard I/O streams. -;; The subprocess used for this communication is Emacs. -;; -;; The following article provides useful information for using Elisp as a -;; scripting language, Emacs as an interpreter, it details how the standard I/O -;; streams works in Elisp scripts: -;; - http://www.lunaryorn.com/2014/08/12/emacs-script-pitfalls.html - -(defmacro irony-iotask/with-echo-process (&rest body) - "Start an Emacs process that runs the given PROCESS-SCRIPT. - -The process is setup with `irony-iotask-setup-process'. - -It's possible to schedule some iotasks in the BODY for testing. - -There is an exposed variable named `process' available for use in -BODY. - -Elisp is used as a scripting language because it should be -available on all OSes irony-iotask support." - (declare (indent 1)) - `(let ((process-connection-type nil) - (process-adaptive-read-buffering nil) - process) - (setq process - (start-process "emacs-irony-test" - "*emacs-irony-test*" - (expand-file-name invocation-name - invocation-directory) - "-Q" - "--batch" - "--eval" - (prin1-to-string - '(let ((msg)) - (while (not (equal msg "exit")) - (setq msg (read-from-minibuffer "")) - (message msg)))))) - (unwind-protect - (progn - (irony-iotask-setup-process process) - ,@body) - ;; the iotask process filter does not clean the process buffer - ;; at the end of a request, but at the begining of a new one - (with-current-buffer (process-buffer process) - (erase-buffer)) - (set-process-filter process #'irony-iotask-echo-process-exit-filter) - (process-send-string process "exit\n") - ;; wait for the process to finish normally, or kill it if it doesn't - (with-timeout (1 (kill-process process)) - (while (process-live-p process) - (sit-for 0.05))) - ;; start with a clean buffer, - ;; Emacs 24.3 seems to keep some - (kill-buffer (process-buffer process)) - (delete-process process)))) - -;; irony-iotask-result - -(ert-deftest irony-iotask-result/ready-p-value () - (let ((result (irony-iotask-result-create))) - (should-not (irony-iotask-result-valid-p result)) - (irony-iotask-result-set-value result 1) - (should (irony-iotask-result-valid-p result)))) - -(ert-deftest irony-iotask-result/ready-p-error () - (let ((result (irony-iotask-result-create))) - (should-not (irony-iotask-result-valid-p result)) - (irony-iotask-result-set-error result 'irony-iotask-error (list "blah")) - (should (irony-iotask-result-valid-p result)))) - -(ert-deftest irony-iotask-result/set-value () - (let ((result (irony-iotask-result-create))) - (irony-iotask-result-set-value result 'blah) - (should (eq (irony-iotask-result-get result) 'blah)))) - -(irony--define-error 'irony-iotask-result/test-error - "Irony I/O task sample error") - -(ert-deftest irony-iotask-result/set-error () - (let ((result (irony-iotask-result-create))) - (irony-iotask-result-set-error result 'irony-iotask-result/test-error) - (should-error (irony-iotask-result-get result) - :type 'irony-iotask-result/test-error))) - -(ert-deftest irony-iotask-result/set-error-data () - (let ((result (irony-iotask-result-create))) - (irony-iotask-result-set-error result - 'irony-iotask-result/test-error - 'foo 'bar 'baz 'qux) - (condition-case err - (irony-iotask-result-get result) - (irony-iotask-result/test-error - (should (equal (cdr err) '(foo bar baz qux))))))) - -(ert-deftest irony-iotask-result/get-empty () - (let ((result (irony-iotask-result-create))) - (should-error (irony-iotask-result-get result) - :type 'irony-iotask-result-get-error))) - -;; task - -(irony-iotask-define-task irony-iotask/task-start-t - "doc" - :start (lambda (&optional value) - (irony-iotask-set-result (or value 42)))) - -(ert-deftest irony-iotask/task-start/simple () - (let ((task (irony-iotask-package-task irony-iotask/task-start-t))) - (irony-iotask/with-echo-process - (should (equal 42 (irony-iotask-run process task)))))) - -(ert-deftest irony-iotask/task-start/with-arguments () - (let ((task (irony-iotask-package-task irony-iotask/task-start-t 43))) - (irony-iotask/with-echo-process - (should (equal 43 (irony-iotask-run process task)))))) - -(irony-iotask-define-task irony-iotask/task-update-t - "doc" - :start (lambda (&optional hello) - (irony-iotask-send-string (format "%s\n" (or hello "hello")))) - :update (lambda (&optional hello) - (setq hello (or hello "hello")) - (when (string= (buffer-string) (format "%s\n" hello)) - (irony-iotask-set-result (format "%s ok" hello))))) - -(ert-deftest irony-iotask-schedule/task-update/simple () - (let ((task (irony-iotask-package-task irony-iotask/task-update-t))) - (irony-iotask/with-echo-process - (should (string= "hello ok" (irony-iotask-run process task)))))) - -(ert-deftest irony-iotask-schedule/task-update/with-arguments () - (let ((task (irony-iotask-package-task irony-iotask/task-update-t "bonjour"))) - (irony-iotask/with-echo-process - (should (string= "bonjour ok" (irony-iotask-run process task)))))) - -(irony-iotask-define-task irony-iotask/task-invalid-msg-t - "doc" - :start (lambda () - (irony-iotask-send-string "ping\n")) - :update (lambda () - (when (string= (buffer-string) "ping\n") - (throw 'invalid-msg t)))) - -(ert-deftest irony-iotask-schedule/task-update/invalid-msg () - (let ((task (irony-iotask-package-task irony-iotask/task-invalid-msg-t))) - (irony-iotask/with-echo-process - (should-error (irony-iotask-run process task) - :type 'irony-iotask-bad-data)))) - -(ert-deftest irony-iotask-chain/simple () - (let ((task (irony-iotask-chain - (irony-iotask-package-task irony-iotask/task-update-t "hi") - (irony-iotask-package-task irony-iotask/task-update-t "hej")))) - (irony-iotask/with-echo-process - (should (equal "hej ok" (irony-iotask-run process task)))))) - -(defvar irony-iotask/task-finish-var nil) -(defvar irony-iotask/task-on-var nil) -(irony-iotask-define-task irony-iotask/task-finish-t - "doc" - :start (lambda () - (irony-iotask-put :text "how") - (irony-iotask-send-string "hello\n")) - :update (lambda () - (cond - ((string= (buffer-string) "hello\n") - (irony-iotask-put :text (concat (irony-iotask-get :text) " are")) - (irony-iotask-set-result t)) - ((>= (buffer-size) (1+ (length "hello\n"))) - (throw 'invalid-msg t)))) - :on-success (lambda () - (setq irony-iotask/task-on-var "success")) - :finish (lambda () - (setq irony-iotask/task-finish-var (concat (irony-iotask-get :text) - " you?")))) - -(ert-deftest irony-iotask-schedule/task-finish/simple () - (let ((task (irony-iotask-package-task irony-iotask/task-finish-t))) - (irony-iotask/with-echo-process - (setq irony-iotask/task-finish-var nil) - (irony-iotask-run process task) - (should (equal "how are you?" irony-iotask/task-finish-var))))) - -(ert-deftest irony-iotask-schedule/task-on-success/simple () - (let ((task (irony-iotask-package-task irony-iotask/task-finish-t))) - (irony-iotask/with-echo-process - (setq irony-iotask/task-on-var nil) - (irony-iotask-run process task) - (should (equal "success" irony-iotask/task-on-var))))) - -(irony-iotask-define-task irony-iotask/task-on-error-t - "doc" - :start (lambda () - (irony-iotask-set-error 'irony-iotask-error)) - :on-error (lambda () - (setq irony-iotask/task-on-var "error"))) - -(ert-deftest irony-iotask-schedule/task-on-error/simple () - (let ((task (irony-iotask-package-task irony-iotask/task-on-error-t))) - (irony-iotask/with-echo-process - (setq irony-iotask/task-on-var nil) - (ignore-errors - (irony-iotask-run process task)) - (should (equal "error" irony-iotask/task-on-var))))) - -(ert-deftest irony-iotask-schedule/callback/recalls-schedule () - (let ((task (irony-iotask-package-task irony-iotask/task-update-t "a"))) - (irony-iotask/with-echo-process - (lexical-let ((run-process process) - results) - (irony-iotask-schedule process task - (lambda (result) - (setq results (list result)) - (irony-iotask-schedule - run-process - (irony-iotask-package-task - irony-iotask/task-update-t "b") - (lambda (result) - (setq results (append results (list result))))))) - (should (with-local-quit - (while (< (length results) 2) - (accept-process-output process 0.05)) - t)) - (should (string= "a ok" (irony-iotask-result-get (nth 0 results)))) - (should (string= "b ok" (irony-iotask-result-get (nth 1 results)))))))) |