From ef1747d947e11bda3503547a0261d496248a4be0 Mon Sep 17 00:00:00 2001 From: Joao Tavora Date: Thu, 7 Nov 2013 00:49:52 +0000 Subject: [PATCH] fix: must sometimes chain object to the end of parent of previous object --- snippet-tests.el | 25 +++++++++++++++++++++++++ snippet.el | 6 ++++++ 2 files changed, 31 insertions(+) diff --git a/snippet-tests.el b/snippet-tests.el index 6f61606..d97f2a8 100644 --- a/snippet-tests.el +++ b/snippet-tests.el @@ -48,6 +48,18 @@ (&field 3 "field"))) (&mirror 3 (concat ", nested mirroring: " field-string)))) + (more-nesting ("a " + (&field 1 (&nested + "'" + (&field 2 "rain") + (&mirror 2 (apply #'string + (reverse + (string-to-list + field-string)))) + "'")) + (&field 3 " and a field:") + " " + (&mirror 1))) (printf ("printf (\"" (&field 1 "%s") (&mirror 1 (if (string-match "%" field-string) "\"," "\")")) @@ -156,6 +168,19 @@ (ert-simulate-command '((lambda () (interactive) (insert "foo")))) (should (equal (buffer-string) "a nested foo, nested mirroring: foo")))) +(ert-deftest more-nesting () + (with-temp-buffer + (snippet--insert-test-snippet 'more-nesting) + (should (equal (buffer-string) "a 'rainniar' and a field: 'rainniar'")) + (ert-simulate-command '((lambda () (interactive) (insert "bar")))) + (should (equal (buffer-string) "a bar and a field: bar")) + (ert-simulate-command '(snippet-next-field)) + (ert-simulate-command '((lambda () (interactive) (insert "baz")))) + (should (equal (buffer-string) "a barbaz bar")) + (ert-simulate-command '(snippet-prev-field)) + (ert-simulate-command '((lambda () (interactive) (insert "foo")))) + (should (equal (buffer-string) "a foobarbaz foobar")))) + (ert-deftest printf-expansion () (with-temp-buffer (snippet--insert-test-snippet 'printf) diff --git a/snippet.el b/snippet.el index ec6c7f8..8b00def 100644 --- a/snippet.el +++ b/snippet.el @@ -270,6 +270,12 @@ meaning is not decided yet" (cond ((and parent (= (point) (snippet--object-start parent))) (snippet--object-start parent)) + ((and prev + (snippet--object-parent prev) + (= (point) (snippet--object-end + (snippet--object-parent prev)))) + (snippet--object-end + (snippet--object-parent prev))) ((and prev (= (point) (snippet--object-end prev))) (snippet--object-end prev))