123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362 |
- ;;; replace-tests.el --- tests for replace.el.
- ;; Copyright (C) 2010-2017 Free Software Foundation, Inc.
- ;; Author: Nicolas Richard <youngfrog@members.fsf.org>
- ;; Author: Juri Linkov <juri@jurta.org>
- ;; This file is part of GNU Emacs.
- ;; GNU Emacs is free software: you can redistribute it and/or modify
- ;; it under the terms of the GNU General Public License as published by
- ;; the Free Software Foundation, either version 3 of the License, or
- ;; (at your option) any later version.
- ;; GNU Emacs is distributed in the hope that it will be useful,
- ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ;; GNU General Public License for more details.
- ;; You should have received a copy of the GNU General Public License
- ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
- ;;; Code:
- (require 'ert)
- (ert-deftest query-replace--split-string-tests ()
- (let ((sep (propertize "\0" 'separator t)))
- (dolist (before '("" "b"))
- (dolist (after '("" "a"))
- (should (equal
- (query-replace--split-string (concat before sep after))
- (cons before after)))
- (should (equal
- (query-replace--split-string (concat before "\0" after))
- (concat before "\0" after)))))))
- (defconst replace-occur-tests
- '(
- ;; * Test one-line matches (at bob, eob, bol, eol).
- ("x" 0 "\
- xa
- b
- cx
- xd
- xex
- fx
- " "\
- 6 matches in 5 lines for \"x\" in buffer: *test-occur*
- 1:xa
- 3:cx
- 4:xd
- 5:xex
- 6:fx
- ")
- ;; * Test multi-line matches, this is the first test from
- ;; http://lists.gnu.org/archive/html/emacs-devel/2005-06/msg01008.html
- ;; where numbers are replaced with letters.
- ("a\na" 0 "\
- a
- a
- a
- a
- a
- " "\
- 2 matches for \"a\na\" in buffer: *test-occur*
- 1:a
- :a
- 3:a
- :a
- ")
- ;; * Test multi-line matches, this is the second test from
- ;; http://lists.gnu.org/archive/html/emacs-devel/2005-06/msg01008.html
- ;; where numbers are replaced with letters.
- ("a\nb" 0 "\
- a
- b
- c
- a
- b
- " "\
- 2 matches for \"a\nb\" in buffer: *test-occur*
- 1:a
- :b
- 4:a
- :b
- ")
- ;; * Test line numbers for multi-line matches with empty last match line.
- ("a\n" 0 "\
- a
- c
- a
- " "\
- 2 matches for \"a\n\" in buffer: *test-occur*
- 1:a
- :
- 4:a
- :
- ")
- ;; * Test multi-line matches with 3 match lines.
- ("x\n.x\n" 0 "\
- ax
- bx
- c
- d
- ex
- fx
- " "\
- 2 matches for \"x\n.x\n\" in buffer: *test-occur*
- 1:ax
- :bx
- :c
- 5:ex
- :fx
- :
- ")
- ;; * Test non-overlapping context lines with matches at bob/eob.
- ("x" 1 "\
- ax
- b
- c
- d
- ex
- f
- g
- hx
- " "\
- 3 matches for \"x\" in buffer: *test-occur*
- 1:ax
- :b
- -------
- :d
- 5:ex
- :f
- -------
- :g
- 8:hx
- ")
- ;; * Test non-overlapping context lines with matches not at bob/eob.
- ("x" 1 "\
- a
- bx
- c
- d
- ex
- f
- " "\
- 2 matches for \"x\" in buffer: *test-occur*
- :a
- 2:bx
- :c
- -------
- :d
- 5:ex
- :f
- ")
- ;; * Test overlapping context lines with matches at bob/eob.
- ("x" 2 "\
- ax
- bx
- c
- dx
- e
- f
- gx
- h
- i
- j
- kx
- " "\
- 5 matches for \"x\" in buffer: *test-occur*
- 1:ax
- 2:bx
- :c
- 4:dx
- :e
- :f
- 7:gx
- :h
- :i
- :j
- 11:kx
- ")
- ;; * Test overlapping context lines with matches not at bob/eob.
- ("x" 2 "\
- a
- b
- cx
- d
- e
- f
- gx
- h
- i
- " "\
- 2 matches for \"x\" in buffer: *test-occur*
- :a
- :b
- 3:cx
- :d
- :e
- :f
- 7:gx
- :h
- :i
- ")
- ;; * Test overlapping context lines with empty first and last line..
- ("x" 2 "\
- b
- cx
- d
- e
- f
- gx
- h
- " "\
- 2 matches for \"x\" in buffer: *test-occur*
- :
- :b
- 3:cx
- :d
- :e
- :f
- 7:gx
- :h
- :
- ")
- ;; * Test multi-line overlapping context lines.
- ("x\n.x" 2 "\
- ax
- bx
- c
- d
- ex
- fx
- g
- h
- i
- jx
- kx
- " "\
- 3 matches for \"x\n.x\" in buffer: *test-occur*
- 1:ax
- :bx
- :c
- :d
- 5:ex
- :fx
- :g
- :h
- :i
- 10:jx
- :kx
- ")
- ;; * Test multi-line non-overlapping context lines.
- ("x\n.x" 2 "\
- ax
- bx
- c
- d
- e
- f
- gx
- hx
- " "\
- 2 matches for \"x\n.x\" in buffer: *test-occur*
- 1:ax
- :bx
- :c
- :d
- -------
- :e
- :f
- 7:gx
- :hx
- ")
- ;; * Test non-overlapping negative (before-context) lines.
- ("x" -2 "\
- a
- bx
- c
- d
- e
- fx
- g
- h
- ix
- " "\
- 3 matches for \"x\" in buffer: *test-occur*
- :a
- 2:bx
- -------
- :d
- :e
- 6:fx
- -------
- :g
- :h
- 9:ix
- ")
- ;; * Test overlapping negative (before-context) lines.
- ("x" -3 "\
- a
- bx
- c
- dx
- e
- f
- gx
- h
- " "\
- 3 matches for \"x\" in buffer: *test-occur*
- :a
- 2:bx
- :c
- 4:dx
- :e
- :f
- 7:gx
- ")
- )
- "List of tests for `occur'.
- Each element has the format:
- \(REGEXP NLINES INPUT-BUFFER-STRING OUTPUT-BUFFER-STRING).")
- (defun replace-occur-test-case (test)
- (let ((regexp (nth 0 test))
- (nlines (nth 1 test))
- (input-buffer-string (nth 2 test))
- (temp-buffer (get-buffer-create " *test-occur*")))
- (unwind-protect
- (save-window-excursion
- (with-current-buffer temp-buffer
- (erase-buffer)
- (insert input-buffer-string)
- (occur regexp nlines)
- (with-current-buffer "*Occur*"
- (buffer-substring-no-properties (point-min) (point-max)))))
- (and (buffer-name temp-buffer)
- (kill-buffer temp-buffer)))))
- (defun replace-occur-test-create (n)
- "Create a test for element N of the `replace-occur-tests' constant."
- (let ((testname (intern (format "occur-test-%.2d" n)))
- (testdoc (format "Test element %d of `replace-occur-tests'." n)))
- (eval
- `(ert-deftest ,testname ()
- ,testdoc
- (let (replace-occur-hook)
- (should (equal (replace-occur-test-case (nth ,n replace-occur-tests))
- (nth 3 (nth ,n replace-occur-tests)))))))))
- (dotimes (i (length replace-occur-tests))
- (replace-occur-test-create i))
- ;;; replace-tests.el ends here
|