[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/tree-sitter 33f7e10a29 26/26: Add treesit test for previous chan
From: |
Yuan Fu |
Subject: |
feature/tree-sitter 33f7e10a29 26/26: Add treesit test for previous change |
Date: |
Thu, 16 Jun 2022 14:53:53 -0400 (EDT) |
branch: feature/tree-sitter
commit 33f7e10a29dad475f7872d6af87ecefaccdb55fc
Author: Yuan Fu <yuan@debian-BULLSEYE-live-builder-AMD64>
Commit: Yuan Fu <yuan@debian-BULLSEYE-live-builder-AMD64>
Add treesit test for previous change
* test/src/treesit-tests.el (treesit-cross-boundary): New test.
---
test/src/treesit-tests.el | 83 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 83 insertions(+)
diff --git a/test/src/treesit-tests.el b/test/src/treesit-tests.el
index 32971fbacb..416329d94d 100644
--- a/test/src/treesit-tests.el
+++ b/test/src/treesit-tests.el
@@ -223,6 +223,89 @@
(treesit-parser-root-node parser))
"(document (array (number)))")))))
+(ert-deftest treesit-cross-boundary ()
+ "Tests for cross-boundary edits.
+Cross-boundary means crossing visible_beg and visible_end. We
+don't test if parser parses correctly, instead we just check
+edits like this don't produce assertion errors. (I inserted a
+bunch of assertions that checks e.g. visible_beg <=
+visible_end.)"
+ (with-temp-buffer
+ (let (parser root-node pattern doc-node object-node pair-node)
+ (progn
+ (insert "xxx[1,{\"name\": \"Bob\"},2,3]xxx")
+ (narrow-to-region (+ (point-min) 3) (- (point-max) 3))
+ (setq parser (treesit-parser-create 'json))
+ ;; Now visible_beg/end = visible boundary.
+ (setq root-node (treesit-parser-root-node parser)))
+ ;; Now parser knows the content of the visible region.
+ (widen)
+ ;; Now visible_beg/end don't change, but visible region expanded.
+ (delete-region 1 7)
+ ;; (1) This change is across visible_beg. I expect
+ ;; ts_record_change to receive (start=1, old_end=7, new_end=1).
+ (treesit-parser-root-node parser)
+ ;; Above form forces a parse which calls
+ ;; `ts_ensure_position_synced'. Now visible_beg/end matches the
+ ;; visible region (whole buffer). We want to test that this
+ ;; doesn't cause assertion error.
+
+ (should (equal "{\"name\": \"Bob\"},2,3]xxx" (buffer-string)))
+ (narrow-to-region 1 16)
+ (should (equal "{\"name\": \"Bob\"}" (buffer-string)))
+ (treesit-parser-root-node parser)
+ ;; Call `ts_ensure_position_synced' again to update visible_beg/end.
+ (widen)
+ (goto-char 14)
+ (insert "by")
+ ;; (2) This change is inside [visible_beg, visible_end].
+ (should (equal "{\"name\": \"Bobby\"},2,3]xxx" (buffer-string)))
+ (delete-region 14 23)
+ ;; This delete is across visible_end.
+ (should (equal "{\"name\": \"Bobxxx" (buffer-string)))
+ (treesit-parser-root-node parser)
+ ;; visible_beg/end synced.
+
+ (narrow-to-region 3 7)
+ (should (equal "name" (buffer-string)))
+ (treesit-parser-root-node parser)
+ ;; visible_beg/end synced.
+ (widen)
+ (goto-char (point-min))
+ (insert "zzz")
+ (should (equal "zzz{\"name\": \"Bobxxx" (buffer-string)))
+ ;; (3) Test inserting before visible_beg.
+ (treesit-parser-root-node parser)
+ ;; visible_beg/end synced.
+
+ (narrow-to-region 4 11)
+ (should (equal "{\"name\"" (buffer-string)))
+ (treesit-parser-root-node parser)
+ ;; visible_beg/end synced.
+ (widen)
+ (goto-char (point-max))
+ (insert "yyy")
+ ;; (4) This change is after visible_end.
+ (treesit-parser-root-node parser)
+ ;; Sync up visible_beg/end.
+ (should (equal "zzz{\"name\": \"Bobxxxyyy" (buffer-string)))
+
+ (narrow-to-region 1 17)
+ (should (equal "zzz{\"name\": \"Bob" (buffer-string)))
+ (treesit-parser-root-node parser)
+ ;; Sync up visible_beg/end.
+ (widen)
+ (delete-region 13 (point-max))
+ (treesit-parser-root-node parser)
+ ;; Sync up visible_beg/end.
+ (should (equal "zzz{\"name\": " (buffer-string)))
+ ;; Ideally we want to also test the case where we delete and
+ ;; insert simultaneously, but the only such use is in
+ ;; `casify_region', all others either only inserts or only
+ ;; deletes. I'll leave it to someone to try to write a test
+ ;; that calls that.
+ )))
+
(ert-deftest treesit-range ()
"Tests if range works."
(with-temp-buffer
- feature/tree-sitter a8428b917d 09/26: * src/treesit.c (Ftreesit_query_p): New function., (continued)
- feature/tree-sitter a8428b917d 09/26: * src/treesit.c (Ftreesit_query_p): New function., Yuan Fu, 2022/06/16
- feature/tree-sitter 316bdc334c 15/26: Add manual for treesit-traverse-forward and friends, Yuan Fu, 2022/06/16
- feature/tree-sitter 8aa04aac65 07/26: ; * lisp/treesit.el (treesit-defun-query): Improve docstring., Yuan Fu, 2022/06/16
- feature/tree-sitter e171ef933f 10/26: Support compiled queries in treesit-query-capture, Yuan Fu, 2022/06/16
- feature/tree-sitter b3de8850e0 06/26: Use the up-only parameter in treesit navigation functions, Yuan Fu, 2022/06/16
- feature/tree-sitter 016e4ca7a7 12/26: ; * doc/lispref/parsing.texi: Minor fix-up., Yuan Fu, 2022/06/16
- feature/tree-sitter a7288594f4 14/26: Change treesit-check-query and mention it in documentation, Yuan Fu, 2022/06/16
- feature/tree-sitter 0332b8e2c5 21/26: ; * src/treesit.c (ts_check_buffer_size): Improve error message., Yuan Fu, 2022/06/16
- feature/tree-sitter c5b172ec58 03/26: * configure.ac (HAVE_TREE_SITTER): Not set TREE_SITTER_LIBS., Yuan Fu, 2022/06/16
- feature/tree-sitter bd1b27b7c7 23/26: ; Minor optimization in treesit range function, Yuan Fu, 2022/06/16
- feature/tree-sitter 33f7e10a29 26/26: Add treesit test for previous change,
Yuan Fu <=
- feature/tree-sitter 184d212042 16/26: Merge branch 'feature/tree-sitter-depth-control' into feature/tree-sitter, Yuan Fu, 2022/06/16
- feature/tree-sitter b162faba0b 18/26: Fix compile warnings and errors in treesit.c, Yuan Fu, 2022/06/16
- feature/tree-sitter d729e3e3fc 19/26: * src/treesit.c (ts_check_range_argument): Check for point-min/max., Yuan Fu, 2022/06/16
- feature/tree-sitter 98bfb24081 17/26: Merge remote-tracking branch 'savannah/master' into feature/tree-sitter, Yuan Fu, 2022/06/16
- feature/tree-sitter 7cee82a91d 24/26: Fix treesit function ts_record_change and friends, Yuan Fu, 2022/06/16
- feature/tree-sitter d6b00f7ed9 20/26: ; * src/treesit.c (ts_read_buffer): Clarify comments., Yuan Fu, 2022/06/16
- feature/tree-sitter dd65d1c396 25/26: Consolidate treesit parser create functions, Yuan Fu, 2022/06/16
- feature/tree-sitter a4d7bcccba 22/26: ; * src/treesit.c: Add comment to explain design decisions., Yuan Fu, 2022/06/16