]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix relocation with named cell referred to by a one-symbol formula.
authorVincent Belaïche <vincentb1@users.sourceforge.net>
Mon, 17 Jul 2017 18:54:20 +0000 (20:54 +0200)
committerVincent Belaïche <vincentb1@users.sourceforge.net>
Mon, 17 Jul 2017 18:54:20 +0000 (20:54 +0200)
* lisp/ses.el (ses-replace-name-in-formula): Fix bug for it to
work also with one symbol formulas.

* test/lisp/ses-tests.el
(ses-tests-renaming-cell-with-one-symbol-formula): Add new
test for renaming with relocating a one symbol formula.

lisp/ses.el
test/lisp/ses-tests.el

index 2e214348eb91be1e0c25179831f40036bad16429..ed5e166d9521fc2af3e2cbb6070d8876b0826aec 100644 (file)
@@ -3634,8 +3634,12 @@ highlighted range in the spreadsheet."
 
 (defun ses-replace-name-in-formula (formula old-name new-name)
   (let ((new-formula formula))
-    (unless (and (consp formula)
-                (eq (car-safe formula) 'quote))
+    (cond
+     ((eq (car-safe formula) 'quote))
+     ((symbolp formula)
+      (if (eq formula old-name)
+          (setq new-formula new-name)))
+     ((consp formula)
       (while formula
        (let ((elt (car-safe formula)))
          (cond
@@ -3644,8 +3648,8 @@ highlighted range in the spreadsheet."
           ((and (symbolp elt)
                 (eq (car-safe formula) old-name))
            (setcar formula new-name))))
-       (setq formula (cdr formula))))
-    new-formula))
+       (setq formula (cdr formula)))))
+  new-formula))
 
 (defun ses-rename-cell (new-name &optional cell)
   "Rename current cell."
index 196f710072139777b0db0b7d612b5e259ef0cfeb..add94ae98f60af6506244bdde3d68bbbc21bcc62 100644 (file)
@@ -106,6 +106,28 @@ renaming A1 to `foo' makes `foo' value equal to 2."
       (should (equal (ses-cell-formula 1 0) '(1+ foo)))
       (should (eq A2 2)))))
 
+(ert-deftest ses-tests-renaming-cell-with-one-symbol-formula ()
+  "Check that setting A1 to 1 and A2 to A1, and then renaming A1
+to `foo' makes `foo' value equal to 1. Then set A1 to 2 and check
+that `foo' becomes 2."
+  (let ((ses-initial-size '(3 . 1)))
+    (with-temp-buffer
+      (ses-mode)
+      (dolist (c '((0 0 1) (1 0 A1)))
+        (apply 'funcall-interactively 'ses-edit-cell c))
+      (ses-command-hook); deferred recalc
+      (ses-rename-cell 'foo (ses-get-cell 0 0))
+      (ses-command-hook); deferred recalc
+      (should-not  (local-variable-p 'A1))
+      (should (eq foo 1))
+      (should (equal (ses-cell-formula 1 0) 'foo))
+      (should (eq A2 1))
+      (funcall-interactively 'ses-edit-cell 0 0 2)
+      (ses-command-hook); deferred recalc
+      (should (eq A2 2))
+      (should (eq foo 2)))))
+
+
 ;; ROW INSERTION TESTS
 ;; ======================================================================