diff options
author | Vitalie Spinu <spinuvit@gmail.com> | 2019-05-08 11:12:29 +0200 |
---|---|---|
committer | Vitalie Spinu <spinuvit@gmail.com> | 2019-05-08 11:12:29 +0200 |
commit | 1c6484e975e8b0e50d22980d02a3be6c9bf93b49 (patch) | |
tree | 468e78c685dacbf98d84e7c8a76762ae03c31622 /test/lisp/emacs-lisp/eieio-tests | |
parent | 37436fe6d32539b03d1c4dbd535d5409bef5ac09 (diff) | |
download | emacs-1c6484e975e8b0e50d22980d02a3be6c9bf93b49.tar.gz emacs-1c6484e975e8b0e50d22980d02a3be6c9bf93b49.tar.bz2 emacs-1c6484e975e8b0e50d22980d02a3be6c9bf93b49.zip |
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.el | 41 |
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) |