]> code.delx.au - gnu-emacs/blobdiff - lisp/url/url-future.el
Merge from origin/emacs-24
[gnu-emacs] / lisp / url / url-future.el
index 2798f936f21487785f52f6239d60efdeac6936f4..f611c817231d18de202db78d6d6b29715629fb70 100644 (file)
@@ -1,6 +1,6 @@
 ;;; url-future.el --- general futures facility for url.el
 
-;; Copyright (C) 2011-201 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
 
 ;; Author: Teodor Zlatanov <tzz@lifelogs.com>
 ;; Keywords: data
 ;; So, to get the value:
 ;; (when (url-future-completed-p future) (url-future-value future))
 
-;; See the ERT tests and the code for further details.
+;; See `url-future-tests' and the code below for further details.
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
-(eval-when-compile (require 'ert))
+(eval-when-compile (require 'cl-lib))
 
-(defstruct url-future callback errorback status value)
+(cl-defstruct url-future callback errorback status value)
 
-(defmacro url-future-done-p (url-future)
-  `(url-future-status ,url-future))
+(define-inline url-future-done-p (url-future)
+  (inline-quote (url-future-status ,url-future)))
 
-(defmacro url-future-completed-p (url-future)
-  `(eq (url-future-status ,url-future) t))
+(define-inline url-future-completed-p (url-future)
+  (inline-quote (eq (url-future-status ,url-future) t)))
 
-(defmacro url-future-errored-p (url-future)
-  `(eq (url-future-status ,url-future) 'error))
+(define-inline url-future-errored-p (url-future)
+  (inline-quote (eq (url-future-status ,url-future) 'error)))
 
-(defmacro url-future-cancelled-p (url-future)
-  `(eq (url-future-status ,url-future) 'cancel))
+(define-inline url-future-cancelled-p (url-future)
+  (inline-quote (eq (url-future-status ,url-future) 'cancel)))
 
 (defun url-future-finish (url-future &optional status)
   (if (url-future-done-p url-future)
@@ -85,7 +84,9 @@
             (setf (url-future-value url-future)
                   (funcall ff))
           (error (url-future-errored url-future catcher)))
-        (url-future-value url-future)))
+        ;; Unused return value.
+;;;        (url-future-value url-future)
+        ))
     (if (url-future-errored-p url-future)
         url-future
       (url-future-finish url-future))))
       (signal 'error 'url-future-already-done)
     (url-future-finish url-future 'cancel)))
 
-(ert-deftest url-future-test ()
-  (let* (saver
-        (text "running future")
-         (good (make-url-future :value (lambda () (format text))
-                                :callback (lambda (f) (set 'saver f))))
-         (bad (make-url-future :value (lambda () (/ 1 0))
-                               :errorback (lambda (&rest d) (set 'saver d))))
-         (tocancel (make-url-future :value (lambda () (/ 1 0))
-                                    :callback (lambda (f) (set 'saver f))
-                                    :errorback (lambda (&rest d)
-                                                 (set 'saver d)))))
-    (should (equal good (url-future-call good)))
-    (should (equal good saver))
-    (should (equal text (url-future-value good)))
-    (should (url-future-completed-p good))
-    (should-error (url-future-call good))
-    (setq saver nil)
-    (should (equal bad (url-future-call bad)))
-    (should-error (url-future-call bad))
-    (should (equal saver (list bad '(arith-error))))
-    (should (url-future-errored-p bad))
-    (setq saver nil)
-    (should (equal (url-future-cancel tocancel) tocancel))
-    (should-error (url-future-call tocancel))
-    (should (null saver))
-    (should (url-future-cancelled-p tocancel))))
-
 (provide 'url-future)
 ;;; url-future.el ends here