123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- ;;; occur-tests.el --- Test suite for occur.
- ;; Copyright (C) 2010-2012 Free Software Foundation, Inc.
- ;; Author: Juri Linkov <juri@jurta.org>
- ;; Keywords: matching, internal
- ;; 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)
- (defconst occur-tests
- '(
- ;; * Test one-line matches (at bob, eob, bol, eol).
- ("x" 0 "\
- xa
- b
- cx
- xd
- xex
- fx
- " "\
- 5 matches for \"x\" in buffer: *temp*<2>
- 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^Ja\" in buffer: *temp*<2>
- 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^Jb\" in buffer: *temp*<2>
- 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^J\" in buffer: *temp*<2>
- 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^J.x^J\" in buffer: *temp*<2>
- 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: *temp*<2>
- 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: *temp*<2>
- :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: *temp*<2>
- 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: *temp*<2>
- :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: *temp*<2>
- :
- :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^J.x\" in buffer: *temp*<2>
- 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^J.x\" in buffer: *temp*<2>
- 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: *temp*<2>
- :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: *temp*<2>
- :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 occur-test-case (test)
- (let ((regexp (nth 0 test))
- (nlines (nth 1 test))
- (input-buffer-string (nth 2 test))
- (output-buffer-string (nth 3 test)))
- (save-window-excursion
- (with-temp-buffer
- (insert input-buffer-string)
- (occur regexp nlines)
- (equal output-buffer-string
- (with-current-buffer "*Occur*"
- (buffer-string)))))))
- (ert-deftest occur-tests ()
- "Test the functionality of `occur'.
- The test data is in the `occur-tests' constant."
- (let ((occur-hook nil))
- (dolist (test occur-tests)
- (should (occur-test-case test)))))
- (provide 'occur-tests)
- ;;; occur-tests.el ends here
|