summaryrefslogtreecommitdiff
path: root/test/lisp/emacs-lisp/eieio-tests
diff options
context:
space:
mode:
authorVitalie Spinu <spinuvit@gmail.com>2019-05-08 11:12:29 +0200
committerVitalie Spinu <spinuvit@gmail.com>2019-05-08 11:12:29 +0200
commit1c6484e975e8b0e50d22980d02a3be6c9bf93b49 (patch)
tree468e78c685dacbf98d84e7c8a76762ae03c31622 /test/lisp/emacs-lisp/eieio-tests
parent37436fe6d32539b03d1c4dbd535d5409bef5ac09 (diff)
downloademacs-1c6484e975e8b0e50d22980d02a3be6c9bf93b49.tar.gz
Fix incorrect cloning of eieio-instance-inheritor objects (Bug#34840)
* lisp/emacs-lisp/eieio-base.el (clone): Unbound slots of eieio-instance-inheritor objects as documented in the docs string and implemented in the original eieio implementation.
Diffstat (limited to 'test/lisp/emacs-lisp/eieio-tests')
-rw-r--r--test/lisp/emacs-lisp/eieio-tests/eieio-tests.el41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
index 0c7b6b71c31..1084c99dd5c 100644
--- a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
+++ b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
@@ -696,6 +696,17 @@ Do not override for `prot-2'."
(setq eitest-II3 (clone eitest-II2 "eitest-II3 Test."))
(oset eitest-II3 slot3 'penguin)
+ ;; Test that slots are non-initialized slots are unbounded
+ (oref eitest-II2 slot1)
+ (should (slot-boundp eitest-II2 'slot1))
+ (should-not (slot-boundp eitest-II2 'slot2))
+ (should-not (slot-boundp eitest-II2 'slot3))
+ (should-not (slot-boundp eitest-II3 'slot2))
+ (should-not (slot-boundp eitest-II3 'slot1))
+ (should-not (slot-boundp eitest-II3 'slot2))
+ (should (eieio-instance-inheritor-slot-boundp eitest-II3 'slot2))
+ (should (slot-boundp eitest-II3 'slot3))
+
;; Test level 1 inheritance
(should (eq (oref eitest-II3 slot1) 'moose))
;; Test level 2 inheritance
@@ -913,6 +924,36 @@ Subclasses to override slot attributes.")
(should (string= "aa-1" (oref D object-name)))
(should (string= "aa-2" (oref E object-name)))))
+(defclass TII (eieio-instance-inheritor)
+ ((a :initform 1 :initarg :a)
+ (b :initarg :b)
+ (c :initarg :c))
+ "Instance Inheritor test class.")
+
+(ert-deftest eieio-test-39-clone-instance-inheritor-with-args ()
+ (let* ((A (TII))
+ (B (clone A :b "bb"))
+ (C (clone B :a "aa")))
+
+ (should (string= "aa" (oref C :a)))
+ (should (string= "bb" (oref C :b)))
+
+ (should (slot-boundp A :a))
+ (should-not (slot-boundp A :b))
+ (should-not (slot-boundp A :c))
+
+ (should-not (slot-boundp B :a))
+ (should (slot-boundp B :b))
+ (should-not (slot-boundp A :c))
+
+ (should (slot-boundp C :a))
+ (should-not (slot-boundp C :b))
+ (should-not (slot-boundp C :c))
+
+ (should (eieio-instance-inheritor-slot-boundp C :a))
+ (should (eieio-instance-inheritor-slot-boundp C :b))
+ (should-not (eieio-instance-inheritor-slot-boundp C :c))))
+
(provide 'eieio-tests)