diff options
Diffstat (limited to 'test/src')
| -rw-r--r-- | test/src/regex-tests.el | 90 |
1 files changed, 46 insertions, 44 deletions
diff --git a/test/src/regex-tests.el b/test/src/regex-tests.el index 6e21088114e..c4844c7cdbc 100644 --- a/test/src/regex-tests.el +++ b/test/src/regex-tests.el | |||
| @@ -45,54 +45,56 @@ character) must match a string \"\u2420\"." | |||
| 45 | (concat string suffix))))))))) | 45 | (concat string suffix))))))))) |
| 46 | 46 | ||
| 47 | (defun regex--test-cc (name matching not-matching) | 47 | (defun regex--test-cc (name matching not-matching) |
| 48 | (should (string-match-p (concat "^[[:" name ":]]*$") matching)) | 48 | (let (case-fold-search) |
| 49 | (should (string-match-p (concat "^[[:" name ":]]*?\u2622$") | 49 | (should (string-match-p (concat "^[[:" name ":]]*$") matching)) |
| 50 | (concat matching "\u2622"))) | 50 | (should (string-match-p (concat "^[[:" name ":]]*?\u2622$") |
| 51 | (should (string-match-p (concat "^[^[:" name ":]]*$") not-matching)) | 51 | (concat matching "\u2622"))) |
| 52 | (should (string-match-p (concat "^[^[:" name ":]]*\u2622$") | 52 | (should (string-match-p (concat "^[^[:" name ":]]*$") not-matching)) |
| 53 | (concat not-matching "\u2622"))) | 53 | (should (string-match-p (concat "^[^[:" name ":]]*\u2622$") |
| 54 | (with-temp-buffer | 54 | (concat not-matching "\u2622"))) |
| 55 | (insert matching) | 55 | (with-temp-buffer |
| 56 | (let ((p (point))) | 56 | (insert matching) |
| 57 | (insert not-matching) | 57 | (let ((p (point))) |
| 58 | (goto-char (point-min)) | 58 | (insert not-matching) |
| 59 | (skip-chars-forward (concat "[:" name ":]")) | 59 | (goto-char (point-min)) |
| 60 | (should (equal (point) p)) | 60 | (skip-chars-forward (concat "[:" name ":]")) |
| 61 | (skip-chars-forward (concat "^[:" name ":]")) | 61 | (should (equal (point) p)) |
| 62 | (should (equal (point) (point-max))) | 62 | (skip-chars-forward (concat "^[:" name ":]")) |
| 63 | (goto-char (point-min)) | 63 | (should (equal (point) (point-max))) |
| 64 | (skip-chars-forward (concat "[:" name ":]\u2622")) | 64 | (goto-char (point-min)) |
| 65 | (should (or (equal (point) p) (equal (point) (1+ p))))))) | 65 | (skip-chars-forward (concat "[:" name ":]\u2622")) |
| 66 | 66 | (should (or (equal (point) p) (equal (point) (1+ p)))))))) | |
| 67 | (ert-deftest regex-character-classes () | 67 | |
| 68 | "Perform sanity test of regexes using character classes. | 68 | (dolist (test '(("alnum" "abcABC012łąka" "-, \t\n") |
| 69 | ("alpha" "abcABCłąka" "-,012 \t\n") | ||
| 70 | ("digit" "012" "abcABCłąka-, \t\n") | ||
| 71 | ("xdigit" "0123aBc" "łąk-, \t\n") | ||
| 72 | ("upper" "ABCŁĄKA" "abc012-, \t\n") | ||
| 73 | ("lower" "abcłąka" "ABC012-, \t\n") | ||
| 74 | |||
| 75 | ("word" "abcABC012\u2620" "-, \t\n") | ||
| 76 | |||
| 77 | ("punct" ".,-" "abcABC012\u2620 \t\n") | ||
| 78 | ("cntrl" "\1\2\t\n" ".,-abcABC012\u2620 ") | ||
| 79 | ("graph" "abcłąka\u2620-," " \t\n\1") | ||
| 80 | ("print" "abcłąka\u2620-, " "\t\n\1") | ||
| 81 | |||
| 82 | ("space" " \t\n\u2001" "abcABCł0123") | ||
| 83 | ("blank" " \t" "\n\u2001") | ||
| 84 | |||
| 85 | ("ascii" "abcABC012 \t\n\1" "łą\u2620") | ||
| 86 | ("nonascii" "łą\u2622" "abcABC012 \t\n\1") | ||
| 87 | ("unibyte" "abcABC012 \t\n\1" "łą\u2622") | ||
| 88 | ("multibyte" "łą\u2622" "abcABC012 \t\n\1"))) | ||
| 89 | (let ((name (intern (concat "regex-tests-" (car test) "-character-class"))) | ||
| 90 | (doc (concat "Perform sanity test of regexes using " (car test) | ||
| 91 | " character class. | ||
| 69 | 92 | ||
| 70 | Go over all the supported character classes and test whether the | 93 | Go over all the supported character classes and test whether the |
| 71 | classes and their inversions match what they are supposed to | 94 | classes and their inversions match what they are supposed to |
| 72 | match. The test is done using `string-match-p' as well as | 95 | match. The test is done using `string-match-p' as well as |
| 73 | `skip-chars-forward'." | 96 | `skip-chars-forward'."))) |
| 74 | (let (case-fold-search) | 97 | (eval `(ert-deftest ,name () ,doc ,(cons 'regex--test-cc test)) t))) |
| 75 | (regex--test-cc "alnum" "abcABC012łąka" "-, \t\n") | ||
| 76 | (regex--test-cc "alpha" "abcABCłąka" "-,012 \t\n") | ||
| 77 | (regex--test-cc "digit" "012" "abcABCłąka-, \t\n") | ||
| 78 | (regex--test-cc "xdigit" "0123aBc" "łąk-, \t\n") | ||
| 79 | (regex--test-cc "upper" "ABCŁĄKA" "abc012-, \t\n") | ||
| 80 | (regex--test-cc "lower" "abcłąka" "ABC012-, \t\n") | ||
| 81 | |||
| 82 | (regex--test-cc "word" "abcABC012\u2620" "-, \t\n") | ||
| 83 | |||
| 84 | (regex--test-cc "punct" ".,-" "abcABC012\u2620 \t\n") | ||
| 85 | (regex--test-cc "cntrl" "\1\2\t\n" ".,-abcABC012\u2620 ") | ||
| 86 | (regex--test-cc "graph" "abcłąka\u2620-," " \t\n\1") | ||
| 87 | (regex--test-cc "print" "abcłąka\u2620-, " "\t\n\1") | ||
| 88 | |||
| 89 | (regex--test-cc "space" " \t\n\u2001" "abcABCł0123") | ||
| 90 | (regex--test-cc "blank" " \t" "\n\u2001") | ||
| 91 | |||
| 92 | (regex--test-cc "ascii" "abcABC012 \t\n\1" "łą\u2620") | ||
| 93 | (regex--test-cc "nonascii" "łą\u2622" "abcABC012 \t\n\1") | ||
| 94 | (regex--test-cc "unibyte" "abcABC012 \t\n\1" "łą\u2622") | ||
| 95 | (regex--test-cc "multibyte" "łą\u2622" "abcABC012 \t\n\1"))) | ||
| 96 | 98 | ||
| 97 | 99 | ||
| 98 | (defmacro regex-tests-generic-line (comment-char test-file whitelist &rest body) | 100 | (defmacro regex-tests-generic-line (comment-char test-file whitelist &rest body) |