summaryrefslogtreecommitdiff
path: root/test/lisp/emacs-lisp/eieio-tests
diff options
context:
space:
mode:
authorNoam Postavsky <npostavs@gmail.com>2019-05-27 19:05:56 -0400
committerNoam Postavsky <npostavs@gmail.com>2019-05-30 18:46:07 -0400
commit5f01af6c8e0f7355f7a99a80ff32369071f65eda (patch)
treef65280a7140425f0db5ad19782c699a0def2bed5 /test/lisp/emacs-lisp/eieio-tests
parent4b24b0185d910d756e85ecdc30f49c414577050e (diff)
downloademacs-5f01af6c8e0f7355f7a99a80ff32369071f65eda.tar.gz
Use plain symbols for eieio type descriptors (Bug#29220)
Since Emacs 26, eieio objects use a class record (with circular references) as the type descriptor of the object record. This causes problems when reading back an object from a string, because the class record is not `eq' to the canonical one (which means that read objects don't satisfy the foo-p predicate). * lisp/emacs-lisp/eieio.el (make-instance): As a (partial) fix, set the record's type descriptor to a plain symbol for the type descriptor when eieio-backward-compatibility is non-nil (the default). * lisp/emacs-lisp/eieio-core.el (eieio--object-class): Call eieio--class-object on the type tag when eieio-backward-compatibility is non-nil. (eieio-object-p): Use eieio--object-class instead of eieio--object-class-tag. * test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el (eieio-test-persist-hash-and-vector) (eieio-test-persist-interior-lists): Make into functions. (eieio-persist-hash-and-vector-backward-compatibility) (eieio-persist-hash-and-vector-no-backward-compatibility) (eieio-test-persist-interior-lists-backward-compatibility) (eieio-test-persist-interior-lists-no-backward-compatibility): New tests which call them, eieio-backward-compatibility let-bound.
Diffstat (limited to 'test/lisp/emacs-lisp/eieio-tests')
-rw-r--r--test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el28
1 files changed, 22 insertions, 6 deletions
diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el b/test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el
index dfaa031844f..b87914c75e7 100644
--- a/test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el
+++ b/test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el
@@ -277,7 +277,7 @@ persistent class.")
:type vector
:initarg :random-vector)))
-(ert-deftest eieio-test-persist-hash-and-vector ()
+(defun eieio-test-persist-hash-and-vector ()
(let* ((jane (make-instance 'person :name "Jane"))
(bob (make-instance 'person :name "Bob"))
(hans (make-instance 'person :name "Hans"))
@@ -297,10 +297,18 @@ persistent class.")
(aset (car (slot-value class 'janitors)) 1 hans)
(aset (nth 1 (slot-value class 'janitors)) 1 dierdre)
(unwind-protect
- ;; FIXME: This should not error.
- (should-error (persist-test-save-and-compare class))
+ (persist-test-save-and-compare class)
(delete-file (oref class file)))))
+(ert-deftest eieio-persist-hash-and-vector-backward-compatibility ()
+ (let ((eieio-backward-compatibility t)) ; The default.
+ (eieio-test-persist-hash-and-vector)))
+
+(ert-deftest eieio-persist-hash-and-vector-no-backward-compatibility ()
+ :expected-result :failed ;; Bug#29220.
+ (let ((eieio-backward-compatibility nil))
+ (eieio-test-persist-hash-and-vector)))
+
;; Extra quotation of lists inside other objects (Gnus registry), also
;; bug#29220.
@@ -315,7 +323,7 @@ persistent class.")
:initarg :htab
:type hash-table)))
-(ert-deftest eieio-test-persist-interior-lists ()
+(defun eieio-test-persist-interior-lists ()
(let* ((thing (make-instance
'eieio-container
:vec [nil]
@@ -335,8 +343,16 @@ persistent class.")
(setf (nth 2 (cadar alst)) john
(nth 2 (cadadr alst)) alexie)
(unwind-protect
- ;; FIXME: Should not error.
- (should-error (persist-test-save-and-compare thing))
+ (persist-test-save-and-compare thing)
(delete-file (slot-value thing 'file)))))
+(ert-deftest eieio-test-persist-interior-lists-backward-compatibility ()
+ (let ((eieio-backward-compatibility t)) ; The default.
+ (eieio-test-persist-interior-lists)))
+
+(ert-deftest eieio-test-persist-interior-lists-no-backward-compatibility ()
+ :expected-result :failed ;; Bug#29220.
+ (let ((eieio-backward-compatibility nil))
+ (eieio-test-persist-interior-lists)))
+
;;; eieio-test-persist.el ends here