1 ;;; syntax-tests.el --- tests for syntax.c functions -*- lexical-binding: t -*-
3 ;; Copyright (C) 2017-2018 Free Software Foundation, Inc.
5 ;; This file is part of GNU Emacs.
7 ;; GNU Emacs is free software: you can redistribute it and/or modify
8 ;; it under the terms of the GNU General Public License as published by
9 ;; the Free Software Foundation, either version 3 of the License, or
10 ;; (at your option) any later version.
12 ;; GNU Emacs is distributed in the hope that it will be useful,
13 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ;; GNU General Public License for more details.
17 ;; You should have received a copy of the GNU General Public License
18 ;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
24 (ert-deftest parse-partial-sexp-continue-over-comment-marker
()
25 "Continue a parse that stopped in the middle of a comment marker."
27 (let ((table (make-syntax-table)))
28 (modify-syntax-entry ?
/ ". 124")
29 (modify-syntax-entry ?
* ". 23b")
30 (set-syntax-table table
))
32 (goto-char (point-min))
33 (let* ((pointC (progn (search-forward "C") (1- (point))))
35 (pointX (progn (search-forward "X") (1- (point))))
37 (ppsC (parse-partial-sexp (point-min) pointC
))
38 (pps-preC (parse-partial-sexp (point-min) preC
))
39 (pps-aftC (parse-partial-sexp (point-min) aftC
))
40 (ppsX (parse-partial-sexp (point-min) pointX
)))
41 ;; C should be inside comment.
42 (should (= (nth 0 ppsC
) 0))
43 (should (eq (nth 4 ppsC
) t
))
44 (should (= (nth 8 ppsC
) (- pointC
2)))
45 ;; X should not be in comment or list.
46 (should (= (nth 0 ppsX
) 0))
47 (should-not (nth 4 ppsX
))
48 ;; Try using OLDSTATE.
49 (should (equal (parse-partial-sexp preC pointC nil nil pps-preC
)
51 (should (equal (parse-partial-sexp pointC aftC nil nil ppsC
)
53 (should (equal (parse-partial-sexp preC aftC nil nil pps-preC
)
55 (should (equal (parse-partial-sexp aftC pointX nil nil pps-aftC
)
58 (ert-deftest parse-partial-sexp-paren-comments
()
59 "Test syntax parsing with paren comment markers.
60 Specifically, where the first character of the comment marker is
61 also has open paren syntax (see Bug#24870)."
63 (let ((table (make-syntax-table)))
64 (modify-syntax-entry ?\
{ "(}1nb" table
)
65 (modify-syntax-entry ?\
} "){4nb" table
)
66 (modify-syntax-entry ?-
". 123" table
)
67 (set-syntax-table table
))
69 (goto-char (point-min))
70 (let* ((pointC (progn (search-forward "C") (1- (point))))
71 (pointX (progn (search-forward "X") (1- (point))))
72 (ppsC (parse-partial-sexp (point-min) pointC
))
73 (ppsX (parse-partial-sexp (point-min) pointX
)))
74 ;; C should be inside nestable comment, not list.
75 (should (= (nth 0 ppsC
) 0))
76 (should (= (nth 4 ppsC
) 1))
77 (should (= (nth 8 ppsC
) (- pointC
2)))
78 ;; X should not be in comment or list.
79 (should (= (nth 0 ppsX
) 0))
80 (should-not (nth 4 ppsX
))
81 ;; Try using OLDSTATE.
82 (should (equal (parse-partial-sexp pointC pointX nil nil ppsC
)
85 ;;; syntax-tests.el ends here