summaryrefslogtreecommitdiff
path: root/test/automated
diff options
context:
space:
mode:
authorPhillip Lord <phillip.lord@russet.org.uk>2015-11-23 22:02:42 +0000
committerPhillip Lord <phillip.lord@russet.org.uk>2015-11-24 17:04:22 +0000
commit22bbf7ca22f11cc33d887d0162cf2ec6661c3a3e (patch)
tree779ff7e07667194416e01c6a6e8bd7b970244c70 /test/automated
parentc378d6c33f751d1a0b97958f3cacfe0b07c72f58 (diff)
downloademacs-22bbf7ca22f11cc33d887d0162cf2ec6661c3a3e.tar.gz
Rename all test files to reflect source layout.
* CONTRIBUTE,Makefile.in,configure.ac: Update to reflect test directory moves. * test/file-organisation.org: New file. * test/automated/Makefile.in test/automated/data/decompress/foo.gz test/automated/data/epg/pubkey.asc test/automated/data/epg/seckey.asc test/automated/data/files-bug18141.el.gz test/automated/data/flymake/test.c test/automated/data/flymake/test.pl test/automated/data/package/archive-contents test/automated/data/package/key.pub test/automated/data/package/key.sec test/automated/data/package/multi-file-0.2.3.tar test/automated/data/package/multi-file-readme.txt test/automated/data/package/newer-versions/archive-contents test/automated/data/package/newer-versions/new-pkg-1.0.el test/automated/data/package/newer-versions/simple-single-1.4.el test/automated/data/package/package-test-server.py test/automated/data/package/signed/archive-contents test/automated/data/package/signed/archive-contents.sig test/automated/data/package/signed/signed-bad-1.0.el test/automated/data/package/signed/signed-bad-1.0.el.sig test/automated/data/package/signed/signed-good-1.0.el test/automated/data/package/signed/signed-good-1.0.el.sig test/automated/data/package/simple-depend-1.0.el test/automated/data/package/simple-single-1.3.el test/automated/data/package/simple-single-readme.txt test/automated/data/package/simple-two-depend-1.1.el test/automated/abbrev-tests.el test/automated/auto-revert-tests.el test/automated/calc-tests.el test/automated/icalendar-tests.el test/automated/character-fold-tests.el test/automated/comint-testsuite.el test/automated/descr-text-test.el test/automated/electric-tests.el test/automated/cl-generic-tests.el test/automated/cl-lib-tests.el test/automated/eieio-test-methodinvoke.el test/automated/eieio-test-persist.el test/automated/eieio-tests.el test/automated/ert-tests.el test/automated/ert-x-tests.el test/automated/generator-tests.el test/automated/let-alist.el test/automated/map-tests.el test/automated/advice-tests.el test/automated/package-test.el test/automated/pcase-tests.el test/automated/regexp-tests.el test/automated/seq-tests.el test/automated/subr-x-tests.el test/automated/tabulated-list-test.el test/automated/thunk-tests.el test/automated/timer-tests.el test/automated/epg-tests.el test/automated/eshell.el test/automated/faces-tests.el test/automated/file-notify-tests.el test/automated/auth-source-tests.el test/automated/gnus-tests.el test/automated/message-mode-tests.el test/automated/help-fns.el test/automated/imenu-test.el test/automated/info-xref.el test/automated/mule-util.el test/automated/isearch-tests.el test/automated/json-tests.el test/automated/bytecomp-tests.el test/automated/coding-tests.el test/automated/core-elisp-tests.el test/automated/decoder-tests.el test/automated/files.el test/automated/font-parse-tests.el test/automated/lexbind-tests.el test/automated/occur-tests.el test/automated/process-tests.el test/automated/syntax-tests.el test/automated/textprop-tests.el test/automated/undo-tests.el test/automated/man-tests.el test/automated/completion-tests.el test/automated/dbus-tests.el test/automated/newsticker-tests.el test/automated/sasl-scram-rfc-tests.el test/automated/tramp-tests.el test/automated/obarray-tests.el test/automated/compile-tests.el test/automated/elisp-mode-tests.el test/automated/f90.el test/automated/flymake-tests.el test/automated/python-tests.el test/automated/ruby-mode-tests.el test/automated/subword-tests.el test/automated/replace-tests.el test/automated/simple-test.el test/automated/sort-tests.el test/automated/subr-tests.el test/automated/reftex-tests.el test/automated/sgml-mode-tests.el test/automated/tildify-tests.el test/automated/thingatpt.el test/automated/url-future-tests.el test/automated/url-util-tests.el test/automated/add-log-tests.el test/automated/vc-bzr.el test/automated/vc-tests.el test/automated/xml-parse-tests.el test/BidiCharacterTest.txt test/biditest.el test/cedet/cedet-utests.el test/cedet/ede-tests.el test/cedet/semantic-ia-utest.el test/cedet/semantic-tests.el test/cedet/semantic-utest-c.el test/cedet/semantic-utest.el test/cedet/srecode-tests.el test/cedet/tests/test.c test/cedet/tests/test.el test/cedet/tests/test.make test/cedet/tests/testdoublens.cpp test/cedet/tests/testdoublens.hpp test/cedet/tests/testfriends.cpp test/cedet/tests/testjavacomp.java test/cedet/tests/testnsp.cpp test/cedet/tests/testpolymorph.cpp test/cedet/tests/testspp.c test/cedet/tests/testsppcomplete.c test/cedet/tests/testsppreplace.c test/cedet/tests/testsppreplaced.c test/cedet/tests/testsubclass.cpp test/cedet/tests/testsubclass.hh test/cedet/tests/testtypedefs.cpp test/cedet/tests/testvarnames.c test/etags/CTAGS.good test/etags/ETAGS.good_1 test/etags/ETAGS.good_2 test/etags/ETAGS.good_3 test/etags/ETAGS.good_4 test/etags/ETAGS.good_5 test/etags/ETAGS.good_6 test/etags/a-src/empty.zz test/etags/a-src/empty.zz.gz test/etags/ada-src/2ataspri.adb test/etags/ada-src/2ataspri.ads test/etags/ada-src/etags-test-for.ada test/etags/ada-src/waroquiers.ada test/etags/c-src/a/b/b.c test/etags/c-src/abbrev.c test/etags/c-src/c.c test/etags/c-src/dostorture.c test/etags/c-src/emacs/src/gmalloc.c test/etags/c-src/emacs/src/keyboard.c test/etags/c-src/emacs/src/lisp.h test/etags/c-src/emacs/src/regex.h test/etags/c-src/etags.c test/etags/c-src/exit.c test/etags/c-src/exit.strange_suffix test/etags/c-src/fail.c test/etags/c-src/getopt.h test/etags/c-src/h.h test/etags/c-src/machsyscalls.c test/etags/c-src/machsyscalls.h test/etags/c-src/sysdep.h test/etags/c-src/tab.c test/etags/c-src/torture.c test/etags/cp-src/MDiagArray2.h test/etags/cp-src/Range.h test/etags/cp-src/burton.cpp test/etags/cp-src/c.C test/etags/cp-src/clheir.cpp.gz test/etags/cp-src/clheir.hpp test/etags/cp-src/conway.cpp test/etags/cp-src/conway.hpp test/etags/cp-src/fail.C test/etags/cp-src/functions.cpp test/etags/cp-src/screen.cpp test/etags/cp-src/screen.hpp test/etags/cp-src/x.cc test/etags/el-src/TAGTEST.EL test/etags/el-src/emacs/lisp/progmodes/etags.el test/etags/erl-src/gs_dialog.erl test/etags/f-src/entry.for test/etags/f-src/entry.strange.gz test/etags/f-src/entry.strange_suffix test/etags/forth-src/test-forth.fth test/etags/html-src/algrthms.html test/etags/html-src/index.shtml test/etags/html-src/software.html test/etags/html-src/softwarelibero.html test/etags/lua-src/allegro.lua test/etags/objc-src/PackInsp.h test/etags/objc-src/PackInsp.m test/etags/objc-src/Subprocess.h test/etags/objc-src/Subprocess.m test/etags/objcpp-src/SimpleCalc.H test/etags/objcpp-src/SimpleCalc.M test/etags/pas-src/common.pas test/etags/perl-src/htlmify-cystic test/etags/perl-src/kai-test.pl test/etags/perl-src/yagrip.pl test/etags/php-src/lce_functions.php test/etags/php-src/ptest.php test/etags/php-src/sendmail.php test/etags/prol-src/natded.prolog test/etags/prol-src/ordsets.prolog test/etags/ps-src/rfc1245.ps test/etags/pyt-src/server.py test/etags/tex-src/gzip.texi test/etags/tex-src/nonewline.tex test/etags/tex-src/testenv.tex test/etags/tex-src/texinfo.tex test/etags/y-src/atest.y test/etags/y-src/cccp.c test/etags/y-src/cccp.y test/etags/y-src/parse.c test/etags/y-src/parse.y test/indent/css-mode.css test/indent/js-indent-init-dynamic.js test/indent/js-indent-init-t.js test/indent/js-jsx.js test/indent/js.js test/indent/latex-mode.tex test/indent/modula2.mod test/indent/nxml.xml test/indent/octave.m test/indent/pascal.pas test/indent/perl.perl test/indent/prolog.prolog test/indent/ps-mode.ps test/indent/ruby.rb test/indent/scheme.scm test/indent/scss-mode.scss test/indent/sgml-mode-attribute.html test/indent/shell.rc test/indent/shell.sh test/redisplay-testsuite.el test/rmailmm.el test/automated/buffer-tests.el test/automated/cmds-tests.el test/automated/data-tests.el test/automated/finalizer-tests.el test/automated/fns-tests.el test/automated/inotify-test.el test/automated/keymap-tests.el test/automated/print-tests.el test/automated/libxml-tests.el test/automated/zlib-tests.el: Files Moved.
Diffstat (limited to 'test/automated')
-rw-r--r--test/automated/Makefile.in145
-rw-r--r--test/automated/abbrev-tests.el74
-rw-r--r--test/automated/add-log-tests.el85
-rw-r--r--test/automated/advice-tests.el211
-rw-r--r--test/automated/auth-source-tests.el178
-rw-r--r--test/automated/auto-revert-tests.el254
-rw-r--r--test/automated/buffer-tests.el48
-rw-r--r--test/automated/bytecomp-tests.el429
-rw-r--r--test/automated/calc-tests.el94
-rw-r--r--test/automated/character-fold-tests.el58
-rw-r--r--test/automated/cl-generic-tests.el223
-rw-r--r--test/automated/cl-lib-tests.el496
-rw-r--r--test/automated/cmds-tests.el34
-rw-r--r--test/automated/coding-tests.el50
-rw-r--r--test/automated/comint-testsuite.el54
-rw-r--r--test/automated/compile-tests.el366
-rw-r--r--test/automated/completion-tests.el46
-rw-r--r--test/automated/core-elisp-tests.el52
-rw-r--r--test/automated/data-tests.el257
-rw-r--r--test/automated/data/decompress/foo.gzbin30 -> 0 bytes
-rw-r--r--test/automated/data/epg/pubkey.asc20
-rw-r--r--test/automated/data/epg/seckey.asc33
-rw-r--r--test/automated/data/files-bug18141.el.gzbin77 -> 0 bytes
-rw-r--r--test/automated/data/flymake/Makefile13
-rw-r--r--test/automated/data/flymake/test.c5
-rw-r--r--test/automated/data/flymake/test.pl2
-rw-r--r--test/automated/data/package/archive-contents17
-rw-r--r--test/automated/data/package/key.pub18
-rw-r--r--test/automated/data/package/key.sec33
-rw-r--r--test/automated/data/package/multi-file-0.2.3.tarbin20480 -> 0 bytes
-rw-r--r--test/automated/data/package/multi-file-readme.txt1
-rw-r--r--test/automated/data/package/newer-versions/archive-contents13
-rw-r--r--test/automated/data/package/newer-versions/new-pkg-1.0.el18
-rw-r--r--test/automated/data/package/newer-versions/simple-single-1.4.el36
-rw-r--r--test/automated/data/package/package-test-server.py21
-rw-r--r--test/automated/data/package/signed/archive-contents7
-rw-r--r--test/automated/data/package/signed/archive-contents.sigbin287 -> 0 bytes
-rw-r--r--test/automated/data/package/signed/signed-bad-1.0.el33
-rw-r--r--test/automated/data/package/signed/signed-bad-1.0.el.sigbin287 -> 0 bytes
-rw-r--r--test/automated/data/package/signed/signed-good-1.0.el33
-rw-r--r--test/automated/data/package/signed/signed-good-1.0.el.sigbin287 -> 0 bytes
-rw-r--r--test/automated/data/package/simple-depend-1.0.el17
-rw-r--r--test/automated/data/package/simple-single-1.3.el33
-rw-r--r--test/automated/data/package/simple-single-readme.txt3
-rw-r--r--test/automated/data/package/simple-two-depend-1.1.el17
-rw-r--r--test/automated/dbus-tests.el182
-rw-r--r--test/automated/decoder-tests.el349
-rw-r--r--test/automated/descr-text-test.el94
-rw-r--r--test/automated/eieio-test-methodinvoke.el402
-rw-r--r--test/automated/eieio-test-persist.el219
-rw-r--r--test/automated/eieio-tests.el900
-rw-r--r--test/automated/electric-tests.el588
-rw-r--r--test/automated/elisp-mode-tests.el645
-rw-r--r--test/automated/epg-tests.el172
-rw-r--r--test/automated/ert-tests.el843
-rw-r--r--test/automated/ert-x-tests.el280
-rw-r--r--test/automated/eshell.el252
-rw-r--r--test/automated/f90.el258
-rw-r--r--test/automated/faces-tests.el54
-rw-r--r--test/automated/file-notify-tests.el628
-rw-r--r--test/automated/files.el172
-rw-r--r--test/automated/finalizer-tests.el33
-rw-r--r--test/automated/flymake-tests.el80
-rw-r--r--test/automated/fns-tests.el193
-rw-r--r--test/automated/font-parse-tests.el165
-rw-r--r--test/automated/generator-tests.el284
-rw-r--r--test/automated/gnus-tests.el35
-rw-r--r--test/automated/help-fns.el60
-rw-r--r--test/automated/icalendar-tests.el2237
-rw-r--r--test/automated/imenu-test.el88
-rw-r--r--test/automated/info-xref.el147
-rw-r--r--test/automated/inotify-test.el64
-rw-r--r--test/automated/isearch-tests.el32
-rw-r--r--test/automated/json-tests.el101
-rw-r--r--test/automated/keymap-tests.el43
-rw-r--r--test/automated/let-alist.el91
-rw-r--r--test/automated/lexbind-tests.el75
-rw-r--r--test/automated/libxml-tests.el74
-rw-r--r--test/automated/man-tests.el118
-rw-r--r--test/automated/map-tests.el331
-rw-r--r--test/automated/message-mode-tests.el60
-rw-r--r--test/automated/mule-util.el84
-rw-r--r--test/automated/newsticker-tests.el168
-rw-r--r--test/automated/obarray-tests.el90
-rw-r--r--test/automated/occur-tests.el352
-rw-r--r--test/automated/package-test.el611
-rw-r--r--test/automated/pcase-tests.el74
-rw-r--r--test/automated/print-tests.el62
-rw-r--r--test/automated/process-tests.el165
-rw-r--r--test/automated/python-tests.el5232
-rw-r--r--test/automated/reftex-tests.el208
-rw-r--r--test/automated/regexp-tests.el33
-rw-r--r--test/automated/replace-tests.el35
-rw-r--r--test/automated/ruby-mode-tests.el713
-rw-r--r--test/automated/sasl-scram-rfc-tests.el50
-rw-r--r--test/automated/seq-tests.el341
-rw-r--r--test/automated/sgml-mode-tests.el135
-rw-r--r--test/automated/simple-test.el256
-rw-r--r--test/automated/sort-tests.el106
-rw-r--r--test/automated/subr-tests.el107
-rw-r--r--test/automated/subr-x-tests.el526
-rw-r--r--test/automated/subword-tests.el81
-rw-r--r--test/automated/syntax-tests.el97
-rw-r--r--test/automated/tabulated-list-test.el118
-rw-r--r--test/automated/textprop-tests.el69
-rw-r--r--test/automated/thingatpt.el87
-rw-r--r--test/automated/thunk-tests.el55
-rw-r--r--test/automated/tildify-tests.el264
-rw-r--r--test/automated/timer-tests.el42
-rw-r--r--test/automated/tramp-tests.el2255
-rw-r--r--test/automated/undo-tests.el448
-rw-r--r--test/automated/url-future-tests.el57
-rw-r--r--test/automated/url-util-tests.el51
-rw-r--r--test/automated/vc-bzr.el144
-rw-r--r--test/automated/vc-tests.el618
-rw-r--r--test/automated/xml-parse-tests.el136
-rw-r--r--test/automated/zlib-tests.el45
117 files changed, 0 insertions, 27791 deletions
diff --git a/test/automated/Makefile.in b/test/automated/Makefile.in
deleted file mode 100644
index 41f54f8aa69..00000000000
--- a/test/automated/Makefile.in
+++ /dev/null
@@ -1,145 +0,0 @@
-### @configure_input@
-
-# Copyright (C) 2010-2015 Free Software Foundation, Inc.
-
-# 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/>.
-
-### Commentary:
-
-## Some targets:
-## check: re-run all tests, writing to .log files.
-## check-maybe: run all tests whose .log file needs updating
-## filename.log: run tests from filename.el(c) if .log file needs updating
-## filename: re-run tests from filename.el(c), with no logging
-
-### Code:
-
-SHELL = @SHELL@
-
-srcdir = @srcdir@
-VPATH = $(srcdir)
-
-SEPCHAR = @SEPCHAR@
-
-# We never change directory before running Emacs, so a relative file
-# name is fine, and makes life easier. If we need to change
-# directory, we can use emacs --chdir.
-EMACS = ../../src/emacs
-
-EMACS_EXTRAOPT=
-
-# Command line flags for Emacs.
-# Apparently MSYS bash would convert "-L :" to "-L ;" anyway,
-# but we might as well be explicit.
-EMACSOPT = -batch --no-site-file --no-site-lisp -L "$(SEPCHAR)$(srcdir)" $(EMACS_EXTRAOPT)
-
-# Prevent any settings in the user environment causing problems.
-unexport EMACSDATA EMACSDOC EMACSPATH GREP_OPTIONS
-
-## To run tests under a debugger, set this to eg: "gdb --args".
-GDB =
-
-# The locale to run tests under. Tests should work if this is set to
-# any supported locale. Use the C locale by default, as it should be
-# supported everywhere.
-TEST_LOCALE = C
-
-# The actual Emacs command run in the targets below.
-# Prevent any setting of EMACSLOADPATH in user environment causing problems.
-emacs = EMACSLOADPATH= LC_ALL=$(TEST_LOCALE) EMACS_TEST_DIRECTORY=$(srcdir) \
- $(GDB) "$(EMACS)" $(EMACSOPT)
-
-.PHONY: all check
-
-all: check
-
-%.elc: %.el
- @echo Compiling $<
- @$(emacs) -f batch-byte-compile $<
-
-## Ignore any test errors so we can continue to test other files.
-## But compilation errors are always fatal.
-WRITE_LOG = > $@ 2>&1 || { stat=ERROR; cat $@; }; echo $$stat: $@
-
-## I'd prefer to use -emacs -f ert-run-tests-batch-and-exit rather
-## than || true, since the former makes problems more obvious.
-## I'd also prefer to @-hide the grep part and not the
-## ert-run-tests-batch-and-exit part.
-##
-## We need to use $loadfile because:
-## i) -L :$srcdir -l basename does not work, because we have files whose
-## basename duplicates a file in lisp/ (eg eshell.el).
-## ii) Although -l basename will automatically load .el or .elc,
-## -l ./basename treats basename as a literal file (it would be nice
-## to change this; bug#17848 - if that gets done, this can be simplified).
-##
-## Beware: it approximates 'no-byte-compile', so watch out for false-positives!
-%.log: ${srcdir}/%.el
- @if grep '^;.*no-byte-compile: t' $< > /dev/null; then \
- loadfile=$<; \
- else \
- loadfile=$<c; \
- ${MAKE} $$loadfile; \
- fi; \
- echo Testing $$loadfile; \
- stat=OK ; \
- $(emacs) -l ert -l $$loadfile \
- -f ert-run-tests-batch-and-exit ${WRITE_LOG}
-
-ELFILES = $(sort $(wildcard ${srcdir}/*.el))
-LOGFILES = $(patsubst %.el,%.log,$(notdir ${ELFILES}))
-TESTS = ${LOGFILES:.log=}
-
-## If we have to interrupt a hanging test, preserve the log so we can
-## see what the problem was.
-.PRECIOUS: %.log
-
-.PHONY: ${TESTS}
-
-## The short aliases that always re-run the tests, with no logging.
-define test_template
-$(1):
- @test ! -f $(1).log || mv $(1).log $(1).log~
- @${MAKE} $(1).log WRITE_LOG=
-endef
-
-$(foreach test,${TESTS},$(eval $(call test_template,${test})))
-
-
-## Re-run all the tests every time.
-check:
- -@for f in *.log; do test ! -f $$f || mv $$f $$f~; done
- @${MAKE} check-maybe
-
-## Only re-run tests whose .log is older than the test.
-.PHONY: check-maybe
-check-maybe: ${LOGFILES}
- $(emacs) -l ert -f ert-summarize-tests-batch-and-exit $^
-
-.PHONY: mostlyclean clean bootstrap-clean distclean maintainer-clean
-
-clean mostlyclean:
- -rm -f *.log *.log~
-
-bootstrap-clean: clean
- -rm -f ${srcdir}/*.elc
-
-distclean: clean
- rm -f Makefile
-
-maintainer-clean: distclean bootstrap-clean
-
-# Makefile ends here.
diff --git a/test/automated/abbrev-tests.el b/test/automated/abbrev-tests.el
deleted file mode 100644
index 17aea5d0f82..00000000000
--- a/test/automated/abbrev-tests.el
+++ /dev/null
@@ -1,74 +0,0 @@
-;;; abbrev-tests.el --- Test suite for abbrevs -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Eli Zaretskii <eliz@gnu.org>
-;; Keywords: abbrevs
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'ert)
-(require 'abbrev)
-
-(ert-deftest abbrev-table-p-test ()
- (should-not (abbrev-table-p 42))
- (should-not (abbrev-table-p "aoeu"))
- (should-not (abbrev-table-p '()))
- (should-not (abbrev-table-p []))
- ;; Missing :abbrev-table-modiff counter:
- (should-not (abbrev-table-p (obarray-make)))
- (let* ((table (obarray-make)))
- (abbrev-table-put table :abbrev-table-modiff 42)
- (should (abbrev-table-p table))))
-
-(ert-deftest abbrev-make-abbrev-table-test ()
- ;; Table without properties:
- (let ((table (make-abbrev-table)))
- (should (abbrev-table-p table))
- (should (= (length table) obarray-default-size)))
- ;; Table with one property 'foo with value 'bar:
- (let ((table (make-abbrev-table '(foo bar))))
- (should (abbrev-table-p table))
- (should (= (length table) obarray-default-size))
- (should (eq (abbrev-table-get table 'foo) 'bar))))
-
-(ert-deftest abbrev-table-get-put-test ()
- (let ((table (make-abbrev-table)))
- (should-not (abbrev-table-get table 'foo))
- (should (= (abbrev-table-put table 'foo 42) 42))
- (should (= (abbrev-table-get table 'foo) 42))
- (should (eq (abbrev-table-put table 'foo 'bar) 'bar))
- (should (eq (abbrev-table-get table 'foo) 'bar))))
-
-(ert-deftest copy-abbrev-table-test ()
- (defvar foo-abbrev-table nil) ; Avoid compiler warning
- (define-abbrev-table 'foo-abbrev-table
- '())
- (should (abbrev-table-p foo-abbrev-table))
- ;; Bug 21828
- (let ((new-foo-abbrev-table
- (condition-case nil
- (copy-abbrev-table foo-abbrev-table)
- (error nil))))
- (should (abbrev-table-p new-foo-abbrev-table)))
- (should-not (string-equal (buffer-name) "*Backtrace*")))
-
-(provide 'abbrev-tests)
-;;; abbrev-tests.el ends here
diff --git a/test/automated/add-log-tests.el b/test/automated/add-log-tests.el
deleted file mode 100644
index 9909db06022..00000000000
--- a/test/automated/add-log-tests.el
+++ /dev/null
@@ -1,85 +0,0 @@
-;;; add-log-tests.el --- Test suite for add-log.
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Masatake YAMATO <yamato@redhat.com>
-;; Keywords: vc tools
-
-;; 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)
-(require 'add-log)
-
-(defmacro add-log-current-defun-deftest (name doc major-mode
- content marker expected-defun)
- "Generate an ert test for mode-own `add-log-current-defun-function'.
-Run `add-log-current-defun' at the point where MARKER specifies in a
-buffer which content is CONTENT under MAJOR-MODE. Then it compares the
-result with EXPECTED-DEFUN."
- (let ((xname (intern (concat "add-log-current-defun-test-"
- (symbol-name name)
- ))))
- `(ert-deftest ,xname ()
- ,doc
- (with-temp-buffer
- (insert ,content)
- (goto-char (point-min))
- (funcall ',major-mode)
- (should (equal (when (search-forward ,marker nil t)
- (replace-match "" nil t)
- (add-log-current-defun))
- ,expected-defun))))))
-
-(add-log-current-defun-deftest
- sh-func1
- "Test sh-current-defun-name can find function."
- sh-mode "
-function foo
-{
- ><
-}" "><" "foo")
-
-(add-log-current-defun-deftest
- sh-func2
- "Test sh-current-defun-name can find function."
- sh-mode "
-foo()
-{
- ><
-}" "><" "foo")
-
-(add-log-current-defun-deftest
- sh-func3
- "Test sh-current-defun-name can find function."
- sh-mode "
-function foo()
-{
- ><
-}" "><" "foo")
-
-(add-log-current-defun-deftest
- sh-var
- "Test sh-current-defun-name can find variable definition."
- sh-mode "
-PATH=a:/ab:/usr/abc
-DIR=/pr><oc"
-"><" "DIR")
-
-(provide 'add-log-tests)
-
-;;; add-log-tests.el ends here
diff --git a/test/automated/advice-tests.el b/test/automated/advice-tests.el
deleted file mode 100644
index e1d125de4af..00000000000
--- a/test/automated/advice-tests.el
+++ /dev/null
@@ -1,211 +0,0 @@
-;;; advice-tests.el --- Test suite for the new advice thingy.
-
-;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'ert)
-
-(ert-deftest advice-tests-nadvice ()
- "Test nadvice code."
- (advice-add 'sm-test1 :around (lambda (f y) (* (funcall f y) 5)))
- (advice-add 'sm-test1 :around (lambda (f y) (* (funcall f y) 2)))
- (advice-remove 'sm-test1 (lambda (f y) (* (funcall f y) 5)))
- (defun sm-test1 (x) (+ x 4))
- (should (equal (sm-test1 6) 20))
- (advice-remove 'sm-test1 (lambda (f y) (* (funcall f y) 2)))
- (should (equal (sm-test1 6) 10))
- (advice-add 'sm-test1 :around (lambda (f y) (* (funcall f y) 5)))
- (should (equal (sm-test1 6) 50))
- (defun sm-test1 (x) (+ x 14))
- (should (equal (sm-test1 6) 100))
- (should (equal (null (get 'sm-test1 'defalias-fset-function)) nil))
- (advice-remove 'sm-test1 (lambda (f y) (* (funcall f y) 5)))
- (should (equal (sm-test1 6) 20))
- (should (equal (get 'sm-test1 'defalias-fset-function) nil))
-
- (advice-add 'sm-test3 :around
- (lambda (f &rest args) `(toto ,(apply f args)))
- '((name . wrap-with-toto)))
- (defmacro sm-test3 (x) `(call-test3 ,x))
- (should (equal (macroexpand '(sm-test3 56)) '(toto (call-test3 56)))))
-
-(ert-deftest advice-tests-macroaliases ()
- "Test nadvice code on aliases to macros."
- (defmacro sm-test1 (a) `(list ',a))
- (defalias 'sm-test1-alias 'sm-test1)
- (should (equal (macroexpand '(sm-test1-alias 5)) '(list '5)))
- (advice-add 'sm-test1-alias :around
- (lambda (f &rest args) `(cons 1 ,(apply f args))))
- (should (equal (macroexpand '(sm-test1-alias 5)) '(cons 1 (list '5))))
- (defmacro sm-test1 (a) `(list 0 ',a))
- (should (equal (macroexpand '(sm-test1-alias 5)) '(cons 1 (list 0 '5)))))
-
-
-(ert-deftest advice-tests-advice ()
- "Test advice code."
- (defun sm-test2 (x) (+ x 4))
- (should (equal (sm-test2 6) 10))
- (defadvice sm-test2 (around sm-test activate)
- ad-do-it (setq ad-return-value (* ad-return-value 5)))
- (should (equal (sm-test2 6) 50))
- (ad-deactivate 'sm-test2)
- (should (equal (sm-test2 6) 10))
- (ad-activate 'sm-test2)
- (should (equal (sm-test2 6) 50))
- (defun sm-test2 (x) (+ x 14))
- (should (equal (sm-test2 6) 100))
- (should (equal (null (get 'sm-test2 'defalias-fset-function)) nil))
- (ad-remove-advice 'sm-test2 'around 'sm-test)
- (should (equal (sm-test2 6) 100))
- (ad-activate 'sm-test2)
- (should (equal (sm-test2 6) 20))
- (should (equal (null (get 'sm-test2 'defalias-fset-function)) t))
-
- (defadvice sm-test4 (around wrap-with-toto activate)
- ad-do-it (setq ad-return-value `(toto ,ad-return-value)))
- (defmacro sm-test4 (x) `(call-test4 ,x))
- (should (equal (macroexpand '(sm-test4 56)) '(toto (call-test4 56))))
- (defmacro sm-test4 (x) `(call-testq ,x))
- (should (equal (macroexpand '(sm-test4 56)) '(toto (call-testq 56))))
-
- ;; This used to signal an error (bug#12858).
- (autoload 'sm-test6 "foo")
- (defadvice sm-test6 (around test activate)
- ad-do-it))
-
-(ert-deftest advice-tests-combination ()
- "Combining old style and new style advices."
- (defun sm-test5 (x) (+ x 4))
- (should (equal (sm-test5 6) 10))
- (advice-add 'sm-test5 :around (lambda (f y) (* (funcall f y) 5)))
- (should (equal (sm-test5 6) 50))
- (defadvice sm-test5 (around test activate)
- ad-do-it (setq ad-return-value (+ ad-return-value 0.1)))
- (should (equal (sm-test5 5) 45.1))
- (ad-deactivate 'sm-test5)
- (should (equal (sm-test5 6) 50))
- (ad-activate 'sm-test5)
- (should (equal (sm-test5 6) 50.1))
- (defun sm-test5 (x) (+ x 14))
- (should (equal (sm-test5 6) 100.1))
- (advice-remove 'sm-test5 (lambda (f y) (* (funcall f y) 5)))
- (should (equal (sm-test5 6) 20.1)))
-
-(ert-deftest advice-test-called-interactively-p ()
- "Check interaction between advice and called-interactively-p."
- (defun sm-test7 (&optional x) (interactive) (+ (or x 7) 4))
- (advice-add 'sm-test7 :around
- (lambda (f &rest args)
- (list (cons 1 (called-interactively-p)) (apply f args))))
- (should (equal (sm-test7) '((1 . nil) 11)))
- (should (equal (call-interactively 'sm-test7) '((1 . t) 11)))
- (let ((smi 7))
- (advice-add 'sm-test7 :before
- (lambda (&rest args)
- (setq smi (called-interactively-p))))
- (should (equal (list (sm-test7) smi)
- '(((1 . nil) 11) nil)))
- (should (equal (list (call-interactively 'sm-test7) smi)
- '(((1 . t) 11) t))))
- (advice-add 'sm-test7 :around
- (lambda (f &rest args)
- (cons (cons 2 (called-interactively-p)) (apply f args))))
- (should (equal (call-interactively 'sm-test7) '((2 . t) (1 . t) 11))))
-
-(ert-deftest advice-test-called-interactively-p-around ()
- "Check interaction between around advice and called-interactively-p.
-
-This tests the currently broken case of the innermost advice to a
-function being an around advice."
- :expected-result :failed
- (defun sm-test7.2 () (interactive) (cons 1 (called-interactively-p)))
- (advice-add 'sm-test7.2 :around
- (lambda (f &rest args)
- (list (cons 1 (called-interactively-p)) (apply f args))))
- (should (equal (sm-test7.2) '((1 . nil) (1 . nil))))
- (should (equal (call-interactively 'sm-test7.2) '((1 . t) (1 . t)))))
-
-(ert-deftest advice-test-called-interactively-p-filter-args ()
- "Check interaction between filter-args advice and called-interactively-p."
- :expected-result :failed
- (defun sm-test7.3 () (interactive) (cons 1 (called-interactively-p)))
- (advice-add 'sm-test7.3 :filter-args #'list)
- (should (equal (sm-test7.3) '(1 . nil)))
- (should (equal (call-interactively 'sm-test7.3) '(1 . t))))
-
-(ert-deftest advice-test-call-interactively ()
- "Check interaction between advice on call-interactively and called-interactively-p."
- (defun sm-test7.4 () (interactive) (cons 1 (called-interactively-p)))
- (let ((old (symbol-function 'call-interactively)))
- (unwind-protect
- (progn
- (advice-add 'call-interactively :before #'ignore)
- (should (equal (sm-test7.4) '(1 . nil)))
- (should (equal (call-interactively 'sm-test7.4) '(1 . t))))
- (advice-remove 'call-interactively #'ignore)
- (should (eq (symbol-function 'call-interactively) old)))))
-
-(ert-deftest advice-test-interactive ()
- "Check handling of interactive spec."
- (defun sm-test8 (a) (interactive "p") a)
- (defadvice sm-test8 (before adv1 activate) nil)
- (defadvice sm-test8 (before adv2 activate) (interactive "P") nil)
- (should (equal (interactive-form 'sm-test8) '(interactive "P"))))
-
-(ert-deftest advice-test-preactivate ()
- (should (equal (null (get 'sm-test9 'defalias-fset-function)) t))
- (defun sm-test9 (a) (interactive "p") a)
- (should (equal (null (get 'sm-test9 'defalias-fset-function)) t))
- (defadvice sm-test9 (before adv1 pre act protect compile) nil)
- (should (equal (null (get 'sm-test9 'defalias-fset-function)) nil))
- (defadvice sm-test9 (before adv2 pre act protect compile)
- (interactive "P") nil)
- (should (equal (interactive-form 'sm-test9) '(interactive "P"))))
-
-(ert-deftest advice-test-multiples ()
- (let ((sm-test10 (lambda (a) (+ a 10)))
- (sm-advice (lambda (x) (if (consp x) (list (* 5 (car x))) (* 4 x)))))
- (should (equal (funcall sm-test10 5) 15))
- (add-function :filter-args (var sm-test10) sm-advice)
- (should (advice-function-member-p sm-advice sm-test10))
- (should (equal (funcall sm-test10 5) 35))
- (add-function :filter-return (var sm-test10) sm-advice)
- (should (equal (funcall sm-test10 5) 60))
- ;; Make sure we can add multiple times the same function, under the
- ;; condition that they have different `name' properties.
- (add-function :filter-args (var sm-test10) sm-advice '((name . "args")))
- (should (equal (funcall sm-test10 5) 140))
- (remove-function (var sm-test10) "args")
- (should (equal (funcall sm-test10 5) 60))
- (add-function :filter-args (var sm-test10) sm-advice '((name . "args")))
- (add-function :filter-return (var sm-test10) sm-advice '((name . "ret")))
- (should (equal (funcall sm-test10 5) 560))
- ;; Make sure that if we specify to remove a function that was added
- ;; multiple times, they are all removed, rather than removing only some
- ;; arbitrary subset of them.
- (remove-function (var sm-test10) sm-advice)
- (should (equal (funcall sm-test10 5) 15))))
-
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
-
-;;; advice-tests.el ends here.
diff --git a/test/automated/auth-source-tests.el b/test/automated/auth-source-tests.el
deleted file mode 100644
index 0b49b9013f7..00000000000
--- a/test/automated/auth-source-tests.el
+++ /dev/null
@@ -1,178 +0,0 @@
-;;; auth-source-tests.el --- Tests for auth-source.el -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Damien Cassou <damien@cassou.me>,
-;; Nicolas Petton <nicolas@petton.fr>
-
-;; 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/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'ert)
-(require 'auth-source)
-
-(defvar secrets-enabled t
- "Enable the secrets backend to test its features.")
-
-(defun auth-source-validate-backend (source validation-alist)
- (let ((backend (auth-source-backend-parse source)))
- (should (auth-source-backend-p backend))
- (dolist (pair validation-alist)
- (should (equal (eieio-oref backend (car pair)) (cdr pair))))))
-
-(ert-deftest auth-source-backend-parse-macos-keychain ()
- (auth-source-validate-backend '(:source (:macos-keychain-generic foobar))
- '((:source . "foobar")
- (:type . macos-keychain-generic)
- (:search-function . auth-source-macos-keychain-search)
- (:create-function . auth-source-macos-keychain-create))))
-
-(ert-deftest auth-source-backend-parse-macos-keychain-generic-string ()
- (auth-source-validate-backend "macos-keychain-generic:foobar"
- '((:source . "foobar")
- (:type . macos-keychain-generic)
- (:search-function . auth-source-macos-keychain-search)
- (:create-function . auth-source-macos-keychain-create))))
-
-(ert-deftest auth-source-backend-parse-macos-keychain-internet-string ()
- (auth-source-validate-backend "macos-keychain-internet:foobar"
- '((:source . "foobar")
- (:type . macos-keychain-internet)
- (:search-function . auth-source-macos-keychain-search)
- (:create-function . auth-source-macos-keychain-create))))
-
-(ert-deftest auth-source-backend-parse-macos-keychain-internet-symbol ()
- (auth-source-validate-backend 'macos-keychain-internet
- '((:source . "default")
- (:type . macos-keychain-internet)
- (:search-function . auth-source-macos-keychain-search)
- (:create-function . auth-source-macos-keychain-create))))
-
-(ert-deftest auth-source-backend-parse-macos-keychain-generic-symbol ()
- (auth-source-validate-backend 'macos-keychain-generic
- '((:source . "default")
- (:type . macos-keychain-generic)
- (:search-function . auth-source-macos-keychain-search)
- (:create-function . auth-source-macos-keychain-create))))
-
-(ert-deftest auth-source-backend-parse-macos-keychain-internet-default-string ()
- (auth-source-validate-backend 'macos-keychain-internet
- '((:source . "default")
- (:type . macos-keychain-internet)
- (:search-function . auth-source-macos-keychain-search)
- (:create-function . auth-source-macos-keychain-create))))
-
-(ert-deftest auth-source-backend-parse-plstore ()
- (auth-source-validate-backend '(:source "foo.plist")
- '((:source . "foo.plist")
- (:type . plstore)
- (:search-function . auth-source-plstore-search)
- (:create-function . auth-source-plstore-create))))
-
-(ert-deftest auth-source-backend-parse-netrc ()
- (auth-source-validate-backend '(:source "foo")
- '((:source . "foo")
- (:type . netrc)
- (:search-function . auth-source-netrc-search)
- (:create-function . auth-source-netrc-create))))
-
-(ert-deftest auth-source-backend-parse-netrc-string ()
- (auth-source-validate-backend "foo"
- '((:source . "foo")
- (:type . netrc)
- (:search-function . auth-source-netrc-search)
- (:create-function . auth-source-netrc-create))))
-
-(ert-deftest auth-source-backend-parse-secrets ()
- (provide 'secrets) ; simulates the presence of the `secrets' package
- (let ((secrets-enabled t))
- (auth-source-validate-backend '(:source (:secrets "foo"))
- '((:source . "foo")
- (:type . secrets)
- (:search-function . auth-source-secrets-search)
- (:create-function . auth-source-secrets-create)))))
-
-(ert-deftest auth-source-backend-parse-secrets-strings ()
- (provide 'secrets) ; simulates the presence of the `secrets' package
- (let ((secrets-enabled t))
- (auth-source-validate-backend "secrets:foo"
- '((:source . "foo")
- (:type . secrets)
- (:search-function . auth-source-secrets-search)
- (:create-function . auth-source-secrets-create)))))
-
-(ert-deftest auth-source-backend-parse-secrets-nil-source ()
- (provide 'secrets) ; simulates the presence of the `secrets' package
- (let ((secrets-enabled t))
- (auth-source-validate-backend '(:source (:secrets nil))
- '((:source . "session")
- (:type . secrets)
- (:search-function . auth-source-secrets-search)
- (:create-function . auth-source-secrets-create)))))
-
-(ert-deftest auth-source-backend-parse-secrets-alias ()
- (provide 'secrets) ; simulates the presence of the `secrets' package
- (let ((secrets-enabled t))
- ;; Redefine `secrets-get-alias' to map 'foo to "foo"
- (cl-letf (((symbol-function 'secrets-get-alias) (lambda (_) "foo")))
- (auth-source-validate-backend '(:source (:secrets foo))
- '((:source . "foo")
- (:type . secrets)
- (:search-function . auth-source-secrets-search)
- (:create-function . auth-source-secrets-create))))))
-
-(ert-deftest auth-source-backend-parse-secrets-symbol ()
- (provide 'secrets) ; simulates the presence of the `secrets' package
- (let ((secrets-enabled t))
- ;; Redefine `secrets-get-alias' to map 'default to "foo"
- (cl-letf (((symbol-function 'secrets-get-alias) (lambda (_) "foo")))
- (auth-source-validate-backend 'default
- '((:source . "foo")
- (:type . secrets)
- (:search-function . auth-source-secrets-search)
- (:create-function . auth-source-secrets-create))))))
-
-(ert-deftest auth-source-backend-parse-secrets-no-alias ()
- (provide 'secrets) ; simulates the presence of the `secrets' package
- (let ((secrets-enabled t))
- ;; Redefine `secrets-get-alias' to map 'foo to nil (so that
- ;; "Login" is used by default
- (cl-letf (((symbol-function 'secrets-get-alias) (lambda (_) nil)))
- (auth-source-validate-backend '(:source (:secrets foo))
- '((:source . "Login")
- (:type . secrets)
- (:search-function . auth-source-secrets-search)
- (:create-function . auth-source-secrets-create))))))
-
-;; TODO This test shows suspicious behavior of auth-source: the
-;; "secrets" source is used even though nothing in the input indicates
-;; that is what we want
-(ert-deftest auth-source-backend-parse-secrets-no-source ()
- (provide 'secrets) ; simulates the presence of the `secrets' package
- (let ((secrets-enabled t))
- (auth-source-validate-backend '(:source '(foo))
- '((:source . "session")
- (:type . secrets)
- (:search-function . auth-source-secrets-search)
- (:create-function . auth-source-secrets-create)))))
-
-(provide 'auth-source-tests)
-;;; auth-source-tests.el ends here
diff --git a/test/automated/auto-revert-tests.el b/test/automated/auto-revert-tests.el
deleted file mode 100644
index 2745f106087..00000000000
--- a/test/automated/auto-revert-tests.el
+++ /dev/null
@@ -1,254 +0,0 @@
-;;; auto-revert-tests.el --- Tests of auto-revert
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Michael Albinus <michael.albinus@gmx.de>
-
-;; This program 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.
-;;
-;; This program 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 this program. If not, see `http://www.gnu.org/licenses/'.
-
-;;; Commentary:
-
-;; A whole test run can be performed calling the command `auto-revert-test-all'.
-
-;;; Code:
-
-(require 'ert)
-(require 'autorevert)
-(setq auto-revert-notify-exclude-dir-regexp "nothing-to-be-excluded"
- auto-revert-stop-on-user-input nil)
-
-(defconst auto-revert--timeout 10
- "Time to wait until a message appears in the *Messages* buffer.")
-
-(defun auto-revert--wait-for-revert (buffer)
- "Wait until the *Messages* buffer reports reversion of BUFFER."
- (with-timeout (auto-revert--timeout nil)
- (with-current-buffer "*Messages*"
- (while
- (null (string-match
- (format-message "Reverting buffer `%s'." (buffer-name buffer))
- (buffer-string)))
- (read-event nil nil 0.1)))))
-
-(ert-deftest auto-revert-test00-auto-revert-mode ()
- "Check autorevert for a file."
- ;; `auto-revert-buffers' runs every 5". And we must wait, until the
- ;; file has been reverted.
- (let ((tmpfile (make-temp-file "auto-revert-test"))
- buf)
- (unwind-protect
- (progn
- (with-current-buffer (get-buffer-create "*Messages*")
- (narrow-to-region (point-max) (point-max)))
- (write-region "any text" nil tmpfile nil 'no-message)
- (setq buf (find-file-noselect tmpfile))
- (with-current-buffer buf
- (should (string-equal (buffer-string) "any text"))
- ;; `buffer-stale--default-function' checks for
- ;; `verify-visited-file-modtime'. We must ensure that it
- ;; returns nil.
- (sleep-for 1)
- (auto-revert-mode 1)
- (should auto-revert-mode)
-
- ;; Modify file. We wait for a second, in order to have
- ;; another timestamp.
- (sleep-for 1)
- (write-region "another text" nil tmpfile nil 'no-message)
-
- ;; Check, that the buffer has been reverted.
- (auto-revert--wait-for-revert buf)
- (should (string-match "another text" (buffer-string)))
-
- ;; When the buffer is modified, it shall not be reverted.
- (with-current-buffer (get-buffer-create "*Messages*")
- (narrow-to-region (point-max) (point-max)))
- (set-buffer-modified-p t)
- (sleep-for 1)
- (write-region "any text" nil tmpfile nil 'no-message)
-
- ;; Check, that the buffer hasn't been reverted.
- (auto-revert--wait-for-revert buf)
- (should-not (string-match "any text" (buffer-string)))))
-
- ;; Exit.
- (with-current-buffer "*Messages*" (widen))
- (ignore-errors
- (with-current-buffer buf (set-buffer-modified-p nil))
- (kill-buffer buf))
- (ignore-errors (delete-file tmpfile)))))
-
-;; This is inspired by Bug#21841.
-(ert-deftest auto-revert-test01-auto-revert-several-files ()
- "Check autorevert for several files at once."
- (skip-unless (executable-find "cp"))
-
- (let* ((cp (executable-find "cp"))
- (tmpdir1 (make-temp-file "auto-revert-test" 'dir))
- (tmpdir2 (make-temp-file "auto-revert-test" 'dir))
- (tmpfile1
- (make-temp-file (expand-file-name "auto-revert-test" tmpdir1)))
- (tmpfile2
- (make-temp-file (expand-file-name "auto-revert-test" tmpdir1)))
- buf1 buf2)
- (unwind-protect
- (progn
- (with-current-buffer (get-buffer-create "*Messages*")
- (narrow-to-region (point-max) (point-max)))
- (write-region "any text" nil tmpfile1 nil 'no-message)
- (setq buf1 (find-file-noselect tmpfile1))
- (write-region "any text" nil tmpfile2 nil 'no-message)
- (setq buf2 (find-file-noselect tmpfile2))
-
- (dolist (buf (list buf1 buf2))
- (with-current-buffer buf
- (should (string-equal (buffer-string) "any text"))
- ;; `buffer-stale--default-function' checks for
- ;; `verify-visited-file-modtime'. We must ensure that
- ;; it returns nil.
- (sleep-for 1)
- (auto-revert-mode 1)
- (should auto-revert-mode)))
-
- ;; Modify files. We wait for a second, in order to have
- ;; another timestamp.
- (sleep-for 1)
- (write-region
- "another text" nil
- (expand-file-name (file-name-nondirectory tmpfile1) tmpdir2)
- nil 'no-message)
- (write-region
- "another text" nil
- (expand-file-name (file-name-nondirectory tmpfile2) tmpdir2)
- nil 'no-message)
- ;;(copy-directory tmpdir2 tmpdir1 nil 'copy-contents)
- ;; Strange, that `copy-directory' does not work as expected.
- ;; The following shell command is not portable on all
- ;; platforms, unfortunately.
- (shell-command (format "%s -f %s/* %s" cp tmpdir2 tmpdir1))
-
- ;; Check, that the buffers have been reverted.
- (dolist (buf (list buf1 buf2))
- (with-current-buffer buf
- (auto-revert--wait-for-revert buf)
- (should (string-match "another text" (buffer-string))))))
-
- ;; Exit.
- (with-current-buffer "*Messages*" (widen))
- (ignore-errors
- (dolist (buf (list buf1 buf2))
- (with-current-buffer buf (set-buffer-modified-p nil))
- (kill-buffer buf)))
- (ignore-errors (delete-directory tmpdir1 'recursive))
- (ignore-errors (delete-directory tmpdir2 'recursive)))))
-
-(ert-deftest auto-revert-test02-auto-revert-tail-mode ()
- "Check autorevert tail mode."
- ;; `auto-revert-buffers' runs every 5". And we must wait, until the
- ;; file has been reverted.
- (let ((tmpfile (make-temp-file "auto-revert-test"))
- buf)
- (unwind-protect
- (progn
- (with-current-buffer (get-buffer-create "*Messages*")
- (narrow-to-region (point-max) (point-max)))
- (write-region "any text" nil tmpfile nil 'no-message)
- (setq buf (find-file-noselect tmpfile))
- (with-current-buffer buf
- ;; `buffer-stale--default-function' checks for
- ;; `verify-visited-file-modtime'. We must ensure that it
- ;; returns nil.
- (sleep-for 1)
- (auto-revert-tail-mode 1)
- (should auto-revert-tail-mode)
- (erase-buffer)
- (insert "modified text\n")
- (set-buffer-modified-p nil)
-
- ;; Modify file. We wait for a second, in order to have
- ;; another timestamp.
- (sleep-for 1)
- (write-region "another text" nil tmpfile 'append 'no-message)
-
- ;; Check, that the buffer has been reverted.
- (auto-revert--wait-for-revert buf)
- (should
- (string-match "modified text\nanother text" (buffer-string)))))
-
- ;; Exit.
- (with-current-buffer "*Messages*" (widen))
- (ignore-errors (kill-buffer buf))
- (ignore-errors (delete-file tmpfile)))))
-
-(ert-deftest auto-revert-test03-auto-revert-mode-dired ()
- "Check autorevert for dired."
- ;; `auto-revert-buffers' runs every 5". And we must wait, until the
- ;; file has been reverted.
- (let* ((tmpfile (make-temp-file "auto-revert-test"))
- (name (file-name-nondirectory tmpfile))
- buf)
- (unwind-protect
- (progn
- (setq buf (dired-noselect temporary-file-directory))
- (with-current-buffer buf
- ;; `buffer-stale--default-function' checks for
- ;; `verify-visited-file-modtime'. We must ensure that it
- ;; returns nil.
- (sleep-for 1)
- (auto-revert-mode 1)
- (should auto-revert-mode)
- (should
- (string-match name (substring-no-properties (buffer-string))))
-
- ;; Delete file. We wait for a second, in order to have
- ;; another timestamp.
- (with-current-buffer (get-buffer-create "*Messages*")
- (narrow-to-region (point-max) (point-max)))
- (sleep-for 1)
- (delete-file tmpfile)
-
- ;; Check, that the buffer has been reverted.
- (auto-revert--wait-for-revert buf)
- (should-not
- (string-match name (substring-no-properties (buffer-string))))
-
- ;; Make dired buffer modified. Check, that the buffer has
- ;; been still reverted.
- (with-current-buffer (get-buffer-create "*Messages*")
- (narrow-to-region (point-max) (point-max)))
- (set-buffer-modified-p t)
- (sleep-for 1)
- (write-region "any text" nil tmpfile nil 'no-message)
-
- ;; Check, that the buffer has been reverted.
- (auto-revert--wait-for-revert buf)
- (should
- (string-match name (substring-no-properties (buffer-string))))))
-
- ;; Exit.
- (with-current-buffer "*Messages*" (widen))
- (ignore-errors
- (with-current-buffer buf (set-buffer-modified-p nil))
- (kill-buffer buf))
- (ignore-errors (delete-file tmpfile)))))
-
-(defun auto-revert-test-all (&optional interactive)
- "Run all tests for \\[auto-revert]."
- (interactive "p")
- (if interactive
- (ert-run-tests-interactively "^auto-revert-")
- (ert-run-tests-batch "^auto-revert-")))
-
-(provide 'auto-revert-tests)
-;;; auto-revert-tests.el ends here
diff --git a/test/automated/buffer-tests.el b/test/automated/buffer-tests.el
deleted file mode 100644
index bb3c92dd6de..00000000000
--- a/test/automated/buffer-tests.el
+++ /dev/null
@@ -1,48 +0,0 @@
-;;; buffer-tests.el --- tests for buffer.c functions -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; 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 overlay-modification-hooks-message-other-buf ()
- "Test for bug#21824.
-After a modification-hook has been run and there is an overlay in
-the *Messages* buffer, the message coalescing [2 times] wrongly
-runs the modification-hook of the overlay in the 1st buffer, but
-with parameters from the *Messages* buffer modification."
- (let ((buf nil)
- (msg-ov nil))
- (with-temp-buffer
- (insert "123")
- (overlay-put (make-overlay 1 3)
- 'modification-hooks
- (list (lambda (&rest _)
- (setq buf (current-buffer)))))
- (goto-char 2)
- (insert "x")
- (unwind-protect
- (progn
- (setq msg-ov (make-overlay 1 1 (get-buffer-create "*Messages*")))
- (message "a message")
- (message "a message")
- (should (eq buf (current-buffer))))
- (when msg-ov (delete-overlay msg-ov))))))
-
-;;; buffer-tests.el ends here
diff --git a/test/automated/bytecomp-tests.el b/test/automated/bytecomp-tests.el
deleted file mode 100644
index c65009cb1b0..00000000000
--- a/test/automated/bytecomp-tests.el
+++ /dev/null
@@ -1,429 +0,0 @@
-;;; bytecomp-testsuite.el
-
-;; Copyright (C) 2008-2015 Free Software Foundation, Inc.
-
-;; Author: Shigeru Fukaya <shigeru.fukaya@gmail.com>
-;; Created: November 2008
-;; Keywords: internal
-;; Human-Keywords: 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/>.
-
-;;; Commentary:
-
-(require 'ert)
-
-;;; Code:
-(defconst byte-opt-testsuite-arith-data
- '(
- ;; some functional tests
- (let ((a most-positive-fixnum) (b 1) (c 1.0)) (+ a b c))
- (let ((a most-positive-fixnum) (b -2) (c 1.0)) (- a b c))
- (let ((a most-positive-fixnum) (b 2) (c 1.0)) (* a b c))
- (let ((a 3) (b 2) (c 1.0)) (/ a b c))
- (let ((a (+ 1 (expt 2 -64))) (b (expt 2 -65))) (+ a -1 b))
- (let ((a (+ 1 (expt 2 -64))) (b (expt 2 -65))) (- a 1 (- b)))
- ;; This fails. Should it be a bug?
- ;; (let ((a (expt 2 -1074)) (b 0.125)) (* a 8 b))
- (let ((a 1.0)) (* a 0))
- (let ((a 1.0)) (* a 2.0 0))
- (let ((a 1.0)) (/ 0 a))
- (let ((a 1.0)) (/ 3 a 2))
- (let ((a most-positive-fixnum) (b 2.0)) (* a 2 b))
- (let ((a 3) (b 2)) (/ a b 1.0))
- (/ 3 -1)
- (+ 4 3 2 1)
- (+ 4 3 2.0 1)
- (- 4 3 2 1) ; not new, for reference
- (- 4 3 2.0 1) ; not new, for reference
- (* 4 3 2 1)
- (* 4 3 2.0 1)
- (/ 4 3 2 1)
- (/ 4 3 2.0 1)
- (let ((a 3) (b 2)) (+ a b 1))
- (let ((a 3) (b 2)) (+ a b -1))
- (let ((a 3) (b 2)) (- a b 1))
- (let ((a 3) (b 2)) (- a b -1))
- (let ((a 3) (b 2)) (+ a b a 1))
- (let ((a 3) (b 2)) (+ a b a -1))
- (let ((a 3) (b 2)) (- a b a 1))
- (let ((a 3) (b 2)) (- a b a -1))
- (let ((a 3) (b 2)) (* a b -1))
- (let ((a 3) (b 2)) (* a -1))
- (let ((a 3) (b 2)) (/ a b 1))
- (let ((a 3) (b 2)) (/ (+ a b) 1))
-
- ;; coverage test
- (let ((a 3) (b 2) (c 1.0)) (+))
- (let ((a 3) (b 2) (c 1.0)) (+ 2))
- (let ((a 3) (b 2) (c 1.0)) (+ 2 0))
- (let ((a 3) (b 2) (c 1.0)) (+ 2 0.0))
- (let ((a 3) (b 2) (c 1.0)) (+ 2.0))
- (let ((a 3) (b 2) (c 1.0)) (+ 2.0 0))
- (let ((a 3) (b 2) (c 1.0)) (+ 2.0 0.0))
- (let ((a 3) (b 2) (c 1.0)) (+ 0 2))
- (let ((a 3) (b 2) (c 1.0)) (+ 0 2.0))
- (let ((a 3) (b 2) (c 1.0)) (+ 0.0 2))
- (let ((a 3) (b 2) (c 1.0)) (+ 0.0 2.0))
- (let ((a 3) (b 2) (c 1.0)) (+ a))
- (let ((a 3) (b 2) (c 1.0)) (+ a 0))
- (let ((a 3) (b 2) (c 1.0)) (+ a 0.0))
- (let ((a 3) (b 2) (c 1.0)) (+ 0 a))
- (let ((a 3) (b 2) (c 1.0)) (+ 0.0 a))
- (let ((a 3) (b 2) (c 1.0)) (+ c 0))
- (let ((a 3) (b 2) (c 1.0)) (+ c 0.0))
- (let ((a 3) (b 2) (c 1.0)) (+ 0 c))
- (let ((a 3) (b 2) (c 1.0)) (+ 0.0 c))
- (let ((a 3) (b 2) (c 1.0)) (+ a b 0 c 0))
- (let ((a 3) (b 2) (c 1.0)) (+ 0 a))
- (let ((a 3) (b 2) (c 1.0)) (+ 0 a b))
- (let ((a 3) (b 2) (c 1.0)) (+ 0 a b c))
- (let ((a 3) (b 2) (c 1.0)) (+ 1 2 3))
- (let ((a 3) (b 2) (c 1.0)) (+ 3.0 2.0 1))
- (let ((a 3) (b 2) (c 1.0)) (+ 3.0 2.0 1 4))
- (let ((a 3) (b 2) (c 1.0)) (+ a 1))
- (let ((a 3) (b 2) (c 1.0)) (+ a -1))
- (let ((a 3) (b 2) (c 1.0)) (+ 1 a))
- (let ((a 3) (b 2) (c 1.0)) (+ -1 a))
- (let ((a 3) (b 2) (c 1.0)) (+ c 1))
- (let ((a 3) (b 2) (c 1.0)) (+ c -1))
- (let ((a 3) (b 2) (c 1.0)) (+ 1 c))
- (let ((a 3) (b 2) (c 1.0)) (+ -1 c))
- (let ((a 3) (b 2) (c 1.0)) (+ a b 0))
- (let ((a 3) (b 2) (c 1.0)) (+ a b 1))
- (let ((a 3) (b 2) (c 1.0)) (+ a b -1))
- (let ((a 3) (b 2) (c 1.0)) (+ a b 2))
- (let ((a 3) (b 2) (c 1.0)) (+ 1 a b c))
- (let ((a 3) (b 2) (c 1.0)) (+ a b c 0))
- (let ((a 3) (b 2) (c 1.0)) (+ a b c 1))
- (let ((a 3) (b 2) (c 1.0)) (+ a b c -1))
-
- (let ((a 3) (b 2) (c 1.0)) (-))
- (let ((a 3) (b 2) (c 1.0)) (- 2))
- (let ((a 3) (b 2) (c 1.0)) (- 2 0))
- (let ((a 3) (b 2) (c 1.0)) (- 2 0.0))
- (let ((a 3) (b 2) (c 1.0)) (- 2.0))
- (let ((a 3) (b 2) (c 1.0)) (- 2.0 0))
- (let ((a 3) (b 2) (c 1.0)) (- 2.0 0.0))
- (let ((a 3) (b 2) (c 1.0)) (- 0 2))
- (let ((a 3) (b 2) (c 1.0)) (- 0 2.0))
- (let ((a 3) (b 2) (c 1.0)) (- 0.0 2))
- (let ((a 3) (b 2) (c 1.0)) (- 0.0 2.0))
- (let ((a 3) (b 2) (c 1.0)) (- a))
- (let ((a 3) (b 2) (c 1.0)) (- a 0))
- (let ((a 3) (b 2) (c 1.0)) (- a 0.0))
- (let ((a 3) (b 2) (c 1.0)) (- 0 a))
- (let ((a 3) (b 2) (c 1.0)) (- 0.0 a))
- (let ((a 3) (b 2) (c 1.0)) (- c 0))
- (let ((a 3) (b 2) (c 1.0)) (- c 0.0))
- (let ((a 3) (b 2) (c 1.0)) (- 0 c))
- (let ((a 3) (b 2) (c 1.0)) (- 0.0 c))
- (let ((a 3) (b 2) (c 1.0)) (- a b 0 c 0))
- (let ((a 3) (b 2) (c 1.0)) (- 0 a))
- (let ((a 3) (b 2) (c 1.0)) (- 0 a b))
- (let ((a 3) (b 2) (c 1.0)) (- 0 a b c))
- (let ((a 3) (b 2) (c 1.0)) (- 1 2 3))
- (let ((a 3) (b 2) (c 1.0)) (- 3.0 2.0 1))
- (let ((a 3) (b 2) (c 1.0)) (- 3.0 2.0 1 4))
- (let ((a 3) (b 2) (c 1.0)) (- a 1))
- (let ((a 3) (b 2) (c 1.0)) (- a -1))
- (let ((a 3) (b 2) (c 1.0)) (- 1 a))
- (let ((a 3) (b 2) (c 1.0)) (- -1 a))
- (let ((a 3) (b 2) (c 1.0)) (- c 1))
- (let ((a 3) (b 2) (c 1.0)) (- c -1))
- (let ((a 3) (b 2) (c 1.0)) (- 1 c))
- (let ((a 3) (b 2) (c 1.0)) (- -1 c))
- (let ((a 3) (b 2) (c 1.0)) (- a b 0))
- (let ((a 3) (b 2) (c 1.0)) (- a b 1))
- (let ((a 3) (b 2) (c 1.0)) (- a b -1))
- (let ((a 3) (b 2) (c 1.0)) (- a b 2))
- (let ((a 3) (b 2) (c 1.0)) (- 1 a b c))
- (let ((a 3) (b 2) (c 1.0)) (- a b c 0))
- (let ((a 3) (b 2) (c 1.0)) (- a b c 1))
- (let ((a 3) (b 2) (c 1.0)) (- a b c -1))
-
- (let ((a 3) (b 2) (c 1.0)) (*))
- (let ((a 3) (b 2) (c 1.0)) (* 2))
- (let ((a 3) (b 2) (c 1.0)) (* 2 0))
- (let ((a 3) (b 2) (c 1.0)) (* 2 0.0))
- (let ((a 3) (b 2) (c 1.0)) (* 2.0))
- (let ((a 3) (b 2) (c 1.0)) (* 2.0 0))
- (let ((a 3) (b 2) (c 1.0)) (* 2.0 0.0))
- (let ((a 3) (b 2) (c 1.0)) (* 0 2))
- (let ((a 3) (b 2) (c 1.0)) (* 0 2.0))
- (let ((a 3) (b 2) (c 1.0)) (* 0.0 2))
- (let ((a 3) (b 2) (c 1.0)) (* 0.0 2.0))
- (let ((a 3) (b 2) (c 1.0)) (* a))
- (let ((a 3) (b 2) (c 1.0)) (* a 0))
- (let ((a 3) (b 2) (c 1.0)) (* a 0.0))
- (let ((a 3) (b 2) (c 1.0)) (* 0 a))
- (let ((a 3) (b 2) (c 1.0)) (* 0.0 a))
- (let ((a 3) (b 2) (c 1.0)) (* c 0))
- (let ((a 3) (b 2) (c 1.0)) (* c 0.0))
- (let ((a 3) (b 2) (c 1.0)) (* 0 c))
- (let ((a 3) (b 2) (c 1.0)) (* 0.0 c))
- (let ((a 3) (b 2) (c 1.0)) (* a b 0 c 0))
- (let ((a 3) (b 2) (c 1.0)) (* 0 a))
- (let ((a 3) (b 2) (c 1.0)) (* 0 a b))
- (let ((a 3) (b 2) (c 1.0)) (* 0 a b c))
- (let ((a 3) (b 2) (c 1.0)) (* 1 2 3))
- (let ((a 3) (b 2) (c 1.0)) (* 3.0 2.0 1))
- (let ((a 3) (b 2) (c 1.0)) (* 3.0 2.0 1 4))
- (let ((a 3) (b 2) (c 1.0)) (* a 1))
- (let ((a 3) (b 2) (c 1.0)) (* a -1))
- (let ((a 3) (b 2) (c 1.0)) (* 1 a))
- (let ((a 3) (b 2) (c 1.0)) (* -1 a))
- (let ((a 3) (b 2) (c 1.0)) (* c 1))
- (let ((a 3) (b 2) (c 1.0)) (* c -1))
- (let ((a 3) (b 2) (c 1.0)) (* 1 c))
- (let ((a 3) (b 2) (c 1.0)) (* -1 c))
- (let ((a 3) (b 2) (c 1.0)) (* a b 0))
- (let ((a 3) (b 2) (c 1.0)) (* a b 1))
- (let ((a 3) (b 2) (c 1.0)) (* a b -1))
- (let ((a 3) (b 2) (c 1.0)) (* a b 2))
- (let ((a 3) (b 2) (c 1.0)) (* 1 a b c))
- (let ((a 3) (b 2) (c 1.0)) (* a b c 0))
- (let ((a 3) (b 2) (c 1.0)) (* a b c 1))
- (let ((a 3) (b 2) (c 1.0)) (* a b c -1))
-
- (let ((a 3) (b 2) (c 1.0)) (/))
- (let ((a 3) (b 2) (c 1.0)) (/ 2))
- (let ((a 3) (b 2) (c 1.0)) (/ 2 0))
- (let ((a 3) (b 2) (c 1.0)) (/ 2 0.0))
- (let ((a 3) (b 2) (c 1.0)) (/ 2.0))
- (let ((a 3) (b 2) (c 1.0)) (/ 2.0 0))
- (let ((a 3) (b 2) (c 1.0)) (/ 2.0 0.0))
- (let ((a 3) (b 2) (c 1.0)) (/ 0 2))
- (let ((a 3) (b 2) (c 1.0)) (/ 0 2.0))
- (let ((a 3) (b 2) (c 1.0)) (/ 0.0 2))
- (let ((a 3) (b 2) (c 1.0)) (/ 0.0 2.0))
- (let ((a 3) (b 2) (c 1.0)) (/ a))
- (let ((a 3) (b 2) (c 1.0)) (/ a 0))
- (let ((a 3) (b 2) (c 1.0)) (/ a 0.0))
- (let ((a 3) (b 2) (c 1.0)) (/ 0 a))
- (let ((a 3) (b 2) (c 1.0)) (/ 0.0 a))
- (let ((a 3) (b 2) (c 1.0)) (/ c 0))
- (let ((a 3) (b 2) (c 1.0)) (/ c 0.0))
- (let ((a 3) (b 2) (c 1.0)) (/ 0 c))
- (let ((a 3) (b 2) (c 1.0)) (/ 0.0 c))
- (let ((a 3) (b 2) (c 1.0)) (/ a b 0 c 0))
- (let ((a 3) (b 2) (c 1.0)) (/ 0 a))
- (let ((a 3) (b 2) (c 1.0)) (/ 0 a b))
- (let ((a 3) (b 2) (c 1.0)) (/ 0 a b c))
- (let ((a 3) (b 2) (c 1.0)) (/ 1 2 3))
- (let ((a 3) (b 2) (c 1.0)) (/ 3.0 2.0 1))
- (let ((a 3) (b 2) (c 1.0)) (/ 3.0 2.0 1 4))
- (let ((a 3) (b 2) (c 1.0)) (/ a 1))
- (let ((a 3) (b 2) (c 1.0)) (/ a -1))
- (let ((a 3) (b 2) (c 1.0)) (/ 1 a))
- (let ((a 3) (b 2) (c 1.0)) (/ -1 a))
- (let ((a 3) (b 2) (c 1.0)) (/ c 1))
- (let ((a 3) (b 2) (c 1.0)) (/ c -1))
- (let ((a 3) (b 2) (c 1.0)) (/ 1 c))
- (let ((a 3) (b 2) (c 1.0)) (/ -1 c))
- (let ((a 3) (b 2) (c 1.0)) (/ a b 0))
- (let ((a 3) (b 2) (c 1.0)) (/ a b 1))
- (let ((a 3) (b 2) (c 1.0)) (/ a b -1))
- (let ((a 3) (b 2) (c 1.0)) (/ a b 2))
- (let ((a 3) (b 2) (c 1.0)) (/ 1 a b c))
- (let ((a 3) (b 2) (c 1.0)) (/ a b c 0))
- (let ((a 3) (b 2) (c 1.0)) (/ a b c 1))
- (let ((a 3) (b 2) (c 1.0)) (/ a b c -1)))
- "List of expression for test.
-Each element will be executed by interpreter and with
-bytecompiled code, and their results compared.")
-
-(defun bytecomp-check-1 (pat)
- "Return non-nil if PAT is the same whether directly evalled or compiled."
- (let ((warning-minimum-log-level :emergency)
- (byte-compile-warnings nil)
- (v0 (condition-case nil
- (eval pat)
- (error nil)))
- (v1 (condition-case nil
- (funcall (byte-compile (list 'lambda nil pat)))
- (error nil))))
- (equal v0 v1)))
-
-(put 'bytecomp-check-1 'ert-explainer 'bytecomp-explain-1)
-
-(defun bytecomp-explain-1 (pat)
- (let ((v0 (condition-case nil
- (eval pat)
- (error nil)))
- (v1 (condition-case nil
- (funcall (byte-compile (list 'lambda nil pat)))
- (error nil))))
- (format "Expression `%s' gives `%s' if directly evalled, `%s' if compiled."
- pat v0 v1)))
-
-(ert-deftest bytecomp-tests ()
- "Test the Emacs byte compiler."
- (dolist (pat byte-opt-testsuite-arith-data)
- (should (bytecomp-check-1 pat))))
-
-(defun test-byte-opt-arithmetic (&optional arg)
- "Unit test for byte-opt arithmetic operations.
-Subtests signal errors if something goes wrong."
- (interactive "P")
- (switch-to-buffer (generate-new-buffer "*Font Pase Test*"))
- (let ((warning-minimum-log-level :emergency)
- (byte-compile-warnings nil)
- (pass-face '((t :foreground "green")))
- (fail-face '((t :foreground "red")))
- (print-escape-nonascii t)
- (print-escape-newlines t)
- (print-quoted t)
- v0 v1)
- (dolist (pat byte-opt-testsuite-arith-data)
- (condition-case nil
- (setq v0 (eval pat))
- (error (setq v0 nil)))
- (condition-case nil
- (setq v1 (funcall (byte-compile (list 'lambda nil pat))))
- (error (setq v1 nil)))
- (insert (format "%s" pat))
- (indent-to-column 65)
- (if (equal v0 v1)
- (insert (propertize "OK" 'face pass-face))
- (insert (propertize "FAIL\n" 'face fail-face))
- (indent-to-column 55)
- (insert (propertize (format "[%s] vs [%s]" v0 v1)
- 'face fail-face)))
- (insert "\n"))))
-
-(defun test-byte-comp-compile-and-load (compile &rest forms)
- (let ((elfile nil)
- (elcfile nil))
- (unwind-protect
- (progn
- (setf elfile (make-temp-file "test-bytecomp" nil ".el"))
- (when compile
- (setf elcfile (make-temp-file "test-bytecomp" nil ".elc")))
- (with-temp-buffer
- (dolist (form forms)
- (print form (current-buffer)))
- (write-region (point-min) (point-max) elfile nil 'silent))
- (if compile
- (let ((byte-compile-dest-file-function
- (lambda (e) elcfile)))
- (byte-compile-file elfile t))
- (load elfile nil 'nomessage)))
- (when elfile (delete-file elfile))
- (when elcfile (delete-file elcfile)))))
-(put 'test-byte-comp-compile-and-load 'lisp-indent-function 1)
-
-(ert-deftest test-byte-comp-macro-expansion ()
- (test-byte-comp-compile-and-load t
- '(progn (defmacro abc (arg) 1) (defun def () (abc 2))))
- (should (equal (funcall 'def) 1)))
-
-(ert-deftest test-byte-comp-macro-expansion-eval-and-compile ()
- (test-byte-comp-compile-and-load t
- '(eval-and-compile (defmacro abc (arg) -1) (defun def () (abc 2))))
- (should (equal (funcall 'def) -1)))
-
-(ert-deftest test-byte-comp-macro-expansion-eval-when-compile ()
- ;; Make sure we interpret eval-when-compile forms properly. CLISP
- ;; and SBCL interpreter eval-when-compile (well, the CL equivalent)
- ;; in the same way.
- (test-byte-comp-compile-and-load t
- '(eval-when-compile
- (defmacro abc (arg) -10)
- (defun abc-1 () (abc 2)))
- '(defmacro abc-2 () (abc-1))
- '(defun def () (abc-2)))
- (should (equal (funcall 'def) -10)))
-
-(ert-deftest test-byte-comp-macro-expand-lexical-override ()
- ;; Intuitively, one might expect the defmacro to override the
- ;; macrolet since macrolet's is explicitly called out as being
- ;; equivalent to toplevel, but CLISP and SBCL both evaluate the form
- ;; this way, so we should too.
- (test-byte-comp-compile-and-load t
- '(require 'cl-lib)
- '(cl-macrolet ((m () 4))
- (defmacro m () 5)
- (defun def () (m))))
- (should (equal (funcall 'def) 4)))
-
-(ert-deftest bytecomp-tests--warnings ()
- (with-current-buffer (get-buffer-create "*Compile-Log*")
- (let ((inhibit-read-only t)) (erase-buffer)))
- (test-byte-comp-compile-and-load t
- '(progn
- (defun my-test0 ()
- (my--test11 3)
- (my--test12 3)
- (my--test2 5))
- (defmacro my--test11 (arg) (+ arg 1))
- (eval-and-compile
- (defmacro my--test12 (arg) (+ arg 1))
- (defun my--test2 (arg) (+ arg 1)))))
- (with-current-buffer (get-buffer-create "*Compile-Log*")
- (goto-char (point-min))
- ;; Should warn that mt--test1[12] are first used as functions.
- ;; The second alternative is for when the file name is so long
- ;; that pretty-printing starts the message on the next line.
- (should (or (re-search-forward "my--test11:\n.*macro" nil t)
- (re-search-forward "my--test11:\n.*:\n.*macro" nil t)))
- (should (or (re-search-forward "my--test12:\n.*macro" nil t)
- (re-search-forward "my--test12:\n.*:\n.*macro" nil t)))
- (goto-char (point-min))
- ;; Should not warn that mt--test2 is not known to be defined.
- (should-not (re-search-forward "my--test2" nil t))))
-
-(ert-deftest test-eager-load-macro-expansion ()
- (test-byte-comp-compile-and-load nil
- '(progn (defmacro abc (arg) 1) (defun def () (abc 2))))
- (should (equal (funcall 'def) 1)))
-
-(ert-deftest test-eager-load-macro-expansion-eval-and-compile ()
- (test-byte-comp-compile-and-load nil
- '(eval-and-compile (defmacro abc (arg) -1) (defun def () (abc 2))))
- (should (equal (funcall 'def) -1)))
-
-(ert-deftest test-eager-load-macro-expansion-eval-when-compile ()
- ;; Make sure we interpret eval-when-compile forms properly. CLISP
- ;; and SBCL interpreter eval-when-compile (well, the CL equivalent)
- ;; in the same way.
- (test-byte-comp-compile-and-load nil
- '(eval-when-compile
- (defmacro abc (arg) -10)
- (defun abc-1 () (abc 2)))
- '(defmacro abc-2 () (abc-1))
- '(defun def () (abc-2)))
- (should (equal (funcall 'def) -10)))
-
-(ert-deftest test-eager-load-macro-expand-lexical-override ()
- ;; Intuitively, one might expect the defmacro to override the
- ;; macrolet since macrolet's is explicitly called out as being
- ;; equivalent to toplevel, but CLISP and SBCL both evaluate the form
- ;; this way, so we should too.
- (test-byte-comp-compile-and-load nil
- '(require 'cl-lib)
- '(cl-macrolet ((m () 4))
- (defmacro m () 5)
- (defun def () (m))))
- (should (equal (funcall 'def) 4)))
-
-
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
-
-(provide 'byte-opt-testsuite)
-
diff --git a/test/automated/calc-tests.el b/test/automated/calc-tests.el
deleted file mode 100644
index d5252ea62a9..00000000000
--- a/test/automated/calc-tests.el
+++ /dev/null
@@ -1,94 +0,0 @@
-;;; calc-tests.el --- tests for calc -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
-
-;; Author: Leo Liu <sdl.web@gmail.com>
-;; Keywords: maint
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'ert)
-(require 'calc)
-(require 'calc-ext)
-(require 'calc-units)
-
-;; XXX The order in which calc libraries (in particular calc-units)
-;; are loaded influences whether a calc integer in an expression
-;; involving units is represented as a lisp integer or a calc float,
-;; see bug#19582. Until this will be fixed the following function can
-;; be used to compare such calc expressions.
-(defun calc-tests-equal (a b)
- "Like `equal' but allow for different representations of numbers.
-For example: (calc-tests-equal 10 '(float 1 1)) => t.
-A and B should be calc expressions."
- (cond ((math-numberp a)
- (and (math-numberp b)
- (math-equal a b)))
- ((atom a)
- (equal a b))
- ((consp b)
- ;; Can't be dotted or circular.
- (and (= (length a) (length b))
- (equal (car a) (car b))
- (cl-every #'calc-tests-equal (cdr a) (cdr b))))))
-
-(defun calc-tests-simple (fun string &rest args)
- "Push STRING on the calc stack, then call FUN and return the new top.
-The result is a calc (i.e., lisp) expression, not its string representation.
-Also pop the entire stack afterwards.
-An existing calc stack is reused, otherwise a new one is created."
- (calc-eval string 'push)
- (prog1
- (ignore-errors
- (apply fun args)
- (calc-top-n 1))
- (calc-pop 0)))
-
-(ert-deftest test-math-bignum ()
- ;; bug#17556
- (let ((n (math-bignum most-negative-fixnum)))
- (should (math-negp n))
- (should (cl-notany #'cl-minusp (cdr n)))))
-
-(ert-deftest test-calc-remove-units ()
- (should (calc-tests-equal (calc-tests-simple #'calc-remove-units "-1 m") -1)))
-
-(ert-deftest test-calc-extract-units ()
- (should (calc-tests-equal (calc-tests-simple #'calc-extract-units "-1 m")
- '(var m var-m)))
- (should (calc-tests-equal (calc-tests-simple #'calc-extract-units "-1 m*cm")
- '(* (float 1 -2) (^ (var m var-m) 2)))))
-
-(ert-deftest test-calc-convert-units ()
- ;; Used to ask for `(The expression is unitless when simplified) Old Units: '.
- (should (calc-tests-equal (calc-tests-simple #'calc-convert-units "-1 m" nil "cm")
- '(* -100 (var cm var-cm))))
- ;; Gave wrong result.
- (should (calc-tests-equal (calc-tests-simple #'calc-convert-units "-1 m"
- (math-read-expr "1m") "cm")
- '(* -100 (var cm var-cm)))))
-
-(provide 'calc-tests)
-;;; calc-tests.el ends here
-
-;; Local Variables:
-;; bug-reference-url-format: "http://debbugs.gnu.org/%s"
-;; End:
diff --git a/test/automated/character-fold-tests.el b/test/automated/character-fold-tests.el
deleted file mode 100644
index 2b1a15c9e76..00000000000
--- a/test/automated/character-fold-tests.el
+++ /dev/null
@@ -1,58 +0,0 @@
-;;; character-fold-tests.el --- Tests for character-fold.el -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(require 'ert)
-(require 'character-fold)
-
-(defun character-fold--random-word (n)
- (mapconcat (lambda (_) (string (+ 9 (random 117))))
- (make-list n nil) ""))
-
-(defun character-fold--test-search-with-contents (contents string)
- (with-temp-buffer
- (insert contents)
- (goto-char (point-min))
- (should (search-forward-regexp (character-fold-to-regexp string) nil 'noerror))
- (goto-char (point-min))
- (should (character-fold-search-forward string nil 'noerror))
- (should (character-fold-search-backward string nil 'noerror))))
-
-
-(ert-deftest character-fold--test-consistency ()
- (dotimes (n 100)
- (let ((w (character-fold--random-word n)))
- ;; A folded string should always match the original string.
- (character-fold--test-search-with-contents w w))))
-
-(ert-deftest character-fold--test-lax-whitespace ()
- (dotimes (n 100)
- (let ((w1 (character-fold--random-word n))
- (w2 (character-fold--random-word n))
- (search-spaces-regexp "\\s-+"))
- (character-fold--test-search-with-contents
- (concat w1 "\s\n\s\t\f\t\n\r\t" w2)
- (concat w1 " " w2))
- (character-fold--test-search-with-contents
- (concat w1 "\s\n\s\t\f\t\n\r\t" w2)
- (concat w1 (make-string 90 ?\s) w2)))))
-
-(provide 'character-fold-tests)
-;;; character-fold-tests.el ends here
diff --git a/test/automated/cl-generic-tests.el b/test/automated/cl-generic-tests.el
deleted file mode 100644
index 2703b44dee5..00000000000
--- a/test/automated/cl-generic-tests.el
+++ /dev/null
@@ -1,223 +0,0 @@
-;;; cl-generic-tests.el --- Tests for cl-generic.el functionality -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(eval-when-compile (require 'ert)) ;Don't indirectly require cl-lib at run-time.
-(require 'cl-generic)
-
-(fmakunbound 'cl--generic-1)
-(cl-defgeneric cl--generic-1 (x y))
-(cl-defgeneric (setf cl--generic-1) (v y z) "My generic doc.")
-
-(ert-deftest cl-generic-test-00 ()
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 (x y))
- (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
- (should (equal (cl--generic-1 'a 'b) '(a . b))))
-
-(ert-deftest cl-generic-test-01-eql ()
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 (x y))
- (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
- (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
- (cons "quatre" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 ((_x (eql 5)) _y)
- (cons "cinq" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 ((_x (eql 6)) y)
- (cons "six" (cl-call-next-method 'a y)))
- (should (equal (cl--generic-1 'a nil) '(a)))
- (should (equal (cl--generic-1 4 nil) '("quatre" 4)))
- (should (equal (cl--generic-1 5 nil) '("cinq" 5)))
- (should (equal (cl--generic-1 6 nil) '("six" a))))
-
-(cl-defstruct cl-generic-struct-parent a b)
-(cl-defstruct (cl-generic-struct-child1 (:include cl-generic-struct-parent)) c)
-(cl-defstruct (cl-generic-struct-child11 (:include cl-generic-struct-child1)) d)
-(cl-defstruct (cl-generic-struct-child2 (:include cl-generic-struct-parent)) e)
-
-(ert-deftest cl-generic-test-02-struct ()
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 (x y) "My doc.")
- (cl-defmethod cl--generic-1 ((x t) y) "Doc 1." (cons x y))
- (cl-defmethod cl--generic-1 ((_x cl-generic-struct-parent) y)
- "Doc 2." (cons "parent" (cl-call-next-method 'a y)))
- (cl-defmethod cl--generic-1 ((_x cl-generic-struct-child1) _y)
- (cons "child1" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 :around ((_x t) _y)
- (cons "around" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 :around ((_x cl-generic-struct-child11) _y)
- (cons "child11" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 ((_x cl-generic-struct-child2) _y)
- (cons "child2" (cl-call-next-method)))
- (should (equal (cl--generic-1 (make-cl-generic-struct-child1) nil)
- '("around" "child1" "parent" a)))
- (should (equal (cl--generic-1 (make-cl-generic-struct-child2) nil)
- '("around""child2" "parent" a)))
- (should (equal (cl--generic-1 (make-cl-generic-struct-child11) nil)
- '("child11" "around""child1" "parent" a))))
-
-;; I don't know how to put this inside an `ert-test'. This tests that `setf'
-;; can be used directly inside the body of the setf method.
-(cl-defmethod (setf cl--generic-2) (v (y integer) z)
- (setf (cl--generic-2 (nth y z) z) v))
-
-(ert-deftest cl-generic-test-03-setf ()
- (cl-defmethod (setf cl--generic-1) (v (y t) z) (list v y z))
- (cl-defmethod (setf cl--generic-1) (v (_y (eql 4)) z) (list v "four" z))
- (should (equal (setf (cl--generic-1 'a 'b) 'v) '(v a b)))
- (should (equal (setf (cl--generic-1 4 'b) 'v) '(v "four" b)))
- (let ((x ()))
- (should (equal (setf (cl--generic-1 (progn (push 1 x) 'a)
- (progn (push 2 x) 'b))
- (progn (push 3 x) 'v))
- '(v a b)))
- (should (equal x '(3 2 1)))))
-
-(ert-deftest cl-generic-test-04-overlapping-tagcodes ()
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 (x y) "My doc.")
- (cl-defmethod cl--generic-1 ((y t) z) (list y z))
- (cl-defmethod cl--generic-1 ((_y (eql 4)) _z)
- (cons "four" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 ((_y integer) _z)
- (cons "integer" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 ((_y number) _z)
- (cons "number" (cl-call-next-method)))
- (should (equal (cl--generic-1 'a 'b) '(a b)))
- (should (equal (cl--generic-1 1 'b) '("integer" "number" 1 b)))
- (should (equal (cl--generic-1 4 'b) '("four" "integer" "number" 4 b))))
-
-(ert-deftest cl-generic-test-05-alias ()
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 (x y) "My doc.")
- (defalias 'cl--generic-2 #'cl--generic-1)
- (cl-defmethod cl--generic-1 ((y t) z) (list y z))
- (cl-defmethod cl--generic-2 ((_y (eql 4)) _z)
- (cons "four" (cl-call-next-method)))
- (should (equal (cl--generic-1 4 'b) '("four" 4 b))))
-
-(ert-deftest cl-generic-test-06-multiple-dispatch ()
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 (x y) "My doc.")
- (cl-defmethod cl--generic-1 (x y) (list x y))
- (cl-defmethod cl--generic-1 (_x (_y integer))
- (cons "y-int" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 ((_x integer) _y)
- (cons "x-int" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 ((_x integer) (_y integer))
- (cons "x&y-int" (cl-call-next-method)))
- (should (equal (cl--generic-1 1 2) '("x&y-int" "x-int" "y-int" 1 2))))
-
-(ert-deftest cl-generic-test-07-apo ()
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 (x y)
- (:documentation "My doc.") (:argument-precedence-order y x))
- (cl-defmethod cl--generic-1 (x y) (list x y))
- (cl-defmethod cl--generic-1 (_x (_y integer))
- (cons "y-int" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 ((_x integer) _y)
- (cons "x-int" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 ((_x integer) (_y integer))
- (cons "x&y-int" (cl-call-next-method)))
- (should (equal (cl--generic-1 1 2) '("x&y-int" "y-int" "x-int" 1 2))))
-
-(ert-deftest cl-generic-test-08-after/before ()
- (let ((log ()))
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 (x y))
- (cl-defmethod cl--generic-1 ((_x t) y) (cons y log))
- (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
- (cons "quatre" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 :after (x _y)
- (push (list :after x) log))
- (cl-defmethod cl--generic-1 :before (x _y)
- (push (list :before x) log))
- (should (equal (cl--generic-1 4 6) '("quatre" 6 (:before 4))))
- (should (equal log '((:after 4) (:before 4))))))
-
-(defun cl--generic-test-advice (&rest args) (cons "advice" (apply args)))
-
-(ert-deftest cl-generic-test-09-advice ()
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 (x y) "My doc.")
- (cl-defmethod cl--generic-1 (x y) (list x y))
- (advice-add 'cl--generic-1 :around #'cl--generic-test-advice)
- (should (equal (cl--generic-1 4 5) '("advice" 4 5)))
- (cl-defmethod cl--generic-1 ((_x integer) _y)
- (cons "integer" (cl-call-next-method)))
- (should (equal (cl--generic-1 4 5) '("advice" "integer" 4 5)))
- (advice-remove 'cl--generic-1 #'cl--generic-test-advice)
- (should (equal (cl--generic-1 4 5) '("integer" 4 5))))
-
-(ert-deftest cl-generic-test-10-weird ()
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 (x &rest r) "My doc.")
- (cl-defmethod cl--generic-1 (x &rest r) (cons x r))
- ;; This kind of definition is not valid according to CLHS, but it does show
- ;; up in EIEIO's tests for no-next-method, so we should either
- ;; detect it and signal an error or do something meaningful with it.
- (cl-defmethod cl--generic-1 (x (y integer) &rest r)
- `("integer" ,y ,x ,@r))
- (should (equal (cl--generic-1 'a 'b) '(a b)))
- (should (equal (cl--generic-1 1 2) '("integer" 2 1))))
-
-(ert-deftest cl-generic-test-11-next-method-p ()
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 (x y))
- (cl-defmethod cl--generic-1 ((x t) y)
- (list x y (cl-next-method-p)))
- (cl-defmethod cl--generic-1 ((_x (eql 4)) _y)
- (cl-list* "quatre" (cl-next-method-p) (cl-call-next-method)))
- (should (equal (cl--generic-1 4 5) '("quatre" t 4 5 nil))))
-
-(ert-deftest cl-generic-test-12-context ()
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 ())
- (cl-defmethod cl--generic-1 (&context (overwrite-mode (eql t)))
- (list 'is-t (cl-call-next-method)))
- (cl-defmethod cl--generic-1 (&context (overwrite-mode (eql nil)))
- (list 'is-nil (cl-call-next-method)))
- (cl-defmethod cl--generic-1 () 'any)
- (should (equal (list (let ((overwrite-mode t)) (cl--generic-1))
- (let ((overwrite-mode nil)) (cl--generic-1))
- (let ((overwrite-mode 1)) (cl--generic-1)))
- '((is-t any) (is-nil any) any))))
-
-(ert-deftest cl-generic-test-13-head ()
- (fmakunbound 'cl--generic-1)
- (cl-defgeneric cl--generic-1 (x y))
- (cl-defmethod cl--generic-1 ((x t) y) (cons x y))
- (cl-defmethod cl--generic-1 ((_x (head 4)) _y)
- (cons "quatre" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 ((_x (head 5)) _y)
- (cons "cinq" (cl-call-next-method)))
- (cl-defmethod cl--generic-1 ((_x (head 6)) y)
- (cons "six" (cl-call-next-method 'a y)))
- (should (equal (cl--generic-1 'a nil) '(a)))
- (should (equal (cl--generic-1 '(4) nil) '("quatre" (4))))
- (should (equal (cl--generic-1 '(5) nil) '("cinq" (5))))
- (should (equal (cl--generic-1 '(6) nil) '("six" a))))
-
-(provide 'cl-generic-tests)
-;;; cl-generic-tests.el ends here
diff --git a/test/automated/cl-lib-tests.el b/test/automated/cl-lib-tests.el
deleted file mode 100644
index e2429b7de37..00000000000
--- a/test/automated/cl-lib-tests.el
+++ /dev/null
@@ -1,496 +0,0 @@
-;;; cl-lib.el --- tests for emacs-lisp/cl-lib.el -*- lexical-binding:t -*-
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; This file is part of GNU Emacs.
-
-;; This program 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.
-;;
-;; This program 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 this program. If not, see `http://www.gnu.org/licenses/'.
-
-;;; Commentary:
-
-;; Extracted from ert-tests.el, back when ert used to reimplement some
-;; cl functions.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'ert)
-
-(ert-deftest cl-lib-test-remprop ()
- (let ((x (cl-gensym)))
- (should (equal (symbol-plist x) '()))
- ;; Remove nonexistent property on empty plist.
- (cl-remprop x 'b)
- (should (equal (symbol-plist x) '()))
- (put x 'a 1)
- (should (equal (symbol-plist x) '(a 1)))
- ;; Remove nonexistent property on nonempty plist.
- (cl-remprop x 'b)
- (should (equal (symbol-plist x) '(a 1)))
- (put x 'b 2)
- (put x 'c 3)
- (put x 'd 4)
- (should (equal (symbol-plist x) '(a 1 b 2 c 3 d 4)))
- ;; Remove property that is neither first nor last.
- (cl-remprop x 'c)
- (should (equal (symbol-plist x) '(a 1 b 2 d 4)))
- ;; Remove last property from a plist of length >1.
- (cl-remprop x 'd)
- (should (equal (symbol-plist x) '(a 1 b 2)))
- ;; Remove first property from a plist of length >1.
- (cl-remprop x 'a)
- (should (equal (symbol-plist x) '(b 2)))
- ;; Remove property when there is only one.
- (cl-remprop x 'b)
- (should (equal (symbol-plist x) '()))))
-
-(ert-deftest cl-lib-test-remove-if-not ()
- (let ((list (list 'a 'b 'c 'd))
- (i 0))
- (let ((result (cl-remove-if-not (lambda (x)
- (should (eql x (nth i list)))
- (cl-incf i)
- (member i '(2 3)))
- list)))
- (should (equal i 4))
- (should (equal result '(b c)))
- (should (equal list '(a b c d)))))
- (should (equal '()
- (cl-remove-if-not (lambda (_x) (should nil)) '()))))
-
-(ert-deftest cl-lib-test-remove ()
- (let ((list (list 'a 'b 'c 'd))
- (key-index 0)
- (test-index 0))
- (let ((result
- (cl-remove 'foo list
- :key (lambda (x)
- (should (eql x (nth key-index list)))
- (prog1
- (list key-index x)
- (cl-incf key-index)))
- :test
- (lambda (a b)
- (should (eql a 'foo))
- (should (equal b (list test-index
- (nth test-index list))))
- (cl-incf test-index)
- (member test-index '(2 3))))))
- (should (equal key-index 4))
- (should (equal test-index 4))
- (should (equal result '(a d)))
- (should (equal list '(a b c d)))))
- (let ((x (cons nil nil))
- (y (cons nil nil)))
- (should (equal (cl-remove x (list x y))
- ;; or (list x), since we use `equal' -- the
- ;; important thing is that only one element got
- ;; removed, this proves that the default test is
- ;; `eql', not `equal'
- (list y)))))
-
-
-(ert-deftest cl-lib-test-set-functions ()
- (let ((c1 (cons nil nil))
- (c2 (cons nil nil))
- (sym (make-symbol "a")))
- (let ((e '())
- (a (list 'a 'b sym nil "" "x" c1 c2))
- (b (list c1 'y 'b sym 'x)))
- (should (equal (cl-set-difference e e) e))
- (should (equal (cl-set-difference a e) a))
- (should (equal (cl-set-difference e a) e))
- (should (equal (cl-set-difference a a) e))
- (should (equal (cl-set-difference b e) b))
- (should (equal (cl-set-difference e b) e))
- (should (equal (cl-set-difference b b) e))
- ;; Note: this test (and others) is sensitive to the order of the
- ;; result, which is not documented.
- (should (equal (cl-set-difference a b) (list 'a nil "" "x" c2)))
- (should (equal (cl-set-difference b a) (list 'y 'x)))
-
- ;; We aren't testing whether this is really using `eq' rather than `eql'.
- (should (equal (cl-set-difference e e :test 'eq) e))
- (should (equal (cl-set-difference a e :test 'eq) a))
- (should (equal (cl-set-difference e a :test 'eq) e))
- (should (equal (cl-set-difference a a :test 'eq) e))
- (should (equal (cl-set-difference b e :test 'eq) b))
- (should (equal (cl-set-difference e b :test 'eq) e))
- (should (equal (cl-set-difference b b :test 'eq) e))
- (should (equal (cl-set-difference a b :test 'eq) (list 'a nil "" "x" c2)))
- (should (equal (cl-set-difference b a :test 'eq) (list 'y 'x)))
-
- (should (equal (cl-union e e) e))
- (should (equal (cl-union a e) a))
- (should (equal (cl-union e a) a))
- (should (equal (cl-union a a) a))
- (should (equal (cl-union b e) b))
- (should (equal (cl-union e b) b))
- (should (equal (cl-union b b) b))
- (should (equal (cl-union a b) (list 'x 'y 'a 'b sym nil "" "x" c1 c2)))
-
- (should (equal (cl-union b a) (list 'x 'y 'a 'b sym nil "" "x" c1 c2)))
-
- (should (equal (cl-intersection e e) e))
- (should (equal (cl-intersection a e) e))
- (should (equal (cl-intersection e a) e))
- (should (equal (cl-intersection a a) a))
- (should (equal (cl-intersection b e) e))
- (should (equal (cl-intersection e b) e))
- (should (equal (cl-intersection b b) b))
- (should (equal (cl-intersection a b) (list sym 'b c1)))
- (should (equal (cl-intersection b a) (list sym 'b c1))))))
-
-(ert-deftest cl-lib-test-gensym ()
- ;; Since the expansion of `should' calls `cl-gensym' and thus has a
- ;; side-effect on `cl--gensym-counter', we have to make sure all
- ;; macros in our test body are expanded before we rebind
- ;; `cl--gensym-counter' and run the body. Otherwise, the test would
- ;; fail if run interpreted.
- (let ((body (byte-compile
- '(lambda ()
- (should (equal (symbol-name (cl-gensym)) "G0"))
- (should (equal (symbol-name (cl-gensym)) "G1"))
- (should (equal (symbol-name (cl-gensym)) "G2"))
- (should (equal (symbol-name (cl-gensym "foo")) "foo3"))
- (should (equal (symbol-name (cl-gensym "bar")) "bar4"))
- (should (equal cl--gensym-counter 5))))))
- (let ((cl--gensym-counter 0))
- (funcall body))))
-
-(ert-deftest cl-lib-test-coerce-to-vector ()
- (let* ((a (vector))
- (b (vector 1 a 3))
- (c (list))
- (d (list b a)))
- (should (eql (cl-coerce a 'vector) a))
- (should (eql (cl-coerce b 'vector) b))
- (should (equal (cl-coerce c 'vector) (vector)))
- (should (equal (cl-coerce d 'vector) (vector b a)))))
-
-(ert-deftest cl-lib-test-string-position ()
- (should (eql (cl-position ?x "") nil))
- (should (eql (cl-position ?a "abc") 0))
- (should (eql (cl-position ?b "abc") 1))
- (should (eql (cl-position ?c "abc") 2))
- (should (eql (cl-position ?d "abc") nil))
- (should (eql (cl-position ?A "abc") nil)))
-
-(ert-deftest cl-lib-test-mismatch ()
- (should (eql (cl-mismatch "" "") nil))
- (should (eql (cl-mismatch "" "a") 0))
- (should (eql (cl-mismatch "a" "a") nil))
- (should (eql (cl-mismatch "ab" "a") 1))
- (should (eql (cl-mismatch "Aa" "aA") 0))
- (should (eql (cl-mismatch '(a b c) '(a b d)) 2)))
-
-(ert-deftest cl-lib-test-loop ()
- (should (eql (cl-loop with (a b c) = '(1 2 3) return (+ a b c)) 6)))
-
-(ert-deftest cl-lib-keyword-names-versus-values ()
- (should (equal
- (funcall (cl-function (lambda (&key a b) (list a b)))
- :b :a :a 42)
- '(42 :a))))
-
-(cl-defstruct (mystruct
- (:constructor cl-lib--con-1 (&aux (abc 1)))
- (:constructor cl-lib--con-2 (&optional def) "Constructor docstring."))
- "General docstring."
- (abc 5 :readonly t) (def nil))
-(ert-deftest cl-lib-struct-accessors ()
- (let ((x (make-mystruct :abc 1 :def 2)))
- (should (eql (cl-struct-slot-value 'mystruct 'abc x) 1))
- (should (eql (cl-struct-slot-value 'mystruct 'def x) 2))
- (setf (cl-struct-slot-value 'mystruct 'def x) -1)
- (should (eql (cl-struct-slot-value 'mystruct 'def x) -1))
- (should (eql (cl-struct-slot-offset 'mystruct 'abc) 1))
- (should-error (cl-struct-slot-offset 'mystruct 'marypoppins))
- (should (pcase (cl-struct-slot-info 'mystruct)
- (`((cl-tag-slot) (abc 5 :readonly t)
- (def . ,(or `nil `(nil))))
- t)))))
-(ert-deftest cl-lib-struct-constructors ()
- (should (string-match "\\`Constructor docstring."
- (documentation 'cl-lib--con-2 t)))
- (should (mystruct-p (cl-lib--con-1)))
- (should (mystruct-p (cl-lib--con-2))))
-
-(ert-deftest cl-lib-arglist-performance ()
- ;; An `&aux' should not cause lambda's arglist to be turned into an &rest
- ;; that's parsed by hand.
- (should (equal () (help-function-arglist 'cl-lib--con-1)))
- (should (pcase (help-function-arglist 'cl-lib--con-2)
- (`(&optional ,_) t))))
-
-(ert-deftest cl-the ()
- (should (eql (cl-the integer 42) 42))
- (should-error (cl-the integer "abc"))
- (let ((side-effect 0))
- (should (= (cl-the integer (cl-incf side-effect)) 1))
- (should (= side-effect 1))))
-
-(ert-deftest cl-lib-test-plusp ()
- (should-not (cl-plusp -1.0e+INF))
- (should-not (cl-plusp -1.5e2))
- (should-not (cl-plusp -3.14))
- (should-not (cl-plusp -1))
- (should-not (cl-plusp -0.0))
- (should-not (cl-plusp 0))
- (should-not (cl-plusp 0.0))
- (should-not (cl-plusp -0.0e+NaN))
- (should-not (cl-plusp 0.0e+NaN))
- (should (cl-plusp 1))
- (should (cl-plusp 3.14))
- (should (cl-plusp 1.5e2))
- (should (cl-plusp 1.0e+INF))
- (should-error (cl-plusp "42") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-minusp ()
- (should (cl-minusp -1.0e+INF))
- (should (cl-minusp -1.5e2))
- (should (cl-minusp -3.14))
- (should (cl-minusp -1))
- (should-not (cl-minusp -0.0))
- (should-not (cl-minusp 0))
- (should-not (cl-minusp 0.0))
- (should-not (cl-minusp -0.0e+NaN))
- (should-not (cl-minusp 0.0e+NaN))
- (should-not (cl-minusp 1))
- (should-not (cl-minusp 3.14))
- (should-not (cl-minusp 1.5e2))
- (should-not (cl-minusp 1.0e+INF))
- (should-error (cl-minusp "-42") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-oddp ()
- (should (cl-oddp -3))
- (should (cl-oddp 3))
- (should-not (cl-oddp -2))
- (should-not (cl-oddp 0))
- (should-not (cl-oddp 2))
- (should-error (cl-oddp 3.0e+NaN) :type 'wrong-type-argument)
- (should-error (cl-oddp 3.0) :type 'wrong-type-argument)
- (should-error (cl-oddp "3") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-evenp ()
- (should (cl-evenp -2))
- (should (cl-evenp 0))
- (should (cl-evenp 2))
- (should-not (cl-evenp -3))
- (should-not (cl-evenp 3))
- (should-error (cl-evenp 2.0e+NaN) :type 'wrong-type-argument)
- (should-error (cl-evenp 2.0) :type 'wrong-type-argument)
- (should-error (cl-evenp "2") :type 'wrong-type-argument))
-
-(ert-deftest cl-digit-char-p ()
- (should (eql 3 (cl-digit-char-p ?3)))
- (should (eql 10 (cl-digit-char-p ?a 11)))
- (should (eql 10 (cl-digit-char-p ?A 11)))
- (should-not (cl-digit-char-p ?a))
- (should (eql 32 (cl-digit-char-p ?w 36)))
- (should-error (cl-digit-char-p ?a 37) :type 'args-out-of-range)
- (should-error (cl-digit-char-p ?a 1) :type 'args-out-of-range))
-
-(ert-deftest cl-lib-test-first ()
- (should (null (cl-first '())))
- (should (= 4 (cl-first '(4))))
- (should (= 4 (cl-first '(4 2))))
- (should-error (cl-first "42") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-second ()
- (should (null (cl-second '())))
- (should (null (cl-second '(4))))
- (should (= 2 (cl-second '(1 2))))
- (should (= 2 (cl-second '(1 2 3))))
- (should-error (cl-second "1 2 3") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-third ()
- (should (null (cl-third '())))
- (should (null (cl-third '(1 2))))
- (should (= 3 (cl-third '(1 2 3))))
- (should (= 3 (cl-third '(1 2 3 4))))
- (should-error (cl-third "123") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-fourth ()
- (should (null (cl-fourth '())))
- (should (null (cl-fourth '(1 2 3))))
- (should (= 4 (cl-fourth '(1 2 3 4))))
- (should (= 4 (cl-fourth '(1 2 3 4 5))))
- (should-error (cl-fourth "1234") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-fifth ()
- (should (null (cl-fifth '())))
- (should (null (cl-fifth '(1 2 3 4))))
- (should (= 5 (cl-fifth '(1 2 3 4 5))))
- (should (= 5 (cl-fifth '(1 2 3 4 5 6))))
- (should-error (cl-fifth "12345") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-fifth ()
- (should (null (cl-fifth '())))
- (should (null (cl-fifth '(1 2 3 4))))
- (should (= 5 (cl-fifth '(1 2 3 4 5))))
- (should (= 5 (cl-fifth '(1 2 3 4 5 6))))
- (should-error (cl-fifth "12345") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-sixth ()
- (should (null (cl-sixth '())))
- (should (null (cl-sixth '(1 2 3 4 5))))
- (should (= 6 (cl-sixth '(1 2 3 4 5 6))))
- (should (= 6 (cl-sixth '(1 2 3 4 5 6 7))))
- (should-error (cl-sixth "123456") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-seventh ()
- (should (null (cl-seventh '())))
- (should (null (cl-seventh '(1 2 3 4 5 6))))
- (should (= 7 (cl-seventh '(1 2 3 4 5 6 7))))
- (should (= 7 (cl-seventh '(1 2 3 4 5 6 7 8))))
- (should-error (cl-seventh "1234567") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-eighth ()
- (should (null (cl-eighth '())))
- (should (null (cl-eighth '(1 2 3 4 5 6 7))))
- (should (= 8 (cl-eighth '(1 2 3 4 5 6 7 8))))
- (should (= 8 (cl-eighth '(1 2 3 4 5 6 7 8 9))))
- (should-error (cl-eighth "12345678") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-ninth ()
- (should (null (cl-ninth '())))
- (should (null (cl-ninth '(1 2 3 4 5 6 7 8))))
- (should (= 9 (cl-ninth '(1 2 3 4 5 6 7 8 9))))
- (should (= 9 (cl-ninth '(1 2 3 4 5 6 7 8 9 10))))
- (should-error (cl-ninth "123456789") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-tenth ()
- (should (null (cl-tenth '())))
- (should (null (cl-tenth '(1 2 3 4 5 6 7 8 9))))
- (should (= 10 (cl-tenth '(1 2 3 4 5 6 7 8 9 10))))
- (should (= 10 (cl-tenth '(1 2 3 4 5 6 7 8 9 10 11))))
- (should-error (cl-tenth "1234567890") :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-endp ()
- (should (cl-endp '()))
- (should-not (cl-endp '(1)))
- (should-error (cl-endp 1) :type 'wrong-type-argument)
- (should-error (cl-endp [1]) :type 'wrong-type-argument))
-
-(ert-deftest cl-lib-test-nth-value ()
- (let ((vals (cl-values 2 3)))
- (should (= (cl-nth-value 0 vals) 2))
- (should (= (cl-nth-value 1 vals) 3))
- (should (null (cl-nth-value 2 vals)))
- (should-error (cl-nth-value 0.0 vals) :type 'wrong-type-argument)))
-
-(ert-deftest cl-lib-nth-value-test-multiple-values ()
- "While CL multiple values are an alias to list, these won't work."
- :expected-result :failed
- (should (eq (cl-nth-value 0 '(2 3)) '(2 3)))
- (should (= (cl-nth-value 0 1) 1))
- (should (null (cl-nth-value 1 1)))
- (should-error (cl-nth-value -1 (cl-values 2 3)) :type 'args-out-of-range)
- (should (string= (cl-nth-value 0 "only lists") "only lists")))
-
-(ert-deftest cl-test-caaar ()
- (should (null (cl-caaar '())))
- (should (null (cl-caaar '(() (2)))))
- (should (null (cl-caaar '((() (2)) (a b)))))
- (should-error (cl-caaar '(1 2)) :type 'wrong-type-argument)
- (should-error (cl-caaar '((1 2))) :type 'wrong-type-argument)
- (should (= 1 (cl-caaar '(((1 2) (3 4))))))
- (should (null (cl-caaar '((() (3 4)))))))
-
-(ert-deftest cl-test-caadr ()
- (should (null (cl-caadr '())))
- (should (null (cl-caadr '(1))))
- (should-error (cl-caadr '(1 2)) :type 'wrong-type-argument)
- (should (= 2 (cl-caadr '(1 (2 3)))))
- (should (equal '((2) (3)) (cl-caadr '((1) (((2) (3))) (4))))))
-
-(ert-deftest cl-test-ldiff ()
- (let ((l '(1 2 3)))
- (should (null (cl-ldiff '() '())))
- (should (null (cl-ldiff '() l)))
- (should (null (cl-ldiff l l)))
- (should (equal l (cl-ldiff l '())))
- ;; must be part of the list
- (should (equal l (cl-ldiff l '(2 3))))
- (should (equal '(1) (cl-ldiff l (nthcdr 1 l))))
- ;; should return a copy
- (should-not (eq (cl-ldiff l '()) l))))
-
-(ert-deftest cl-lib-adjoin-test ()
- (let ((nums '(1 2))
- (myfn-p '=))
- ;; add non-existing item to the front
- (should (equal '(3 1 2) (cl-adjoin 3 nums)))
- ;; just add - don't copy rest
- (should (eq nums (cdr (cl-adjoin 3 nums))))
- ;; add only when not already there
- (should (eq nums (cl-adjoin 2 nums)))
- (should (equal '(2 1 (2)) (cl-adjoin 2 '(1 (2)))))
- ;; default test function is eql
- (should (equal '(1.0 1 2) (cl-adjoin 1.0 nums)))
- ;; own :test function - returns true if match
- (should (equal '(1.0 1 2) (cl-adjoin 1.0 nums :test nil))) ;defaults to eql
- (should (eq nums (cl-adjoin 2 nums :test myfn-p))) ;match
- (should (equal '(3 1 2) (cl-adjoin 3 nums :test myfn-p))) ;no match
- ;; own :test-not function - returns false if match
- (should (equal '(1.0 1 2) (cl-adjoin 1.0 nums :test-not nil))) ;defaults to eql
- (should (equal '(2 2) (cl-adjoin 2 '(2) :test-not myfn-p))) ; no match
- (should (eq nums (cl-adjoin 2 nums :test-not myfn-p))) ; 1 matches
- (should (eq nums (cl-adjoin 3 nums :test-not myfn-p))) ; 1 and 2 matches
-
- ;; according to CLtL2 passing both :test and :test-not should signal error
- ;;(should-error (cl-adjoin 3 nums :test 'myfn-p :test-not myfn-p))
-
- ;; own :key fn
- (should (eq nums (cl-adjoin 3 nums :key (lambda (x) (if (cl-evenp x) (1+ x) x)))))
- (should (equal '(3 1 2) (cl-adjoin 3 nums :key (lambda (x) (if (cl-evenp x) (+ 2 x) x)))))
-
- ;; convert using :key, then compare with :test
- (should (eq nums (cl-adjoin 1 nums :key 'int-to-string :test 'string=)))
- (should (equal '(3 1 2) (cl-adjoin 3 nums :key 'int-to-string :test 'string=)))
- (should-error (cl-adjoin 3 nums :key 'int-to-string :test myfn-p)
- :type 'wrong-type-argument)
-
- ;; convert using :key, then compare with :test-not
- (should (eq nums (cl-adjoin 3 nums :key 'int-to-string :test-not 'string=)))
- (should (equal '(1 1) (cl-adjoin 1 '(1) :key 'int-to-string :test-not 'string=)))
- (should-error (cl-adjoin 1 nums :key 'int-to-string :test-not myfn-p)
- :type 'wrong-type-argument)))
-
-(ert-deftest cl-parse-integer ()
- (should-error (cl-parse-integer "abc"))
- (should (null (cl-parse-integer "abc" :junk-allowed t)))
- (should (null (cl-parse-integer "" :junk-allowed t)))
- (should (= 342391 (cl-parse-integer "0123456789" :radix 8 :junk-allowed t)))
- (should-error (cl-parse-integer "0123456789" :radix 8))
- (should (= -239 (cl-parse-integer "-efz" :radix 16 :junk-allowed t)))
- (should-error (cl-parse-integer "efz" :radix 16))
- (should (= 239 (cl-parse-integer "zzef" :radix 16 :start 2)))
- (should (= -123 (cl-parse-integer " -123 "))))
-
-(ert-deftest cl-loop-destructuring-with ()
- (should (equal (cl-loop with (a b c) = '(1 2 3) return (+ a b c)) 6)))
-
-(ert-deftest cl-flet-test ()
- (should (equal (cl-flet ((f1 (x) x)) (let ((x #'f1)) (funcall x 5))) 5)))
-
-(ert-deftest cl-lib-test-typep ()
- (cl-deftype cl-lib-test-type (&optional x) `(member ,x))
- ;; Make sure we correctly implement the rule that deftype's optional args
- ;; default to `*' rather than to nil.
- (should (cl-typep '* 'cl-lib-test-type))
- (should-not (cl-typep 1 'cl-lib-test-type)))
-
-;;; cl-lib.el ends here
diff --git a/test/automated/cmds-tests.el b/test/automated/cmds-tests.el
deleted file mode 100644
index 7e742a1fa8b..00000000000
--- a/test/automated/cmds-tests.el
+++ /dev/null
@@ -1,34 +0,0 @@
-;;; cmds-tests.el --- Testing some Emacs commands
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Nicolas Richard <youngfrog@members.fsf.org>
-;; Keywords:
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-
-(ert-deftest self-insert-command-with-negative-argument ()
- "Test `self-insert-command' with a negative argument."
- (let ((last-command-event ?a))
- (should-error (self-insert-command -1))))
-
-(provide 'cmds-tests)
-;;; cmds-tests.el ends here
diff --git a/test/automated/coding-tests.el b/test/automated/coding-tests.el
deleted file mode 100644
index cda382fff97..00000000000
--- a/test/automated/coding-tests.el
+++ /dev/null
@@ -1,50 +0,0 @@
-;;; coding-tests.el --- tests for text encoding and decoding
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Eli Zaretskii <eliz@gnu.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)
-
-;; Directory to hold test data files.
-(defvar coding-tests-workdir
- (expand-file-name "coding-tests" temporary-file-directory))
-
-;; Remove all generated test files.
-(defun coding-tests-remove-files ()
- (delete-directory coding-tests-workdir t))
-
-(ert-deftest ert-test-coding-bogus-coding-systems ()
- (unwind-protect
- (let (test-file)
- (or (file-directory-p coding-tests-workdir)
- (mkdir coding-tests-workdir t))
- (setq test-file (expand-file-name "nonexistent" coding-tests-workdir))
- (if (file-exists-p test-file)
- (delete-file test-file))
- (should-error
- (let ((coding-system-for-read 'bogus))
- (insert-file-contents test-file)))
- ;; See bug #21602.
- (setq test-file (expand-file-name "writing" coding-tests-workdir))
- (should-error
- (let ((coding-system-for-write (intern "\"us-ascii\"")))
- (write-region "some text" nil test-file))))
- (coding-tests-remove-files)))
diff --git a/test/automated/comint-testsuite.el b/test/automated/comint-testsuite.el
deleted file mode 100644
index 53f0a0dac0d..00000000000
--- a/test/automated/comint-testsuite.el
+++ /dev/null
@@ -1,54 +0,0 @@
-;;; comint-testsuite.el
-
-;; Copyright (C) 2010-2015 Free Software Foundation, Inc.
-
-;; 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/>.
-
-;;; Commentary:
-
-;; Tests for comint and related modes.
-
-;;; Code:
-
-(require 'comint)
-(require 'ert)
-
-(defvar comint-testsuite-password-strings
- '("foo@example.net's password: " ; ssh
- "Password for foo@example.org: " ; kinit
- "Please enter the password for foo@example.org: " ; kinit
- "Kerberos password for devnull/root <at> GNU.ORG: " ; ksu
- "Enter passphrase: " ; ssh-add
- "Enter passphrase (empty for no passphrase): " ; ssh-keygen
- "Enter same passphrase again: " ; ssh-keygen
- "Passphrase for key root@GNU.ORG: " ; plink
- "[sudo] password for user:" ; Ubuntu sudo
- "Password (again):"
- "Enter password:"
- "Mot de Passe:" ; localized
- "Passwort:") ; localized
- "List of strings that should match `comint-password-prompt-regexp'.")
-
-(ert-deftest comint-test-password-regexp ()
- "Test `comint-password-prompt-regexp' against common password strings."
- (dolist (str comint-testsuite-password-strings)
- (should (string-match comint-password-prompt-regexp str))))
-
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
-
-;;; comint-testsuite.el ends here
diff --git a/test/automated/compile-tests.el b/test/automated/compile-tests.el
deleted file mode 100644
index 0974a78e073..00000000000
--- a/test/automated/compile-tests.el
+++ /dev/null
@@ -1,366 +0,0 @@
-;;; compile-tests.el --- Test suite for font parsing.
-
-;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
-
-;; Author: Chong Yidong <cyd@stupidchicken.com>
-;; Keywords: internal
-;; Human-Keywords: 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)
-(require 'compile)
-
-(defvar compile-tests--test-regexps-data
- ;; The computed column numbers are zero-indexed, so subtract 1 from
- ;; what's reported in the string. The end column numbers are for
- ;; the character after, so it matches what's reported in the string.
- '(;; absoft
- ("Error on line 3 of t.f: Execution error unclassifiable statement"
- 1 nil 3 "t.f")
- ("Line 45 of \"foo.c\": bloofle undefined"
- 1 nil 45 "foo.c")
- ("error on line 19 of fplot.f: spelling error?"
- 1 nil 19 "fplot.f")
- ("warning on line 17 of fplot.f: data type is undefined for variable d"
- 1 nil 17 "fplot.f")
- ;; Ada & Mpatrol
- ("foo.adb:61:11: [...] in call to size declared at foo.ads:11"
- 1 11 61 "foo.adb")
- ("foo.adb:61:11: [...] in call to size declared at foo.ads:11"
- 52 nil 11 "foo.ads")
- (" 0x8008621 main+16 at error.c:17"
- 23 nil 17 "error.c")
- ;; aix
- ("****** Error number 140 in line 8 of file errors.c ******"
- 25 nil 8 "errors.c")
- ;; ant
- ("[javac] /src/DataBaseTestCase.java:27: unreported exception ..."
- 13 nil 27 "/src/DataBaseTestCase.java")
- ("[javac] /src/DataBaseTestCase.java:49: warning: finally clause cannot complete normally"
- 13 nil 49 "/src/DataBaseTestCase.java")
- ("[jikes] foo.java:3:5:7:9: blah blah"
- 14 (5 . 10) (3 . 7) "foo.java")
- ;; bash
- ("a.sh: line 1: ls-l: command not found"
- 1 nil 1 "a.sh")
- ;; borland
- ("Error ping.c 15: Unable to open include file 'sys/types.h'"
- 1 nil 15 "ping.c")
- ("Warning pong.c 68: Call to function 'func' with no prototype"
- 1 nil 68 "pong.c")
- ("Error E2010 ping.c 15: Unable to open include file 'sys/types.h'"
- 1 nil 15 "ping.c")
- ("Warning W1022 pong.c 68: Call to function 'func' with no prototype"
- 1 nil 68 "pong.c")
- ;; caml
- ("File \"foobar.ml\", lines 5-8, characters 20-155: blah blah"
- 1 (20 . 156) (5 . 8) "foobar.ml")
- ("File \"F:\\ocaml\\sorting.ml\", line 65, characters 2-145:\nWarning 26: unused variable equ."
- 1 (2 . 146) 65 "F:\\ocaml\\sorting.ml")
- ("File \"/usr/share/gdesklets/display/TargetGauge.py\", line 41, in add_children"
- 1 nil 41 "/usr/share/gdesklets/display/TargetGauge.py")
- ("File \\lib\\python\\Products\\PythonScripts\\PythonScript.py, line 302, in _exec"
- 1 nil 302 "\\lib\\python\\Products\\PythonScripts\\PythonScript.py")
- ("File \"/tmp/foo.py\", line 10"
- 1 nil 10 "/tmp/foo.py")
- ;; comma
- ("\"foo.f\", line 3: Error: syntax error near end of statement"
- 1 nil 3 "foo.f")
- ("\"vvouch.c\", line 19.5: 1506-046 (S) Syntax error."
- 1 5 19 "vvouch.c")
- ("\"foo.c\", line 32 pos 1; (E) syntax error; unexpected symbol: \"lossage\""
- 1 1 32 "foo.c")
- ("\"foo.adb\", line 2(11): warning: file name does not match ..."
- 1 11 2 "foo.adb")
- ("\"src/swapping.c\", line 30.34: 1506-342 (W) \"/*\" detected in comment."
- 1 34 30 "src/swapping.c")
- ;; cucumber
- ("Scenario: undefined step # features/cucumber.feature:3"
- 29 nil 3 "features/cucumber.feature")
- (" /home/gusev/.rvm/foo/bar.rb:500:in `_wrap_assertion'"
- 1 nil 500 "/home/gusev/.rvm/foo/bar.rb")
- ;; edg-1 edg-2
- ("build/intel/debug/../../../struct.cpp(42): error: identifier \"foo\" is undefined"
- 1 nil 42 "build/intel/debug/../../../struct.cpp")
- ("build/intel/debug/struct.cpp(44): warning #1011: missing return statement at end of"
- 1 nil 44 "build/intel/debug/struct.cpp")
- ("build/intel/debug/iptr.h(302): remark #981: operands are evaluated in unspecified order"
- 1 nil 302 "build/intel/debug/iptr.h")
- (" detected during ... at line 62 of \"build/intel/debug/../../../trace.h\""
- 31 nil 62 "build/intel/debug/../../../trace.h")
- ;; epc
- ("Error 24 at (2:progran.f90) : syntax error"
- 1 nil 2 "progran.f90")
- ;; ftnchek
- (" Dummy arg W in module SUBA line 8 file arrayclash.f is array"
- 32 nil 8 "arrayclash.f")
- (" L4 used at line 55 file test/assign.f; never set"
- 16 nil 55 "test/assign.f")
- ("Warning near line 10 file arrayclash.f: Module contains no executable"
- 1 nil 10 "arrayclash.f")
- ("Nonportable usage near line 31 col 9 file assign.f: mixed default and explicit"
- 24 9 31 "assign.f")
- ;; iar
- ("\"foo.c\",3 Error[32]: Error message"
- 1 nil 3 "foo.c")
- ("\"foo.c\",3 Warning[32]: Error message"
- 1 nil 3 "foo.c")
- ;; ibm
- ("foo.c(2:0) : informational EDC0804: Function foo is not referenced."
- 1 0 2 "foo.c")
- ("foo.c(3:8) : warning EDC0833: Implicit return statement encountered."
- 1 8 3 "foo.c")
- ("foo.c(5:5) : error EDC0350: Syntax error."
- 1 5 5 "foo.c")
- ;; irix
- ("ccom: Error: foo.c, line 2: syntax error"
- 1 nil 2 "foo.c")
- ("cc: Severe: /src/Python-2.3.3/Modules/_curses_panel.c, line 17: Cannot find file <panel.h> ..."
- 1 nil 17 "/src/Python-2.3.3/Modules/_curses_panel.c")
- ("cc: Info: foo.c, line 27: ..."
- 1 nil 27 "foo.c")
- ("cfe: Warning 712: foo.c, line 2: illegal combination of pointer and ..."
- 1 nil 2 "foo.c")
- ("cfe: Warning 600: xfe.c: 170: Not in a conditional directive while ..."
- 1 nil 170 "xfe.c")
- ("/usr/lib/cmplrs/cc/cfe: Error: foo.c: 1: blah blah"
- 1 nil 1 "foo.c")
- ("/usr/lib/cmplrs/cc/cfe: warning: foo.c: 1: blah blah"
- 1 nil 1 "foo.c")
- ("foo bar: baz.f, line 27: ..."
- 1 nil 27 "baz.f")
- ;; java
- ("\tat org.foo.ComponentGateway.doGet(ComponentGateway.java:172)"
- 5 nil 172 "ComponentGateway.java")
- ("\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:740)"
- 5 nil 740 "HttpServlet.java")
- ("==1332== at 0x4040743C: System::getErrorString() (../src/Lib/System.cpp:217)"
- 13 nil 217 "../src/Lib/System.cpp")
- ("==1332== by 0x8008621: main (vtest.c:180)"
- 13 nil 180 "vtest.c")
- ;; jikes-file jikes-line
- ("Found 2 semantic errors compiling \"../javax/swing/BorderFactory.java\":"
- 1 nil nil "../javax/swing/BorderFactory.java")
- ("Issued 1 semantic warning compiling \"java/awt/Toolkit.java\":"
- 1 nil nil "java/awt/Toolkit.java")
- ;; gcc-include
- ("In file included from /usr/include/c++/3.3/backward/warn.h:4,"
- 1 nil 4 "/usr/include/c++/3.3/backward/warn.h")
- (" from /usr/include/c++/3.3/backward/iostream.h:31:0,"
- 1 0 31 "/usr/include/c++/3.3/backward/iostream.h")
- (" from test_clt.cc:1:"
- 1 nil 1 "test_clt.cc")
- ;; gnu
- ("foo.c:8: message" 1 nil 8 "foo.c")
- ("../foo.c:8: W: message" 1 nil 8 "../foo.c")
- ("/tmp/foo.c:8:warning message" 1 nil 8 "/tmp/foo.c")
- ("foo/bar.py:8: FutureWarning message" 1 nil 8 "foo/bar.py")
- ("foo.py:8: RuntimeWarning message" 1 nil 8 "foo.py")
- ("foo.c:8:I: message" 1 nil 8 "foo.c")
- ("foo.c:8.23: note: message" 1 23 8 "foo.c")
- ("foo.c:8.23: info: message" 1 23 8 "foo.c")
- ("foo.c:8:23:information: message" 1 23 8 "foo.c")
- ("foo.c:8.23-45: Informational: message" 1 (23 . 46) (8 . nil) "foo.c")
- ("foo.c:8-23: message" 1 nil (8 . 23) "foo.c")
- ;; The next one is not in the GNU standards AFAICS.
- ;; Here we seem to interpret it as LINE1-LINE2.COL2.
- ("foo.c:8-45.3: message" 1 (nil . 4) (8 . 45) "foo.c")
- ("foo.c:8.23-9.1: message" 1 (23 . 2) (8 . 9) "foo.c")
- ("jade:dbcommon.dsl:133:17:E: missing argument for function call"
- 1 17 133 "dbcommon.dsl")
- ("G:/cygwin/dev/build-myproj.xml:54: Compiler Adapter 'javac' can't be found."
- 1 nil 54 "G:/cygwin/dev/build-myproj.xml")
- ("file:G:/cygwin/dev/build-myproj.xml:54: Compiler Adapter 'javac' can't be found."
- 1 nil 54 "G:/cygwin/dev/build-myproj.xml")
- ("{standard input}:27041: Warning: end of file not at end of a line; newline inserted"
- 1 nil 27041 "{standard input}")
- ;; Guile
- ("In foo.scm:\n" 1 nil nil "foo.scm")
- (" 63:4 [call-with-prompt prompt0 ...]" 1 4 63 nil)
- ("1038: 1 [main (\"gud-break.scm\")]" 1 1 1038 nil)
- ;; lcc
- ("E, file.cc(35,52) Illegal operation on pointers" 1 52 35 "file.cc")
- ("W, file.cc(36,52) blah blah" 1 52 36 "file.cc")
- ;; makepp
- ("makepp: Scanning `/foo/bar.c'" 19 nil nil "/foo/bar.c")
- ("makepp: warning: bla bla `/foo/bar.c' and `/foo/bar.h'" 27 nil nil "/foo/bar.c")
- ("makepp: bla bla `/foo/Makeppfile:12' bla" 18 nil 12 "/foo/Makeppfile")
- ("makepp: bla bla `/foo/bar.c' and `/foo/bar.h'" 35 nil nil "/foo/bar.h")
- ;; maven
- ("FooBar.java:[111,53] no interface expected here"
- 1 53 111 "FooBar.java" 2)
- (" [ERROR] /Users/cinsk/hello.java:[651,96] ';' expected"
- 15 96 651 "/Users/cinsk/hello.java" 2) ;Bug#11517.
- ("[WARNING] /foo/bar/Test.java:[27,43] unchecked conversion"
- 11 43 27 "/foo/bar/Test.java" 1) ;Bug#20556
- ;; mips-1 mips-2
- ("TrimMask (255) in solomon.c may be indistinguishable from TrimMasks (93) in solomo.c due to truncation"
- 11 nil 255 "solomon.c")
- ("TrimMask (255) in solomon.c may be indistinguishable from TrimMasks (93) in solomo.c due to truncation"
- 70 nil 93 "solomo.c")
- ("name defined but never used: LinInt in cmap_calc.c(199)"
- 40 nil 199 "cmap_calc.c")
- ;; msft
- ("keyboard handler.c(537) : warning C4005: 'min' : macro redefinition"
- 1 nil 537 "keyboard handler.c")
- ("d:\\tmp\\test.c(23) : error C2143: syntax error : missing ';' before 'if'"
- 1 nil 23 "d:\\tmp\\test.c")
- ("d:\\tmp\\test.c(1145) : see declaration of 'nsRefPtr'"
- 1 nil 1145 "d:\\tmp\\test.c")
- ("1>test_main.cpp(29): error C2144: syntax error : 'int' should be preceded by ';'"
- 3 nil 29 "test_main.cpp")
- ("1>test_main.cpp(29): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int"
- 3 nil 29 "test_main.cpp")
- ;; watcom
- ("..\\src\\ctrl\\lister.c(109): Error! E1009: Expecting ';' but found '{'"
- 1 nil 109 "..\\src\\ctrl\\lister.c")
- ("..\\src\\ctrl\\lister.c(120): Warning! W201: Unreachable code"
- 1 nil 120 "..\\src\\ctrl\\lister.c")
- ;; oracle
- ("Semantic error at line 528, column 5, file erosacqdb.pc:"
- 1 5 528 "erosacqdb.pc")
- ("Error at line 41, column 10 in file /usr/src/sb/ODBI_BHP.hpp"
- 1 10 41 "/usr/src/sb/ODBI_BHP.hpp")
- ("PCC-02150: error at line 49, column 27 in file /usr/src/sb/ODBI_dxfgh.pc"
- 1 27 49 "/usr/src/sb/ODBI_dxfgh.pc")
- ("PCC-00003: invalid SQL Identifier at column name in line 12 of file /usr/src/sb/ODBI_BHP.hpp"
- 1 nil 12 "/usr/src/sb/ODBI_BHP.hpp")
- ("PCC-00004: mismatched IF/ELSE/ENDIF block at line 27 in file /usr/src/sb/ODBI_BHP.hpp"
- 1 nil 27 "/usr/src/sb/ODBI_BHP.hpp")
- ("PCC-02151: line 21 column 40 file /usr/src/sb/ODBI_BHP.hpp:"
- 1 40 21 "/usr/src/sb/ODBI_BHP.hpp")
- ;; perl
- ("syntax error at automake line 922, near \"':'\""
- 14 nil 922 "automake")
- ("Died at test.pl line 27."
- 6 nil 27 "test.pl")
- ("store::odrecall('File_A', 'x2') called at store.pm line 90"
- 40 nil 90 "store.pm")
- ("\t(in cleanup) something bad at foo.pl line 3 during global destruction."
- 29 nil 3 "foo.pl")
- ("GLib-GObject-WARNING **: /build/buildd/glib2.0-2.14.5/gobject/gsignal.c:1741: instance `0x8206790' has no handler with id `1234' at t-compilation-perl-gtk.pl line 3."
- 130 nil 3 "t-compilation-perl-gtk.pl")
- ;; php
- ("Parse error: parse error, unexpected $ in main.php on line 59"
- 1 nil 59 "main.php")
- ("Fatal error: Call to undefined function: mysql_pconnect() in db.inc on line 66"
- 1 nil 66 "db.inc")
- ;; ruby
- ("plain-exception.rb:7:in `fun': unhandled exception"
- 1 nil 7 "plain-exception.rb")
- ("\tfrom plain-exception.rb:3:in `proxy'" 2 nil 3 "plain-exception.rb")
- ("\tfrom plain-exception.rb:12" 2 nil 12 "plain-exception.rb")
- ;; ruby-Test::Unit
- ;; FIXME
- (" [examples/test-unit.rb:28:in `here_is_a_deep_assert'"
- 5 nil 28 "examples/test-unit.rb")
- (" examples/test-unit.rb:19:in `test_a_deep_assert']:"
- 6 nil 19 "examples/test-unit.rb")
- ("examples/test-unit.rb:10:in `test_assert_raise'"
- 1 nil 10 "examples/test-unit.rb")
- ;; rxp
- ("Error: Mismatched end tag: expected </geroup>, got </group>\nin unnamed entity at line 71 char 8 of file:///home/reto/test/group.xml"
- 1 8 71 "/home/reto/test/group.xml")
- ("Warning: Start tag for undeclared element geroup\nin unnamed entity at line 4 char 8 of file:///home/reto/test/group.xml"
- 1 8 4 "/home/reto/test/group.xml")
- ;; sparc-pascal-file sparc-pascal-line sparc-pascal-example
- ("Thu May 14 10:46:12 1992 mom3.p:"
- 1 nil nil "mom3.p")
- ;; sun
- ("cc-1020 CC: REMARK File = CUI_App.h, Line = 735"
- 13 nil 735 "CUI_App.h")
- ("cc-1070 cc: WARNING File = linkl.c, Line = 38"
- 13 nil 38 "linkl.c")
- ("cf90-113 f90comp: ERROR NSE, File = Hoved.f90, Line = 16, Column = 3"
- 18 3 16 "Hoved.f90")
- ;; sun-ada
- ("/home3/xdhar/rcds_rc/main.a, line 361, char 6:syntax error: \",\" inserted"
- 1 6 361 "/home3/xdhar/rcds_rc/main.a")
- ;; 4bsd
- ("/usr/src/foo/foo.c(8): warning: w may be used before set"
- 1 nil 8 "/usr/src/foo/foo.c")
- ("/usr/src/foo/foo.c(9): error: w is used before set"
- 1 nil 9 "/usr/src/foo/foo.c")
- ("strcmp: variable # of args. llib-lc(359) :: /usr/src/foo/foo.c(8)"
- 44 nil 8 "/usr/src/foo/foo.c")
- ("bloofle defined( /users/wolfgang/foo.c(4) ), but never used"
- 18 nil 4 "/users/wolfgang/foo.c")
- ;; perl--Pod::Checker
- ;; FIXME
- ;; *** ERROR: Spurious text after =cut at line 193 in file foo.pm
- ;; *** ERROR: =over on line 37 without closing =back at line EOF in file bar.pm
- ;; *** ERROR: =over on line 1 without closing =back (at head1) at line 3 in file x.pod
- ;; perl--Test
- ("# Failed test 1 in foo.t at line 6"
- 1 nil 6 "foo.t")
- ;; perl--Test::Harness
- ("NOK 1# Test 1 got: \"1234\" (t/foo.t at line 46)"
- 1 nil 46 "t/foo.t")
- ;; weblint
- ("index.html (13:1) Unknown element <fdjsk>"
- 1 1 13 "index.html"))
- "List of tests for `compilation-error-regexp-alist'.
-Each element has the form (STR POS COLUMN LINE FILENAME), where
-STR is an error string, POS is the position of the error in STR,
-COLUMN and LINE are the reported column and line numbers (or nil)
-for that error, and FILENAME is the reported filename.
-
-LINE can also be of the form (LINE . END-LINE) meaning a range of
-lines. COLUMN can also be of the form (COLUMN . END-COLUMN)
-meaning a range of columns starting on LINE and ending on
-END-LINE, if that matched.")
-
-(defun compile--test-error-line (test)
- (erase-buffer)
- (setq compilation-locs (make-hash-table))
- (insert (car test))
- (compilation-parse-errors (point-min) (point-max))
- (let ((msg (get-text-property (nth 1 test) 'compilation-message)))
- (when msg
- (let ((loc (compilation--message->loc msg))
- (col (nth 2 test))
- (line (nth 3 test))
- (file (nth 4 test))
- (type (nth 5 test))
- end-col end-line)
- (if (consp col)
- (setq end-col (cdr col) col (car col)))
- (if (consp line)
- (setq end-line (cdr line) line (car line)))
- (and (equal (compilation--loc->col loc) col)
- (equal (compilation--loc->line loc) line)
- (or (not file)
- (equal (caar (compilation--loc->file-struct loc)) file))
- (or (null end-col)
- (equal (car (cadr (nth 2 (compilation--loc->file-struct loc))))
- end-col))
- (equal (car (nth 2 (compilation--loc->file-struct loc)))
- (or end-line line))
- (or (null type)
- (equal type (compilation--message->type msg))))))))
-
-(ert-deftest compile-test-error-regexps ()
- "Test the `compilation-error-regexp-alist' regexps.
-The test data is in `compile-tests--test-regexps-data'."
- (with-temp-buffer
- (font-lock-mode -1)
- (dolist (test compile-tests--test-regexps-data)
- (should (compile--test-error-line test)))))
-
-;;; compile-tests.el ends here.
diff --git a/test/automated/completion-tests.el b/test/automated/completion-tests.el
deleted file mode 100644
index 69e7b76fa30..00000000000
--- a/test/automated/completion-tests.el
+++ /dev/null
@@ -1,46 +0,0 @@
-;;; completion-tests.el --- Tests for completion functions -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
-;; Keywords:
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(eval-when-compile (require 'cl-lib))
-
-(ert-deftest completion-test1 ()
- (with-temp-buffer
- (cl-flet* ((test/completion-table (string pred action)
- (if (eq action 'lambda)
- nil
- "test: "))
- (test/completion-at-point ()
- (list (copy-marker (point-min))
- (copy-marker (point))
- #'test/completion-table)))
- (let ((completion-at-point-functions (list #'test/completion-at-point)))
- (insert "TEST")
- (completion-at-point)
- (should (equal (buffer-string)
- "test: "))))))
-
-(provide 'completion-tests)
-;;; completion-tests.el ends here
diff --git a/test/automated/core-elisp-tests.el b/test/automated/core-elisp-tests.el
deleted file mode 100644
index c31ecef4a32..00000000000
--- a/test/automated/core-elisp-tests.el
+++ /dev/null
@@ -1,52 +0,0 @@
-;;; core-elisp-tests.el --- Testing some core Elisp rules
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
-;; Keywords:
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(ert-deftest core-elisp-tests-1-defvar-in-let ()
- "Test some core Elisp rules."
- (with-temp-buffer
- ;; Check that when defvar is run within a let-binding, the toplevel default
- ;; is properly initialized.
- (should (equal (list (let ((c-e-x 1)) (defvar c-e-x 2) c-e-x) c-e-x)
- '(1 2)))
- (should (equal (list (let ((c-e-x 1))
- (defcustom c-e-x 2 "doc" :group 'blah) c-e-x)
- c-e-x)
- '(1 2)))))
-
-(ert-deftest core-elisp-tests-2-window-configurations ()
- "Test properties of window-configurations."
- (let ((wc (current-window-configuration)))
- (with-current-buffer (window-buffer (frame-selected-window))
- (push-mark)
- (activate-mark))
- (set-window-configuration wc)
- (should (or (not mark-active) (mark)))))
-
-(ert-deftest core-elisp-tests-3-backquote ()
- (should (eq 3 (eval ``,,'(+ 1 2)))))
-
-(provide 'core-elisp-tests)
-;;; core-elisp-tests.el ends here
diff --git a/test/automated/data-tests.el b/test/automated/data-tests.el
deleted file mode 100644
index 252a1410206..00000000000
--- a/test/automated/data-tests.el
+++ /dev/null
@@ -1,257 +0,0 @@
-;;; data-tests.el --- tests for src/data.c
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; This file is part of GNU Emacs.
-
-;; This program 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.
-;;
-;; This program 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 this program. If not, see `http://www.gnu.org/licenses/'.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'cl-lib)
-(eval-when-compile (require 'cl))
-
-(ert-deftest data-tests-= ()
- (should-error (=))
- (should (= 1))
- (should (= 2 2))
- (should (= 9 9 9 9 9 9 9 9 9))
- (should-not (apply #'= '(3 8 3)))
- (should-error (= 9 9 'foo))
- ;; Short circuits before getting to bad arg
- (should-not (= 9 8 'foo)))
-
-(ert-deftest data-tests-< ()
- (should-error (<))
- (should (< 1))
- (should (< 2 3))
- (should (< -6 -1 0 2 3 4 8 9 999))
- (should-not (apply #'< '(3 8 3)))
- (should-error (< 9 10 'foo))
- ;; Short circuits before getting to bad arg
- (should-not (< 9 8 'foo)))
-
-(ert-deftest data-tests-> ()
- (should-error (>))
- (should (> 1))
- (should (> 3 2))
- (should (> 6 1 0 -2 -3 -4 -8 -9 -999))
- (should-not (apply #'> '(3 8 3)))
- (should-error (> 9 8 'foo))
- ;; Short circuits before getting to bad arg
- (should-not (> 8 9 'foo)))
-
-(ert-deftest data-tests-<= ()
- (should-error (<=))
- (should (<= 1))
- (should (<= 2 3))
- (should (<= -6 -1 -1 0 0 0 2 3 4 8 999))
- (should-not (apply #'<= '(3 8 3 3)))
- (should-error (<= 9 10 'foo))
- ;; Short circuits before getting to bad arg
- (should-not (<= 9 8 'foo)))
-
-(ert-deftest data-tests->= ()
- (should-error (>=))
- (should (>= 1))
- (should (>= 3 2))
- (should (>= 666 1 0 0 -2 -3 -3 -3 -4 -8 -8 -9 -999))
- (should-not (apply #'>= '(3 8 3)))
- (should-error (>= 9 8 'foo))
- ;; Short circuits before getting to bad arg
- (should-not (>= 8 9 'foo)))
-
-;; Bool vector tests. Compactly represent bool vectors as hex
-;; strings.
-
-(ert-deftest bool-vector-count-population-all-0-nil ()
- (cl-loop for sz in '(0 45 1 64 9 344)
- do (let* ((bv (make-bool-vector sz nil)))
- (should
- (zerop
- (bool-vector-count-population bv))))))
-
-(ert-deftest bool-vector-count-population-all-1-t ()
- (cl-loop for sz in '(0 45 1 64 9 344)
- do (let* ((bv (make-bool-vector sz t)))
- (should
- (eql
- (bool-vector-count-population bv)
- sz)))))
-
-(ert-deftest bool-vector-count-population-1-nil ()
- (let* ((bv (make-bool-vector 45 nil)))
- (aset bv 40 t)
- (aset bv 0 t)
- (should
- (eql
- (bool-vector-count-population bv)
- 2))))
-
-(ert-deftest bool-vector-count-population-1-t ()
- (let* ((bv (make-bool-vector 45 t)))
- (aset bv 40 nil)
- (aset bv 0 nil)
- (should
- (eql
- (bool-vector-count-population bv)
- 43))))
-
-(defun mock-bool-vector-count-consecutive (a b i)
- (loop for i from i below (length a)
- while (eq (aref a i) b)
- sum 1))
-
-(defun test-bool-vector-bv-from-hex-string (desc)
- (let (bv nchars nibbles)
- (dolist (c (string-to-list desc))
- (push (string-to-number
- (char-to-string c)
- 16)
- nibbles))
- (setf bv (make-bool-vector (* 4 (length nibbles)) nil))
- (let ((i 0))
- (dolist (n (nreverse nibbles))
- (dotimes (_ 4)
- (aset bv i (> (logand 1 n) 0))
- (incf i)
- (setf n (lsh n -1)))))
- bv))
-
-(defun test-bool-vector-to-hex-string (bv)
- (let (nibbles (v (cl-coerce bv 'list)))
- (while v
- (push (logior
- (lsh (if (nth 0 v) 1 0) 0)
- (lsh (if (nth 1 v) 1 0) 1)
- (lsh (if (nth 2 v) 1 0) 2)
- (lsh (if (nth 3 v) 1 0) 3))
- nibbles)
- (setf v (nthcdr 4 v)))
- (mapconcat (lambda (n) (format "%X" n))
- (nreverse nibbles)
- "")))
-
-(defun test-bool-vector-count-consecutive-tc (desc)
- "Run a test case for bool-vector-count-consecutive.
-DESC is a string describing the test. It is a sequence of
-hexadecimal digits describing the bool vector. We exhaustively
-test all counts at all possible positions in the vector by
-comparing the subr with a much slower lisp implementation."
- (let ((bv (test-bool-vector-bv-from-hex-string desc)))
- (loop
- for lf in '(nil t)
- do (loop
- for pos from 0 upto (length bv)
- for cnt = (mock-bool-vector-count-consecutive bv lf pos)
- for rcnt = (bool-vector-count-consecutive bv lf pos)
- unless (eql cnt rcnt)
- do (error "FAILED testcase %S %3S %3S %3S"
- pos lf cnt rcnt)))))
-
-(defconst bool-vector-test-vectors
-'(""
- "0"
- "F"
- "0F"
- "F0"
- "00000000000000000000000000000FFFFF0000000"
- "44a50234053fba3340000023444a50234053fba33400000234"
- "12341234123456123412346001234123412345612341234600"
- "44a50234053fba33400000234"
- "1234123412345612341234600"
- "44a50234053fba33400000234"
- "1234123412345612341234600"
- "44a502340"
- "123412341"
- "0000000000000000000000000"
- "FFFFFFFFFFFFFFFF1"))
-
-(ert-deftest bool-vector-count-consecutive ()
- (mapc #'test-bool-vector-count-consecutive-tc
- bool-vector-test-vectors))
-
-(defun test-bool-vector-apply-mock-op (mock a b c)
- "Compute (slowly) the correct result of a bool-vector set operation."
- (let (changed nv)
- (assert (eql (length b) (length c)))
- (if a (setf nv a)
- (setf a (make-bool-vector (length b) nil))
- (setf changed t))
-
- (loop for i below (length b)
- for mockr = (funcall mock
- (if (aref b i) 1 0)
- (if (aref c i) 1 0))
- for r = (not (= 0 mockr))
- do (progn
- (unless (eq (aref a i) r)
- (setf changed t))
- (setf (aref a i) r)))
- (if changed a)))
-
-(defun test-bool-vector-binop (mock real)
- "Test a binary set operation."
- (loop for s1 in bool-vector-test-vectors
- for bv1 = (test-bool-vector-bv-from-hex-string s1)
- for vecs2 = (cl-remove-if-not
- (lambda (x) (eql (length x) (length s1)))
- bool-vector-test-vectors)
- do (loop for s2 in vecs2
- for bv2 = (test-bool-vector-bv-from-hex-string s2)
- for mock-result = (test-bool-vector-apply-mock-op
- mock nil bv1 bv2)
- for real-result = (funcall real bv1 bv2)
- do (progn
- (should (equal mock-result real-result))))))
-
-(ert-deftest bool-vector-intersection-op ()
- (test-bool-vector-binop
- #'logand
- #'bool-vector-intersection))
-
-(ert-deftest bool-vector-union-op ()
- (test-bool-vector-binop
- #'logior
- #'bool-vector-union))
-
-(ert-deftest bool-vector-xor-op ()
- (test-bool-vector-binop
- #'logxor
- #'bool-vector-exclusive-or))
-
-(ert-deftest bool-vector-set-difference-op ()
- (test-bool-vector-binop
- (lambda (a b) (logand a (lognot b)))
- #'bool-vector-set-difference))
-
-(ert-deftest bool-vector-change-detection ()
- (let* ((vc1 (test-bool-vector-bv-from-hex-string "abcdef"))
- (vc2 (test-bool-vector-bv-from-hex-string "012345"))
- (vc3 (make-bool-vector (length vc1) nil))
- (c1 (bool-vector-union vc1 vc2 vc3))
- (c2 (bool-vector-union vc1 vc2 vc3)))
- (should (equal c1 (test-bool-vector-apply-mock-op
- #'logior
- nil
- vc1 vc2)))
- (should (not c2))))
-
-(ert-deftest bool-vector-not ()
- (let* ((v1 (test-bool-vector-bv-from-hex-string "FFFF3"))
- (v2 (test-bool-vector-bv-from-hex-string "0000C"))
- (v3 (bool-vector-not v1)))
- (should (equal v2 v3))))
diff --git a/test/automated/data/decompress/foo.gz b/test/automated/data/decompress/foo.gz
deleted file mode 100644
index a68653fcbb9..00000000000
--- a/test/automated/data/decompress/foo.gz
+++ /dev/null
Binary files differ
diff --git a/test/automated/data/epg/pubkey.asc b/test/automated/data/epg/pubkey.asc
deleted file mode 100644
index c0bf28f6200..00000000000
--- a/test/automated/data/epg/pubkey.asc
+++ /dev/null
@@ -1,20 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1
-
-mI0EVRDxCAEEALcScrRmxq5N+Hh+NxPg75RJJdtEi824pwtqMlT/3wG1esmP5gNu
-ZIPVaTTSGNZkEzeYdhaLXBUe5qD+RQIQVh+MLt9nisF9nD35imyOrhHwAHnglOPx
-GdylH8nQ/tIO5p/lfUlw+iCBlPH7eZHqFJhwP0hJML4PKE8ArWG6RtsxABEBAAG0
-J0pvZSBUZXN0ZXIgKHRlc3Qga2V5KSA8am9lQGV4YW1wbGUuY29tPoi4BBMBAgAi
-BQJVEPEIAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAoscCWMvu4GGYO
-A/0Zzoc2z/dvAtFVLh4ovKqP2qliQt2qschJHVP30hJnKT7dmJfJl7kz9mXmMfSt
-Ym0luYmeSzdeWORM9SygLRYXuDfN6G4ZPJTlsRhgnARhNzNhSx+YlcFh48Z+a5zR
-goBMn7DgYVqfU4UteZOSXMlnuA2Z5ao1qgGhVqESSJgU5riNBFUQ8QgBBADacLkK
-D0U11nmlsScxPGkrDr0aJPrG8MEaDRnKjHJKNp3XTp1psGBUpWF/ErjQAIu+psFt
-LO8owCGsg/vJM7CzTv2dVBRbrZXjIKvdq7HdivosTMaHArQBpEtSO9rmgVHO+jaQ
-q/M2oGvNEB86zo3nfTWhOgBiB32m8kttWRiuWQARAQABiJ8EGAECAAkFAlUQ8QgC
-GwwACgkQKLHAljL7uBj44AQAkMJRm7VJUryrDKFtfIfytQx/vmyU/cZcVV6IpKqP
-KhztgR+QD9czlHvQhz+y3hqtLRShu2Eyf75dNexcUvKs/lS4LIDXg5V7pWSRk9eQ
-G403muqR/NGu6+QmUx09rJl72trdaGxNkyHA7Zy7ZDGkcMvQsd3qoSNGsPR5TKes
-w7Q=
-=NMxb
------END PGP PUBLIC KEY BLOCK-----
diff --git a/test/automated/data/epg/seckey.asc b/test/automated/data/epg/seckey.asc
deleted file mode 100644
index 4ac7ba4a502..00000000000
--- a/test/automated/data/epg/seckey.asc
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1
-
-lQHYBFUQ8QgBBAC3EnK0ZsauTfh4fjcT4O+USSXbRIvNuKcLajJU/98BtXrJj+YD
-bmSD1Wk00hjWZBM3mHYWi1wVHuag/kUCEFYfjC7fZ4rBfZw9+Ypsjq4R8AB54JTj
-8RncpR/J0P7SDuaf5X1JcPoggZTx+3mR6hSYcD9ISTC+DyhPAK1hukbbMQARAQAB
-AAP9Hs9agZTobA5QOksXjt9kwqJ63gePtbwVVNz3AoobaGi39PMkRUCPZwaEEbEo
-H/CwsUMV4J5sjVtpef/A8mN4csai7NYp82mbo+dPim4p+SUtBg4Ms8ujGVcQeRQd
-1CXtIkixDu6fw4wDtNw03ZyNJOhBOXVTgAyOTSlIz3D+6n8CAMeCqEFBHQIVoQpf
-Bza4YvFtJRdfGMTix3u7Cb6y9CHGBok7uUgQAeWnzQvMGTCHc3e8iHGAYBQ88GPF
-v1TpiusCAOroRe69Aiid5JMVTjWoJ0SHKd47nIj0gQFiDfa5de0BNq9gYj7JLg+R
-EjsJbJN39z+Z9HWjIOCUOIXDvucmM1MB/iNxW1Z8mEMflEYK5rop+PDxwqUbr8uZ
-kzogw98ZdmuEuN0bheGWUiJI+0Pd8jb40zlR1KgOEMx1mZchToAJdtybMLQnSm9l
-IFRlc3RlciAodGVzdCBrZXkpIDxqb2VAZXhhbXBsZS5jb20+iLgEEwECACIFAlUQ
-8QgCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJECixwJYy+7gYZg4D/RnO
-hzbP928C0VUuHii8qo/aqWJC3aqxyEkdU/fSEmcpPt2Yl8mXuTP2ZeYx9K1ibSW5
-iZ5LN15Y5Ez1LKAtFhe4N83obhk8lOWxGGCcBGE3M2FLH5iVwWHjxn5rnNGCgEyf
-sOBhWp9ThS15k5JcyWe4DZnlqjWqAaFWoRJImBTmnQHYBFUQ8QgBBADacLkKD0U1
-1nmlsScxPGkrDr0aJPrG8MEaDRnKjHJKNp3XTp1psGBUpWF/ErjQAIu+psFtLO8o
-wCGsg/vJM7CzTv2dVBRbrZXjIKvdq7HdivosTMaHArQBpEtSO9rmgVHO+jaQq/M2
-oGvNEB86zo3nfTWhOgBiB32m8kttWRiuWQARAQABAAP7B8uNtb/DLvGoRfL+mA0Q
-REhgOJ1WpRcU6rvKYNPh8xTkKMvM+EK0nVU/znBedEpXjb0pY1WRT0uvXs2pzY2V
-YeaugyKIkdUpPWnyWoEQwI8hFvHOWmU2rNHyXLW0MY7bxcGgqv2XbkL4m7/D6VQS
-SR8hQ2CxBbW+9ov6aBMwv/UCAOW89+5xxuzkv48AVraWlMnaU0ggVOf6ht0Qa40+
-+uw2yziNlD403gAAAycoICiB/oqwslx61B2xOHn0laCKrgsCAPNpIsHRlAwWbAsq
-uCtfIQxg+C3mPXkqsNTMjeK5NjLNytrmO49NXco36zVEG6q7qz5Zj9d9IPYoGOSa
-I+dQZ6sB/RKF5aonR5/e7IHJgc8BG7I0yiya4llE0AB9ghnRI/3uHwnCBnmo/32a
-n4+rQkx6vm+rg3JA/09Gi7W4R9SwV+ane4ifBBgBAgAJBQJVEPEIAhsMAAoJECix
-wJYy+7gY+OAEAJDCUZu1SVK8qwyhbXyH8rUMf75slP3GXFVeiKSqjyoc7YEfkA/X
-M5R70Ic/st4arS0UobthMn++XTXsXFLyrP5UuCyA14OVe6VkkZPXkBuNN5rqkfzR
-ruvkJlMdPayZe9ra3WhsTZMhwO2cu2QxpHDL0LHd6qEjRrD0eUynrMO0
-=iCIm
------END PGP PRIVATE KEY BLOCK-----
diff --git a/test/automated/data/files-bug18141.el.gz b/test/automated/data/files-bug18141.el.gz
deleted file mode 100644
index 53d463e85b5..00000000000
--- a/test/automated/data/files-bug18141.el.gz
+++ /dev/null
Binary files differ
diff --git a/test/automated/data/flymake/Makefile b/test/automated/data/flymake/Makefile
deleted file mode 100644
index 0f3f39791c8..00000000000
--- a/test/automated/data/flymake/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-# Makefile for flymake tests
-
-CC_OPTS = -Wall
-
-## Recent gcc (e.g. 4.8.2 on RHEL7) can automatically colorize their output,
-## which can confuse flymake. Set GCC_COLORS to disable that.
-## This only seems to be an issue in batch mode, where you would not
-## normally use flymake, so it seems like just avoiding the issue
-## in this test is fine. Set flymake-log-level to 3 to investigate.
-check-syntax:
- GCC_COLORS= $(CC) $(CC_OPTS) ${CHK_SOURCES}
-
-# eof
diff --git a/test/automated/data/flymake/test.c b/test/automated/data/flymake/test.c
deleted file mode 100644
index 3a3926131f5..00000000000
--- a/test/automated/data/flymake/test.c
+++ /dev/null
@@ -1,5 +0,0 @@
-int main()
-{
- char c = 1000;
- return c;
-}
diff --git a/test/automated/data/flymake/test.pl b/test/automated/data/flymake/test.pl
deleted file mode 100644
index d5abcb47e7f..00000000000
--- a/test/automated/data/flymake/test.pl
+++ /dev/null
@@ -1,2 +0,0 @@
-@arr = [1,2,3,4];
-my $b = @arr[1];
diff --git a/test/automated/data/package/archive-contents b/test/automated/data/package/archive-contents
deleted file mode 100644
index e2f92304f86..00000000000
--- a/test/automated/data/package/archive-contents
+++ /dev/null
@@ -1,17 +0,0 @@
-(1
- (simple-single .
- [(1 3)
- nil "A single-file package with no dependencies" single
- ((:url . "http://doodles.au")
- (:keywords quote ("frobnicate")))])
- (simple-depend .
- [(1 0)
- ((simple-single (1 3))) "A single-file package with a dependency." single])
- (simple-two-depend .
- [(1 1)
- ((simple-depend (1 0)) (simple-single (1 3)))
- "A single-file package with two dependencies." single])
- (multi-file .
- [(0 2 3)
- nil "Example of a multi-file tar package" tar
- ((:url . "http://puddles.li"))]))
diff --git a/test/automated/data/package/key.pub b/test/automated/data/package/key.pub
deleted file mode 100644
index a326d34e54f..00000000000
--- a/test/automated/data/package/key.pub
+++ /dev/null
@@ -1,18 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.14 (GNU/Linux)
-
-mQENBFJNB8gBCACfbtpvYrM8V1HM0KFlIwatcEJugHqwOHpr/Z9mrCW0fxyQAW/d
-2L+3QVNsN9Tz/K9lLcBUgeR7rhVEzHNqhmhNj/HnikwGqXbIofhp+QbZmBKnAlCz
-d77kg8K9lozHtfTkm1gX/7DdPzQKmgi7WOzzi2395wGubeqJLvYaEcqVbI0Eob+E
-3CzRjNy/e/Tf3TJRW5etTcdZN6LVuIY7tNCHqlQZTwyycON/hfLTX6cLCnzDsqm/
-NxCuwn9aqP9aGRGfIu7Y+If3zTymvrXEPUN98OEID814bOKdx0uVTZRiSMbvuTGI
-8uMa/kpGX/78rqI61gbZV51RFoU7pT2tzwY/ABEBAAG0HkouIFIuIEhhY2tlciA8
-anJoQGV4YW1wbGUuY29tPokBOAQTAQIAIgUCUk0HyAIbAwYLCQgHAwIGFQgCCQoL
-BBYCAwECHgECF4AACgkQtpVAhgkYletuhQf+JAyHYhTZNxjq0UYlikuLX8EtYbXX
-PB+03J0B73SMzEai5XsiTU2ADxqxwr7pveVK1INf+IGLiiXBlQq+4DSOvQY4xLfp
-58jTOYRV1ECvlXK/JtvVOwufXREADaydf9l/MUxA5G2PPBWIuQknh3ysPSsx68OJ
-SzNHFwklLn0DKc4WloE/GLDpTzimnCg7QGzuUo3Iilpjdy8EvTdI5d3jx/mGJIwI
-goB+YZgyxSPM+GjDwh5DEwD7OexNqqa7RynnmU0epmlYyi9UufCHLwgiiEIzjpWi
-6+iF+CQ45ZAKncovByenIUv73J3ImOudrsskeAHBmahljv1he6uV9Egj2Q==
-=b5Kg
------END PGP PUBLIC KEY BLOCK-----
diff --git a/test/automated/data/package/key.sec b/test/automated/data/package/key.sec
deleted file mode 100644
index d21e6ae9a45..00000000000
--- a/test/automated/data/package/key.sec
+++ /dev/null
@@ -1,33 +0,0 @@
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.4.14 (GNU/Linux)
-
-lQO+BFJNB8gBCACfbtpvYrM8V1HM0KFlIwatcEJugHqwOHpr/Z9mrCW0fxyQAW/d
-2L+3QVNsN9Tz/K9lLcBUgeR7rhVEzHNqhmhNj/HnikwGqXbIofhp+QbZmBKnAlCz
-d77kg8K9lozHtfTkm1gX/7DdPzQKmgi7WOzzi2395wGubeqJLvYaEcqVbI0Eob+E
-3CzRjNy/e/Tf3TJRW5etTcdZN6LVuIY7tNCHqlQZTwyycON/hfLTX6cLCnzDsqm/
-NxCuwn9aqP9aGRGfIu7Y+If3zTymvrXEPUN98OEID814bOKdx0uVTZRiSMbvuTGI
-8uMa/kpGX/78rqI61gbZV51RFoU7pT2tzwY/ABEBAAH+AwMCKCCpPNXkXuVgF7cz
-eByuvgIO7wImDYGOdJqsASSzV4q0u1acnGtlxg7WphKDF9RnC5+1ZZ1ZcrBcv2uJ
-xZm2jHdjqM3FmgQTN70GVzO1nKEur2wxlKotG4Q+8BtaRDwHdKpQFk+QW9aInH3C
-BkNWTK97iFwZaoUGxKuRJb35qjMe3SsDE7kdbtOqO+tOeppRVeOOZCn7F33ir/6i
-j2gmIME6LFDzvBi6YAyMBSh90Ak70HJINt0QfXlZf5MtX1NaxaEcnsRmwwcNqxh9
-JvcC9q4WrR92NhHCHI+lOsAe7hbwo/VkwRjSSx0HdKkx6kvdcNj/9LeX/jykzLvg
-kEqvAqT4Jmk57W2seqvpNcAO+eUVrJ5D1OR6khsUtikPp2pQH5MDXJDGcie+ZAFb
-w6BwoWBDBjooKtfuP0LKqrdtJG2JLe6yhBhWvfqHPBlUU1SsA7a5aTCLo8FiqgEI
-Kyy60zMx/2Mi48oN1a/mAoV1MTWLhOVUWJlIHM7nVLj1OaX0316LcLX/uTLTq40p
-apHKwERanzY7f8ROiv/Fa/J+9cCsfOLKfjFAjpBVUVoOb39HsyS/vvkGMY4kgaD6
-K6r9JPdsaoYvsLkxk5HyHF7Mk2uS1z1EIArD2/3lRiX6ag+IU1Nl3XDkgfZj06K3
-juS84dGF8CmN49uOEjzAJAQZH9jTs5OKzUuZhGJF+gt0L78vLOoKRr8bu1N1GPqU
-wnS908HWruXzjJl1CAhnuCa8FnDaU+tmEKjYpWuelx85kolpMW7LT5gOFZr84MIj
-Kq3Rt2hU6qQ7Cdy1ep531YKkmyh9Y4l/Tgir1OtnQQqtNuwHI497l7qAUnKZBBHZ
-guApjS9BoHsRXkw2mgDssZ+khOwj/xJm876nFSiQeCD0aIbU/4zJ9e2HUOJAZI1r
-d7QeSi4gUi4gSGFja2VyIDxqcmhAZXhhbXBsZS5jb20+iQE4BBMBAgAiBQJSTQfI
-AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRC2lUCGCRiV626FB/4kDIdi
-FNk3GOrRRiWKS4tfwS1htdc8H7TcnQHvdIzMRqLleyJNTYAPGrHCvum95UrUg1/4
-gYuKJcGVCr7gNI69BjjEt+nnyNM5hFXUQK+Vcr8m29U7C59dEQANrJ1/2X8xTEDk
-bY88FYi5CSeHfKw9KzHrw4lLM0cXCSUufQMpzhaWgT8YsOlPOKacKDtAbO5SjciK
-WmN3LwS9N0jl3ePH+YYkjAiCgH5hmDLFI8z4aMPCHkMTAPs57E2qprtHKeeZTR6m
-aVjKL1S58IcvCCKIQjOOlaLr6IX4JDjlkAqdyi8HJ6chS/vcnciY652uyyR4AcGZ
-qGWO/WF7q5X0SCPZ
-=5FZK
------END PGP PRIVATE KEY BLOCK-----
diff --git a/test/automated/data/package/multi-file-0.2.3.tar b/test/automated/data/package/multi-file-0.2.3.tar
deleted file mode 100644
index 2f1c5e93df1..00000000000
--- a/test/automated/data/package/multi-file-0.2.3.tar
+++ /dev/null
Binary files differ
diff --git a/test/automated/data/package/multi-file-readme.txt b/test/automated/data/package/multi-file-readme.txt
deleted file mode 100644
index affd2e96fb0..00000000000
--- a/test/automated/data/package/multi-file-readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-This is a bare-bones readme file for the multi-file package.
diff --git a/test/automated/data/package/newer-versions/archive-contents b/test/automated/data/package/newer-versions/archive-contents
deleted file mode 100644
index add5f2909d0..00000000000
--- a/test/automated/data/package/newer-versions/archive-contents
+++ /dev/null
@@ -1,13 +0,0 @@
-(1
- (simple-single .
- [(1 4)
- nil "A single-file package with no dependencies" single])
- (simple-depend .
- [(1 0)
- ((simple-single (1 3))) "A single-file package with a dependency." single])
- (new-pkg .
- [(1 0)
- nil "A package only seen after "updating" archive-contents" single])
- (multi-file .
- [(0 2 3)
- nil "Example of a multi-file tar package" tar]))
diff --git a/test/automated/data/package/newer-versions/new-pkg-1.0.el b/test/automated/data/package/newer-versions/new-pkg-1.0.el
deleted file mode 100644
index 7251622fa59..00000000000
--- a/test/automated/data/package/newer-versions/new-pkg-1.0.el
+++ /dev/null
@@ -1,18 +0,0 @@
-;;; new-pkg.el --- A package only seen after "updating" archive-contents
-
-;; Author: J. R. Hacker <jrh@example.com>
-;; Version: 1.0
-
-;;; Commentary:
-
-;; This will only show up after updating "archive-contents".
-
-;;; Code:
-
-(defun new-pkg-frob ()
- "Ignore me."
- (ignore))
-
-(provide 'new-pkg)
-
-;;; new-pkg.el ends here
diff --git a/test/automated/data/package/newer-versions/simple-single-1.4.el b/test/automated/data/package/newer-versions/simple-single-1.4.el
deleted file mode 100644
index 7b1c00c06db..00000000000
--- a/test/automated/data/package/newer-versions/simple-single-1.4.el
+++ /dev/null
@@ -1,36 +0,0 @@
-;;; simple-single.el --- A single-file package with no dependencies
-
-;; Author: J. R. Hacker <jrh@example.com>
-;; Version: 1.4
-;; Keywords: frobnicate
-
-;;; Commentary:
-
-;; This package provides a minor mode to frobnicate and/or bifurcate
-;; any flanges you desire. To activate it, type "C-M-r M-3 butterfly"
-;; and all your dreams will come true.
-;;
-;; This is a new, updated version.
-
-;;; Code:
-
-(defgroup simple-single nil "Simply a file"
- :group 'lisp)
-
-(defcustom simple-single-super-sunday nil
- "How great is this?
-Default changed to nil."
- :type 'boolean
- :group 'simple-single
- :package-version "1.4")
-
-(defvar simple-single-sudo-sandwich nil
- "Make a sandwich?")
-
-;;;###autoload
-(define-minor-mode simple-single-mode
- "It does good things to stuff")
-
-(provide 'simple-single)
-
-;;; simple-single.el ends here
diff --git a/test/automated/data/package/package-test-server.py b/test/automated/data/package/package-test-server.py
deleted file mode 100644
index 35ca820f31f..00000000000
--- a/test/automated/data/package/package-test-server.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import sys
-import BaseHTTPServer
-from SimpleHTTPServer import SimpleHTTPRequestHandler
-
-
-HandlerClass = SimpleHTTPRequestHandler
-ServerClass = BaseHTTPServer.HTTPServer
-Protocol = "HTTP/1.0"
-
-if sys.argv[1:]:
- port = int(sys.argv[1])
-else:
- port = 8000
- server_address = ('127.0.0.1', port)
-
-HandlerClass.protocol_version = Protocol
-httpd = ServerClass(server_address, HandlerClass)
-
-sa = httpd.socket.getsockname()
-print "Serving HTTP on", sa[0], "port", sa[1], "..."
-httpd.serve_forever()
diff --git a/test/automated/data/package/signed/archive-contents b/test/automated/data/package/signed/archive-contents
deleted file mode 100644
index 2a773ecba6a..00000000000
--- a/test/automated/data/package/signed/archive-contents
+++ /dev/null
@@ -1,7 +0,0 @@
-(1
- (signed-good .
- [(1 0)
- nil "A package with good signature" single])
- (signed-bad .
- [(1 0)
- nil "A package with bad signature" single]))
diff --git a/test/automated/data/package/signed/archive-contents.sig b/test/automated/data/package/signed/archive-contents.sig
deleted file mode 100644
index 658edd3f60e..00000000000
--- a/test/automated/data/package/signed/archive-contents.sig
+++ /dev/null
Binary files differ
diff --git a/test/automated/data/package/signed/signed-bad-1.0.el b/test/automated/data/package/signed/signed-bad-1.0.el
deleted file mode 100644
index 3734823876e..00000000000
--- a/test/automated/data/package/signed/signed-bad-1.0.el
+++ /dev/null
@@ -1,33 +0,0 @@
-;;; signed-bad.el --- A single-file package with bad signature
-
-;; Author: J. R. Hacker <jrh@example.com>
-;; Version: 1.0
-;; Keywords: frobnicate
-;; URL: http://doodles.au
-
-;;; Commentary:
-
-;; This package provides a minor mode to frobnicate and/or bifurcate
-;; any flanges you desire. To activate it, type "C-M-r M-3 butterfly"
-;; and all your dreams will come true.
-
-;;; Code:
-
-(defgroup signed-bad nil "Simply a file"
- :group 'lisp)
-
-(defcustom signed-bad-super-sunday t
- "How great is this?"
- :type 'boolean
- :group 'signed-bad)
-
-(defvar signed-bad-sudo-sandwich nil
- "Make a sandwich?")
-
-;;;###autoload
-(define-minor-mode signed-bad-mode
- "It does good things to stuff")
-
-(provide 'signed-bad)
-
-;;; signed-bad.el ends here
diff --git a/test/automated/data/package/signed/signed-bad-1.0.el.sig b/test/automated/data/package/signed/signed-bad-1.0.el.sig
deleted file mode 100644
index 747918794ca..00000000000
--- a/test/automated/data/package/signed/signed-bad-1.0.el.sig
+++ /dev/null
Binary files differ
diff --git a/test/automated/data/package/signed/signed-good-1.0.el b/test/automated/data/package/signed/signed-good-1.0.el
deleted file mode 100644
index 22718df2763..00000000000
--- a/test/automated/data/package/signed/signed-good-1.0.el
+++ /dev/null
@@ -1,33 +0,0 @@
-;;; signed-good.el --- A single-file package with good signature
-
-;; Author: J. R. Hacker <jrh@example.com>
-;; Version: 1.0
-;; Keywords: frobnicate
-;; URL: http://doodles.au
-
-;;; Commentary:
-
-;; This package provides a minor mode to frobnicate and/or bifurcate
-;; any flanges you desire. To activate it, type "C-M-r M-3 butterfly"
-;; and all your dreams will come true.
-
-;;; Code:
-
-(defgroup signed-good nil "Simply a file"
- :group 'lisp)
-
-(defcustom signed-good-super-sunday t
- "How great is this?"
- :type 'boolean
- :group 'signed-good)
-
-(defvar signed-good-sudo-sandwich nil
- "Make a sandwich?")
-
-;;;###autoload
-(define-minor-mode signed-good-mode
- "It does good things to stuff")
-
-(provide 'signed-good)
-
-;;; signed-good.el ends here
diff --git a/test/automated/data/package/signed/signed-good-1.0.el.sig b/test/automated/data/package/signed/signed-good-1.0.el.sig
deleted file mode 100644
index 747918794ca..00000000000
--- a/test/automated/data/package/signed/signed-good-1.0.el.sig
+++ /dev/null
Binary files differ
diff --git a/test/automated/data/package/simple-depend-1.0.el b/test/automated/data/package/simple-depend-1.0.el
deleted file mode 100644
index b58b658d024..00000000000
--- a/test/automated/data/package/simple-depend-1.0.el
+++ /dev/null
@@ -1,17 +0,0 @@
-;;; simple-depend.el --- A single-file package with a dependency.
-
-;; Author: J. R. Hacker <jrh@example.com>
-;; Version: 1.0
-;; Keywords: frobnicate
-;; Package-Requires: ((simple-single "1.3"))
-
-;;; Commentary:
-
-;; Depends on another package.
-
-;;; Code:
-
-(defvar simple-depend "Value"
- "Some trivial code")
-
-;;; simple-depend.el ends here
diff --git a/test/automated/data/package/simple-single-1.3.el b/test/automated/data/package/simple-single-1.3.el
deleted file mode 100644
index 6756a28080b..00000000000
--- a/test/automated/data/package/simple-single-1.3.el
+++ /dev/null
@@ -1,33 +0,0 @@
-;;; simple-single.el --- A single-file package with no dependencies
-
-;; Author: J. R. Hacker <jrh@example.com>
-;; Version: 1.3
-;; Keywords: frobnicate
-;; URL: http://doodles.au
-
-;;; Commentary:
-
-;; This package provides a minor mode to frobnicate and/or bifurcate
-;; any flanges you desire. To activate it, type "C-M-r M-3 butterfly"
-;; and all your dreams will come true.
-
-;;; Code:
-
-(defgroup simple-single nil "Simply a file"
- :group 'lisp)
-
-(defcustom simple-single-super-sunday t
- "How great is this?"
- :type 'boolean
- :group 'simple-single)
-
-(defvar simple-single-sudo-sandwich nil
- "Make a sandwich?")
-
-;;;###autoload
-(define-minor-mode simple-single-mode
- "It does good things to stuff")
-
-(provide 'simple-single)
-
-;;; simple-single.el ends here
diff --git a/test/automated/data/package/simple-single-readme.txt b/test/automated/data/package/simple-single-readme.txt
deleted file mode 100644
index 25d3034032b..00000000000
--- a/test/automated/data/package/simple-single-readme.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This package provides a minor mode to frobnicate and/or bifurcate
-any flanges you desire. To activate it, type "C-M-r M-3 butterfly"
-and all your dreams will come true.
diff --git a/test/automated/data/package/simple-two-depend-1.1.el b/test/automated/data/package/simple-two-depend-1.1.el
deleted file mode 100644
index 9cfe5c0d4e2..00000000000
--- a/test/automated/data/package/simple-two-depend-1.1.el
+++ /dev/null
@@ -1,17 +0,0 @@
-;;; simple-two-depend.el --- A single-file package with two dependencies.
-
-;; Author: J. R. Hacker <jrh@example.com>
-;; Version: 1.1
-;; Keywords: frobnicate
-;; Package-Requires: ((simple-depend "1.0") (simple-single "1.3"))
-
-;;; Commentary:
-
-;; Depends on two another packages.
-
-;;; Code:
-
-(defvar simple-two-depend "Value"
- "Some trivial code")
-
-;;; simple-two-depend.el ends here
diff --git a/test/automated/dbus-tests.el b/test/automated/dbus-tests.el
deleted file mode 100644
index 9465c859505..00000000000
--- a/test/automated/dbus-tests.el
+++ /dev/null
@@ -1,182 +0,0 @@
-;;; dbus-tests.el --- Tests of D-Bus integration into Emacs
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Michael Albinus <michael.albinus@gmx.de>
-
-;; This program 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.
-;;
-;; This program 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 this program. If not, see `http://www.gnu.org/licenses/'.
-
-;;; Code:
-
-(require 'ert)
-(require 'dbus)
-
-(setq dbus-debug nil)
-
-(defvar dbus--test-enabled-session-bus
- (and (featurep 'dbusbind)
- (dbus-ignore-errors (dbus-get-unique-name :session)))
- "Check, whether we are registered at the session bus.")
-
-(defvar dbus--test-enabled-system-bus
- (and (featurep 'dbusbind)
- (dbus-ignore-errors (dbus-get-unique-name :system)))
- "Check, whether we are registered at the system bus.")
-
-(defun dbus--test-availability (bus)
- "Test availability of D-Bus BUS."
- (should (dbus-list-names bus))
- (should (dbus-list-activatable-names bus))
- (should (dbus-list-known-names bus))
- (should (dbus-get-unique-name bus)))
-
-(ert-deftest dbus-test00-availability-session ()
- "Test availability of D-Bus `:session'."
- :expected-result (if dbus--test-enabled-session-bus :passed :failed)
- (dbus--test-availability :session))
-
-(ert-deftest dbus-test00-availability-system ()
- "Test availability of D-Bus `:system'."
- :expected-result (if dbus--test-enabled-system-bus :passed :failed)
- (dbus--test-availability :system))
-
-(ert-deftest dbus-test01-type-conversion ()
- "Check type conversion functions."
- (let ((ustr "0123abc_xyz\x01\xff")
- (mstr "Grüß Göttin"))
- (should
- (string-equal
- (dbus-byte-array-to-string (dbus-string-to-byte-array "")) ""))
- (should
- (string-equal
- (dbus-byte-array-to-string (dbus-string-to-byte-array ustr)) ustr))
- (should
- (string-equal
- (dbus-byte-array-to-string (dbus-string-to-byte-array mstr) 'multibyte)
- mstr))
- ;; Should not work for multibyte strings.
- (should-not
- (string-equal
- (dbus-byte-array-to-string (dbus-string-to-byte-array mstr)) mstr))
-
- (should
- (string-equal
- (dbus-unescape-from-identifier (dbus-escape-as-identifier "")) ""))
- (should
- (string-equal
- (dbus-unescape-from-identifier (dbus-escape-as-identifier ustr)) ustr))
- ;; Should not work for multibyte strings.
- (should-not
- (string-equal
- (dbus-unescape-from-identifier (dbus-escape-as-identifier mstr)) mstr))))
-
-(defun dbus--test-register-service (bus)
- "Check service registration at BUS."
- ;; Cleanup.
- (dbus-ignore-errors (dbus-unregister-service bus dbus-service-emacs))
-
- ;; Register an own service.
- (should (eq (dbus-register-service bus dbus-service-emacs) :primary-owner))
- (should (member dbus-service-emacs (dbus-list-known-names bus)))
- (should (eq (dbus-register-service bus dbus-service-emacs) :already-owner))
- (should (member dbus-service-emacs (dbus-list-known-names bus)))
-
- ;; Unregister the service.
- (should (eq (dbus-unregister-service bus dbus-service-emacs) :released))
- (should-not (member dbus-service-emacs (dbus-list-known-names bus)))
- (should (eq (dbus-unregister-service bus dbus-service-emacs) :non-existent))
- (should-not (member dbus-service-emacs (dbus-list-known-names bus)))
-
- ;; `dbus-service-dbus' is reserved for the BUS itself.
- (should-error (dbus-register-service bus dbus-service-dbus))
- (should-error (dbus-unregister-service bus dbus-service-dbus)))
-
-(ert-deftest dbus-test02-register-service-session ()
- "Check service registration at `:session' bus."
- (skip-unless (and dbus--test-enabled-session-bus
- (dbus-register-service :session dbus-service-emacs)))
- (dbus--test-register-service :session)
-
- (let ((service "org.freedesktop.Notifications"))
- (when (member service (dbus-list-known-names :session))
- ;; Cleanup.
- (dbus-ignore-errors (dbus-unregister-service :session service))
-
- (should (eq (dbus-register-service :session service) :in-queue))
- (should (eq (dbus-unregister-service :session service) :released))
-
- (should
- (eq (dbus-register-service :session service :do-not-queue) :exists))
- (should (eq (dbus-unregister-service :session service) :not-owner)))))
-
-(ert-deftest dbus-test02-register-service-system ()
- "Check service registration at `:system' bus."
- (skip-unless (and dbus--test-enabled-system-bus
- (dbus-register-service :system dbus-service-emacs)))
- (dbus--test-register-service :system))
-
-(ert-deftest dbus-test02-register-service-own-bus ()
- "Check service registration with an own bus.
-This includes initialization and closing the bus."
- ;; Start bus.
- (let ((output
- (ignore-errors
- (shell-command-to-string "dbus-launch --sh-syntax")))
- bus pid)
- (skip-unless (stringp output))
- (when (string-match "DBUS_SESSION_BUS_ADDRESS='\\(.+\\)';" output)
- (setq bus (match-string 1 output)))
- (when (string-match "DBUS_SESSION_BUS_PID=\\([[:digit:]]+\\);" output)
- (setq pid (match-string 1 output)))
- (unwind-protect
- (progn
- (skip-unless
- (dbus-ignore-errors
- (and bus pid
- (featurep 'dbusbind)
- (dbus-init-bus bus)
- (dbus-get-unique-name bus)
- (dbus-register-service bus dbus-service-emacs))))
- ;; Run the test.
- (dbus--test-register-service bus))
-
- ;; Save exit.
- (when pid (call-process "kill" nil nil nil pid)))))
-
-(ert-deftest dbus-test03-peer-interface ()
- "Check `dbus-interface-peer' methods."
- (skip-unless
- (and dbus--test-enabled-session-bus
- (dbus-register-service :session dbus-service-emacs)
- ;; "GetMachineId" is not implemented (yet). When it returns a
- ;; value, another D-Bus client like dbus-monitor is reacting
- ;; on `dbus-interface-peer'. We cannot test then.
- (not
- (dbus-ignore-errors
- (dbus-call-method
- :session dbus-service-emacs dbus-path-dbus
- dbus-interface-peer "GetMachineId" :timeout 100)))))
-
- (should (dbus-ping :session dbus-service-emacs 100))
- (dbus-unregister-service :session dbus-service-emacs)
- (should-not (dbus-ping :session dbus-service-emacs 100)))
-
-(defun dbus-test-all (&optional interactive)
- "Run all tests for \\[dbus]."
- (interactive "p")
- (funcall
- (if interactive 'ert-run-tests-interactively 'ert-run-tests-batch) "^dbus"))
-
-(provide 'dbus-tests)
-;;; dbus-tests.el ends here
diff --git a/test/automated/decoder-tests.el b/test/automated/decoder-tests.el
deleted file mode 100644
index 80ff5205ac5..00000000000
--- a/test/automated/decoder-tests.el
+++ /dev/null
@@ -1,349 +0,0 @@
-;;; decoder-tests.el --- test for text decoder
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Kenichi Handa <handa@gnu.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)
-
-;; Directory to hold test data files.
-(defvar decoder-tests-workdir
- (expand-file-name "decoder-tests" temporary-file-directory))
-
-;; Remove all generated test files.
-(defun decoder-tests-remove-files ()
- (delete-directory decoder-tests-workdir t))
-
-;; Return the contents (specified by CONTENT-TYPE; ascii, latin, or
-;; binary) of a test file.
-(defun decoder-tests-file-contents (content-type)
- (let* ((ascii "ABCDEFGHIJKLMNOPQRSTUVWXYZ\n")
- (latin (concat ascii "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ\n"))
- (binary (string-to-multibyte
- (concat (string-as-unibyte latin)
- (unibyte-string #xC0 #xC1 ?\n)))))
- (cond ((eq content-type 'ascii) ascii)
- ((eq content-type 'latin) latin)
- ((eq content-type 'binary) binary)
- (t
- (error "Invalid file content type: %s" content-type)))))
-
-;; Generate FILE with CONTENTS encoded by CODING-SYSTEM.
-;; whose encoding specified by CODING-SYSTEM.
-(defun decoder-tests-gen-file (file contents coding-system)
- (or (file-directory-p decoder-tests-workdir)
- (mkdir decoder-tests-workdir t))
- (setq file (expand-file-name file decoder-tests-workdir))
- (with-temp-file file
- (set-buffer-file-coding-system coding-system)
- (insert contents))
- file)
-
-;;; The following three functions are filters for contents of a test
-;;; file.
-
-;; Convert all LFs to CR LF sequences in the string STR.
-(defun decoder-tests-lf-to-crlf (str)
- (with-temp-buffer
- (insert str)
- (goto-char (point-min))
- (while (search-forward "\n" nil t)
- (delete-char -1)
- (insert "\r\n"))
- (buffer-string)))
-
-;; Convert all LFs to CRs in the string STR.
-(defun decoder-tests-lf-to-cr (str)
- (with-temp-buffer
- (insert str)
- (subst-char-in-region (point-min) (point-max) ?\n ?\r)
- (buffer-string)))
-
-;; Convert all LFs to LF LF sequences in the string STR.
-(defun decoder-tests-lf-to-lflf (str)
- (with-temp-buffer
- (insert str)
- (goto-char (point-min))
- (while (search-forward "\n" nil t)
- (insert "\n"))
- (buffer-string)))
-
-;; Prepend the UTF-8 BOM to STR.
-(defun decoder-tests-add-bom (str)
- (concat "\xfeff" str))
-
-;; Return the name of test file whose contents specified by
-;; CONTENT-TYPE and whose encoding specified by CODING-SYSTEM.
-(defun decoder-tests-filename (content-type coding-system &optional ext)
- (if ext
- (expand-file-name (format "%s-%s.%s" content-type coding-system ext)
- decoder-tests-workdir)
- (expand-file-name (format "%s-%s" content-type coding-system)
- decoder-tests-workdir)))
-
-
-;;; Check ASCII optimizing decoder
-
-;; Generate a test file whose contents specified by CONTENT-TYPE and
-;; whose encoding specified by CODING-SYSTEM.
-(defun decoder-tests-ao-gen-file (content-type coding-system)
- (let ((file (decoder-tests-filename content-type coding-system)))
- (decoder-tests-gen-file file
- (decoder-tests-file-contents content-type)
- coding-system)))
-
-;; Test the decoding of a file whose contents and encoding are
-;; specified by CONTENT-TYPE and WRITE-CODING. The test passes if the
-;; file is read by READ-CODING and detected as DETECTED-CODING and the
-;; contents is correctly decoded.
-;; Optional 5th arg TRANSLATOR is a function to translate the original
-;; file contents to match with the expected result of decoding. For
-;; instance, when a file of dos eol-type is read by unix eol-type,
-;; `decode-test-lf-to-crlf' must be specified.
-
-(defun decoder-tests (content-type write-coding read-coding detected-coding
- &optional translator)
- (prefer-coding-system 'utf-8-auto)
- (let ((filename (decoder-tests-filename content-type write-coding)))
- (with-temp-buffer
- (let ((coding-system-for-read read-coding)
- (contents (decoder-tests-file-contents content-type))
- (disable-ascii-optimization nil))
- (if translator
- (setq contents (funcall translator contents)))
- (insert-file-contents filename)
- (if (and (coding-system-equal buffer-file-coding-system detected-coding)
- (string= (buffer-string) contents))
- nil
- (list buffer-file-coding-system
- (string-to-list (buffer-string))
- (string-to-list contents)))))))
-
-(ert-deftest ert-test-decoder-ascii ()
- (unwind-protect
- (progn
- (dolist (eol-type '(unix dos mac))
- (decoder-tests-ao-gen-file 'ascii eol-type))
- (should-not (decoder-tests 'ascii 'unix 'undecided 'unix))
- (should-not (decoder-tests 'ascii 'dos 'undecided 'dos))
- (should-not (decoder-tests 'ascii 'dos 'dos 'dos))
- (should-not (decoder-tests 'ascii 'mac 'undecided 'mac))
- (should-not (decoder-tests 'ascii 'mac 'mac 'mac))
- (should-not (decoder-tests 'ascii 'dos 'utf-8 'utf-8-dos))
- (should-not (decoder-tests 'ascii 'dos 'unix 'unix
- 'decoder-tests-lf-to-crlf))
- (should-not (decoder-tests 'ascii 'mac 'dos 'dos
- 'decoder-tests-lf-to-cr))
- (should-not (decoder-tests 'ascii 'dos 'mac 'mac
- 'decoder-tests-lf-to-lflf)))
- (decoder-tests-remove-files)))
-
-(ert-deftest ert-test-decoder-latin ()
- (unwind-protect
- (progn
- (dolist (coding '("utf-8" "utf-8-with-signature"))
- (dolist (eol-type '("unix" "dos" "mac"))
- (decoder-tests-ao-gen-file 'latin
- (intern (concat coding "-" eol-type)))))
- (should-not (decoder-tests 'latin 'utf-8-unix 'undecided 'utf-8-unix))
- (should-not (decoder-tests 'latin 'utf-8-unix 'utf-8-unix 'utf-8-unix))
- (should-not (decoder-tests 'latin 'utf-8-dos 'undecided 'utf-8-dos))
- (should-not (decoder-tests 'latin 'utf-8-dos 'utf-8-dos 'utf-8-dos))
- (should-not (decoder-tests 'latin 'utf-8-mac 'undecided 'utf-8-mac))
- (should-not (decoder-tests 'latin 'utf-8-mac 'utf-8-mac 'utf-8-mac))
- (should-not (decoder-tests 'latin 'utf-8-dos 'unix 'utf-8-unix
- 'decoder-tests-lf-to-crlf))
- (should-not (decoder-tests 'latin 'utf-8-mac 'dos 'utf-8-dos
- 'decoder-tests-lf-to-cr))
- (should-not (decoder-tests 'latin 'utf-8-dos 'mac 'utf-8-mac
- 'decoder-tests-lf-to-lflf))
- (should-not (decoder-tests 'latin 'utf-8-with-signature-unix 'undecided
- 'utf-8-with-signature-unix))
- (should-not (decoder-tests 'latin 'utf-8-with-signature-unix 'utf-8-auto
- 'utf-8-with-signature-unix))
- (should-not (decoder-tests 'latin 'utf-8-with-signature-dos 'undecided
- 'utf-8-with-signature-dos))
- (should-not (decoder-tests 'latin 'utf-8-with-signature-unix 'utf-8
- 'utf-8-unix 'decoder-tests-add-bom))
- (should-not (decoder-tests 'latin 'utf-8-with-signature-unix 'utf-8
- 'utf-8-unix 'decoder-tests-add-bom)))
- (decoder-tests-remove-files)))
-
-(ert-deftest ert-test-decoder-binary ()
- (unwind-protect
- (progn
- (dolist (eol-type '("unix" "dos" "mac"))
- (decoder-tests-ao-gen-file 'binary
- (intern (concat "raw-text" "-" eol-type))))
- (should-not (decoder-tests 'binary 'raw-text-unix 'undecided
- 'raw-text-unix))
- (should-not (decoder-tests 'binary 'raw-text-dos 'undecided
- 'raw-text-dos))
- (should-not (decoder-tests 'binary 'raw-text-mac 'undecided
- 'raw-text-mac))
- (should-not (decoder-tests 'binary 'raw-text-dos 'unix
- 'raw-text-unix 'decoder-tests-lf-to-crlf))
- (should-not (decoder-tests 'binary 'raw-text-mac 'dos
- 'raw-text-dos 'decoder-tests-lf-to-cr))
- (should-not (decoder-tests 'binary 'raw-text-dos 'mac
- 'raw-text-mac 'decoder-tests-lf-to-lflf)))
- (decoder-tests-remove-files)))
-
-
-;;; Check the coding system `prefer-utf-8'.
-
-;; Read FILE. Check if the encoding was detected as DETECT. If
-;; PREFER is non-nil, prefer that coding system before reading.
-
-(defun decoder-tests-prefer-utf-8-read (file detect prefer)
- (with-temp-buffer
- (with-coding-priority (if prefer (list prefer))
- (insert-file-contents file))
- (if (eq buffer-file-coding-system detect)
- nil
- (format "Invalid detection: %s" buffer-file-coding-system))))
-
-;; Read FILE, modify it, and write it. Check if the coding system
-;; used for writing was CODING. If CODING-TAG is non-nil, insert
-;; coding tag with it before writing. If STR is non-nil, insert it
-;; before writing.
-
-(defun decoder-tests-prefer-utf-8-write (file coding-tag coding
- &optional str)
- (with-temp-buffer
- (insert-file-contents file)
- (goto-char (point-min))
- (if coding-tag
- (insert (format ";; -*- coding: %s; -*-\n" coding-tag))
- (insert ";;\n"))
- (if str
- (insert str))
- (write-file (decoder-tests-filename 'test 'test "el"))
- (if (coding-system-equal buffer-file-coding-system coding)
- nil
- (format "Incorrect encoding: %s" last-coding-system-used))))
-
-(ert-deftest ert-test-decoder-prefer-utf-8 ()
- (unwind-protect
- (let ((ascii (decoder-tests-gen-file "ascii.el"
- (decoder-tests-file-contents 'ascii)
- 'unix))
- (latin (decoder-tests-gen-file "utf-8.el"
- (decoder-tests-file-contents 'latin)
- 'utf-8-unix)))
- (should-not (decoder-tests-prefer-utf-8-read
- ascii 'prefer-utf-8-unix nil))
- (should-not (decoder-tests-prefer-utf-8-read
- latin 'utf-8-unix nil))
- (should-not (decoder-tests-prefer-utf-8-read
- latin 'utf-8-unix 'iso-8859-1))
- (should-not (decoder-tests-prefer-utf-8-read
- latin 'utf-8-unix 'sjis))
- (should-not (decoder-tests-prefer-utf-8-write
- ascii nil 'prefer-utf-8-unix))
- (should-not (decoder-tests-prefer-utf-8-write
- ascii 'iso-8859-1 'iso-8859-1-unix))
- (should-not (decoder-tests-prefer-utf-8-write
- ascii nil 'utf-8-unix "À")))
- (decoder-tests-remove-files)))
-
-
-;;; The following is for benchmark testing of the new optimized
-;;; decoder, not for regression testing.
-
-(defun generate-ascii-file ()
- (dotimes (i 100000)
- (insert-char ?a 80)
- (insert "\n")))
-
-(defun generate-rarely-nonascii-file ()
- (dotimes (i 100000)
- (if (/= i 50000)
- (insert-char ?a 80)
- (insert ?À)
- (insert-char ?a 79))
- (insert "\n")))
-
-(defun generate-mostly-nonascii-file ()
- (dotimes (i 30000)
- (insert-char ?a 80)
- (insert "\n"))
- (dotimes (i 20000)
- (insert-char ?À 80)
- (insert "\n"))
- (dotimes (i 10000)
- (insert-char ?あ 80)
- (insert "\n")))
-
-
-(defvar test-file-list
- '((generate-ascii-file
- ("~/ascii-tag-utf-8-unix.unix" ";; -*- coding: utf-8-unix; -*-" unix)
- ("~/ascii-tag-utf-8.unix" ";; -*- coding: utf-8; -*-" unix)
- ("~/ascii-tag-none.unix" "" unix)
- ("~/ascii-tag-utf-8-dos.dos" ";; -*- coding: utf-8-dos; -*-" dos)
- ("~/ascii-tag-utf-8.dos" ";; -*- coding: utf-8; -*-" dos)
- ("~/ascii-tag-none.dos" "" dos))
- (generate-rarely-nonascii-file
- ("~/utf-8-r-tag-utf-8-unix.unix" ";; -*- coding: utf-8-unix; -*-" utf-8-unix)
- ("~/utf-8-r-tag-utf-8.unix" ";; -*- coding: utf-8; -*-" utf-8-unix)
- ("~/utf-8-r-tag-none.unix" "" utf-8-unix)
- ("~/utf-8-r-tag-utf-8-dos.dos" ";; -*- coding: utf-8-dos; -*-" utf-8-dos)
- ("~/utf-8-r-tag-utf-8.dos" ";; -*- coding: utf-8; -*-" utf-8-dos)
- ("~/utf-8-r-tag-none.dos" "" utf-8-dos))
- (generate-mostly-nonascii-file
- ("~/utf-8-m-tag-utf-8-unix.unix" ";; -*- coding: utf-8-unix; -*-" utf-8-unix)
- ("~/utf-8-m-tag-utf-8.unix" ";; -*- coding: utf-8; -*-" utf-8-unix)
- ("~/utf-8-m-tag-none.unix" "" utf-8-unix)
- ("~/utf-8-m-tag-utf-8-dos.dos" ";; -*- coding: utf-8-dos; -*-" utf-8-dos)
- ("~/utf-8-m-tag-utf-8.dos" ";; -*- coding: utf-8; -*-" utf-8-dos)
- ("~/utf-8-m-tag-none.dos" "" utf-8-dos))))
-
-(defun generate-benchmark-test-file ()
- (interactive)
- (with-temp-buffer
- (message "Generating data...")
- (dolist (files test-file-list)
- (delete-region (point-min) (point-max))
- (funcall (car files))
- (dolist (file (cdr files))
- (message "Writing %s..." (car file))
- (goto-char (point-min))
- (insert (nth 1 file) "\n")
- (let ((coding-system-for-write (nth 2 file)))
- (write-region (point-min) (point-max) (car file)))
- (delete-region (point-min) (point))))))
-
-(defun benchmark-decoder ()
- (let ((gc-cons-threshold 4000000))
- (insert "Without optimization:\n")
- (dolist (files test-file-list)
- (dolist (file (cdr files))
- (let* ((disable-ascii-optimization t)
- (result (benchmark-run 10
- (with-temp-buffer (insert-file-contents (car file))))))
- (insert (format "%s: %s\n" (car file) result)))))
- (insert "With optimization:\n")
- (dolist (files test-file-list)
- (dolist (file (cdr files))
- (let* ((disable-ascii-optimization nil)
- (result (benchmark-run 10
- (with-temp-buffer (insert-file-contents (car file))))))
- (insert (format "%s: %s\n" (car file) result)))))))
diff --git a/test/automated/descr-text-test.el b/test/automated/descr-text-test.el
deleted file mode 100644
index 81ae727f076..00000000000
--- a/test/automated/descr-text-test.el
+++ /dev/null
@@ -1,94 +0,0 @@
-;;; descr-text-test.el --- ERT tests for descr-text.el -*- lexical-binding: t -*-
-
-;; Copyright (C) 2014 Free Software Foundation, Inc.
-
-;; Author: Michal Nazarewicz <mina86@mina86.com>
-
-;; 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/>.
-
-;;; Commentary:
-
-;; This package defines regression tests for the descr-text package.
-
-;;; Code:
-
-(require 'ert)
-(require 'descr-text)
-
-
-(ert-deftest descr-text-test-truncate ()
- "Tests describe-char-eldoc--truncate function."
- (should (equal ""
- (describe-char-eldoc--truncate " \t \n" 100)))
- (should (equal "foo"
- (describe-char-eldoc--truncate "foo" 1)))
- (should (equal "foo..."
- (describe-char-eldoc--truncate "foo wilma fred" 0)))
- (should (equal "foo..."
- (describe-char-eldoc--truncate
- "foo wilma fred" (length "foo wilma"))))
- (should (equal "foo wilma..."
- (describe-char-eldoc--truncate
- "foo wilma fred" (+ 3 (length "foo wilma")))))
- (should (equal "foo wilma..."
- (describe-char-eldoc--truncate
- "foo wilma fred" (1- (length "foo wilma fred")))))
- (should (equal "foo wilma fred"
- (describe-char-eldoc--truncate
- "foo wilma fred" (length "foo wilma fred"))))
- (should (equal "foo wilma fred"
- (describe-char-eldoc--truncate
- " foo\t wilma \nfred\t " (length "foo wilma fred")))))
-
-(ert-deftest descr-text-test-format-desc ()
- "Tests describe-char-eldoc--format function."
- (should (equal "U+2026: Horizontal ellipsis (Po: Punctuation, Other)"
- (describe-char-eldoc--format ?…)))
- (should (equal "U+2026: Horizontal ellipsis (Punctuation, Other)"
- (describe-char-eldoc--format ?… 51)))
- (should (equal "U+2026: Horizontal ellipsis (Po)"
- (describe-char-eldoc--format ?… 40)))
- (should (equal "Horizontal ellipsis (Po)"
- (describe-char-eldoc--format ?… 30)))
- (should (equal "Horizontal ellipsis"
- (describe-char-eldoc--format ?… 20)))
- (should (equal "Horizontal..."
- (describe-char-eldoc--format ?… 10))))
-
-(ert-deftest descr-text-test-desc ()
- "Tests describe-char-eldoc function."
- (with-temp-buffer
- (insert "a…")
- (goto-char (point-min))
- (should (eq ?a (following-char))) ; make sure we are where we think we are
- ;; Function should return nil for an ASCII character.
- (should (not (describe-char-eldoc)))
-
- (goto-char (1+ (point)))
- (should (eq ?… (following-char)))
- (let ((eldoc-echo-area-use-multiline-p t))
- ;; Function should return description of an Unicode character.
- (should (equal "U+2026: Horizontal ellipsis (Po: Punctuation, Other)"
- (describe-char-eldoc))))
-
- (goto-char (point-max))
- ;; At the end of the buffer, function should return nil and not blow up.
- (should (not (describe-char-eldoc)))))
-
-
-(provide 'descr-text-test)
-
-;;; descr-text-test.el ends here
diff --git a/test/automated/eieio-test-methodinvoke.el b/test/automated/eieio-test-methodinvoke.el
deleted file mode 100644
index 557f031d181..00000000000
--- a/test/automated/eieio-test-methodinvoke.el
+++ /dev/null
@@ -1,402 +0,0 @@
-;;; eieio-testsinvoke.el -- eieio tests for method invocation
-
-;; Copyright (C) 2005, 2008, 2010, 2013-2015 Free Software Foundation,
-;; Inc.
-
-;; Author: Eric M. Ludlam <zappo@gnu.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/>.
-
-;;; Commentary:
-;;
-;; Test method invocation order. From the common lisp reference
-;; manual:
-;;
-;; QUOTE:
-;; - All the :before methods are called, in most-specific-first
-;; order. Their values are ignored. An error is signaled if
-;; call-next-method is used in a :before method.
-;;
-;; - The most specific primary method is called. Inside the body of a
-;; primary method, call-next-method may be used to call the next
-;; most specific primary method. When that method returns, the
-;; previous primary method can execute more code, perhaps based on
-;; the returned value or values. The generic function no-next-method
-;; is invoked if call-next-method is used and there are no more
-;; applicable primary methods. The function next-method-p may be
-;; used to determine whether a next method exists. If
-;; call-next-method is not used, only the most specific primary
-;; method is called.
-;;
-;; - All the :after methods are called, in most-specific-last order.
-;; Their values are ignored. An error is signaled if
-;; call-next-method is used in a :after method.
-;;
-;;
-;; Also test behavior of `call-next-method'. From clos.org:
-;;
-;; QUOTE:
-;; When call-next-method is called with no arguments, it passes the
-;; current method's original arguments to the next method.
-
-(require 'eieio)
-(require 'ert)
-
-(defvar eieio-test-method-order-list nil
- "List of symbols stored during method invocation.")
-
-(defun eieio-test-method-store (&rest args)
- "Store current invocation class symbol in the invocation order list."
- (push args eieio-test-method-order-list))
-
-(defun eieio-test-match (rightanswer)
- "Do a test match."
- (if (equal rightanswer eieio-test-method-order-list)
- t
- (error "eieio-test-methodinvoke.el: Test Failed: %S != %S"
- rightanswer eieio-test-method-order-list)))
-
-(defvar eieio-test-call-next-method-arguments nil
- "List of passed to methods during execution of `call-next-method'.")
-
-(defun eieio-test-arguments-for (class)
- "Returns arguments passed to method of CLASS during `call-next-method'."
- (cdr (assoc class eieio-test-call-next-method-arguments)))
-
-(defclass eitest-A () ())
-(defclass eitest-AA (eitest-A) ())
-(defclass eitest-AAA (eitest-AA) ())
-(defclass eitest-B-base1 () ())
-(defclass eitest-B-base2 () ())
-(defclass eitest-B (eitest-B-base1 eitest-B-base2) ())
-
-(defmethod eitest-F :BEFORE ((p eitest-B-base1))
- (eieio-test-method-store :BEFORE 'eitest-B-base1))
-
-(defmethod eitest-F :BEFORE ((p eitest-B-base2))
- (eieio-test-method-store :BEFORE 'eitest-B-base2))
-
-(defmethod eitest-F :BEFORE ((p eitest-B))
- (eieio-test-method-store :BEFORE 'eitest-B))
-
-(defmethod eitest-F ((p eitest-B))
- (eieio-test-method-store :PRIMARY 'eitest-B)
- (call-next-method))
-
-(defmethod eitest-F ((p eitest-B-base1))
- (eieio-test-method-store :PRIMARY 'eitest-B-base1)
- (call-next-method))
-
-(defmethod eitest-F ((p eitest-B-base2))
- (eieio-test-method-store :PRIMARY 'eitest-B-base2)
- (when (next-method-p)
- (call-next-method))
- )
-
-(defmethod eitest-F :AFTER ((p eitest-B-base1))
- (eieio-test-method-store :AFTER 'eitest-B-base1))
-
-(defmethod eitest-F :AFTER ((p eitest-B-base2))
- (eieio-test-method-store :AFTER 'eitest-B-base2))
-
-(defmethod eitest-F :AFTER ((p eitest-B))
- (eieio-test-method-store :AFTER 'eitest-B))
-
-(ert-deftest eieio-test-method-order-list-3 ()
- (let ((eieio-test-method-order-list nil)
- (ans '(
- (:BEFORE eitest-B)
- (:BEFORE eitest-B-base1)
- (:BEFORE eitest-B-base2)
-
- (:PRIMARY eitest-B)
- (:PRIMARY eitest-B-base1)
- (:PRIMARY eitest-B-base2)
-
- (:AFTER eitest-B-base2)
- (:AFTER eitest-B-base1)
- (:AFTER eitest-B)
- )))
- (eitest-F (eitest-B nil))
- (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list))
- (eieio-test-match ans)))
-
-;;; Test static invocation
-;;
-(defmethod eitest-H :STATIC ((class eitest-A))
- "No need to do work in here."
- 'moose)
-
-(ert-deftest eieio-test-method-order-list-4 ()
- ;; Both of these situations should succeed.
- (should (eitest-H 'eitest-A))
- (should (eitest-H (eitest-A nil))))
-
-;;; Return value from :PRIMARY
-;;
-(defmethod eitest-I :BEFORE ((a eitest-A))
- (eieio-test-method-store :BEFORE 'eitest-A)
- ":before")
-
-(defmethod eitest-I :PRIMARY ((a eitest-A))
- (eieio-test-method-store :PRIMARY 'eitest-A)
- ":primary")
-
-(defmethod eitest-I :AFTER ((a eitest-A))
- (eieio-test-method-store :AFTER 'eitest-A)
- ":after")
-
-(ert-deftest eieio-test-method-order-list-5 ()
- (let ((eieio-test-method-order-list nil)
- (ans (eitest-I (eitest-A nil))))
- (should (string= ans ":primary"))))
-
-;;; Multiple inheritance and the 'constructor' method.
-;;
-;; Constructor is a static method, so this is really testing
-;; static method invocation and multiple inheritance.
-;;
-(defclass C-base1 () ())
-(defclass C-base2 () ())
-(defclass C (C-base1 C-base2) ())
-
-;; Just use the obsolete name once, to make sure it also works.
-(defmethod constructor :STATIC ((p C-base1) &rest args)
- (eieio-test-method-store :STATIC 'C-base1)
- (if (next-method-p) (call-next-method))
- )
-
-(defmethod make-instance :STATIC ((p C-base2) &rest args)
- (eieio-test-method-store :STATIC 'C-base2)
- (if (next-method-p) (call-next-method))
- )
-
-(cl-defmethod make-instance ((p (subclass C)) &rest args)
- (eieio-test-method-store :STATIC 'C)
- (cl-call-next-method)
- )
-
-(ert-deftest eieio-test-method-order-list-6 ()
- (let ((eieio-test-method-order-list nil)
- (ans '(
- (:STATIC C)
- (:STATIC C-base1)
- (:STATIC C-base2)
- )))
- (C nil)
- (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list))
- (eieio-test-match ans)))
-
-;;; Diamond Test
-;;
-;; For a diamond shaped inheritance structure, (call-next-method) can break.
-;; As such, there are two possible orders.
-
-(defclass D-base0 () () :method-invocation-order :depth-first)
-(defclass D-base1 (D-base0) () :method-invocation-order :depth-first)
-(defclass D-base2 (D-base0) () :method-invocation-order :depth-first)
-(defclass D (D-base1 D-base2) () :method-invocation-order :depth-first)
-
-(defmethod eitest-F ((p D))
- "D"
- (eieio-test-method-store :PRIMARY 'D)
- (call-next-method))
-
-(defmethod eitest-F ((p D-base0))
- "D-base0"
- (eieio-test-method-store :PRIMARY 'D-base0)
- ;; This should have no next
- ;; (when (next-method-p) (call-next-method))
- )
-
-(defmethod eitest-F ((p D-base1))
- "D-base1"
- (eieio-test-method-store :PRIMARY 'D-base1)
- (call-next-method))
-
-(defmethod eitest-F ((p D-base2))
- "D-base2"
- (eieio-test-method-store :PRIMARY 'D-base2)
- (when (next-method-p)
- (call-next-method))
- )
-
-(ert-deftest eieio-test-method-order-list-7 ()
- (let ((eieio-test-method-order-list nil)
- (ans '(
- (:PRIMARY D)
- (:PRIMARY D-base1)
- ;; (:PRIMARY D-base2)
- (:PRIMARY D-base0)
- )))
- (eitest-F (D nil))
- (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list))
- (eieio-test-match ans)))
-
-;;; Other invocation order
-
-(defclass E-base0 () () :method-invocation-order :breadth-first)
-(defclass E-base1 (E-base0) () :method-invocation-order :breadth-first)
-(defclass E-base2 (E-base0) () :method-invocation-order :breadth-first)
-(defclass E (E-base1 E-base2) () :method-invocation-order :breadth-first)
-
-(defmethod eitest-F ((p E))
- (eieio-test-method-store :PRIMARY 'E)
- (call-next-method))
-
-(defmethod eitest-F ((p E-base0))
- (eieio-test-method-store :PRIMARY 'E-base0)
- ;; This should have no next
- ;; (when (next-method-p) (call-next-method))
- )
-
-(defmethod eitest-F ((p E-base1))
- (eieio-test-method-store :PRIMARY 'E-base1)
- (call-next-method))
-
-(defmethod eitest-F ((p E-base2))
- (eieio-test-method-store :PRIMARY 'E-base2)
- (when (next-method-p)
- (call-next-method))
- )
-
-(ert-deftest eieio-test-method-order-list-8 ()
- (let ((eieio-test-method-order-list nil)
- (ans '(
- (:PRIMARY E)
- (:PRIMARY E-base1)
- (:PRIMARY E-base2)
- (:PRIMARY E-base0)
- )))
- (eitest-F (E nil))
- (setq eieio-test-method-order-list (nreverse eieio-test-method-order-list))
- (eieio-test-match ans)))
-
-;;; Jan's methodinvoke order w/ multiple inheritance and :after methods.
-;;
-(defclass eitest-Ja ()
- ())
-
-(defmethod initialize-instance :after ((this eitest-Ja) &rest slots)
- ;(message "+Ja")
- ;; FIXME: Using next-method-p in an after-method is invalid!
- (when (next-method-p)
- (call-next-method))
- ;(message "-Ja")
- )
-
-(defclass eitest-Jb ()
- ())
-
-(defmethod initialize-instance :after ((this eitest-Jb) &rest slots)
- ;(message "+Jb")
- ;; FIXME: Using next-method-p in an after-method is invalid!
- (when (next-method-p)
- (call-next-method))
- ;(message "-Jb")
- )
-
-(defclass eitest-Jc (eitest-Jb)
- ())
-
-(defclass eitest-Jd (eitest-Jc eitest-Ja)
- ())
-
-(defmethod initialize-instance ((this eitest-Jd) &rest slots)
- ;(message "+Jd")
- (when (next-method-p)
- (call-next-method))
- ;(message "-Jd")
- )
-
-(ert-deftest eieio-test-method-order-list-9 ()
- (should (eitest-Jd "test")))
-
-;;; call-next-method with replacement arguments across a simple class hierarchy.
-;;
-
-(defclass CNM-0 ()
- ())
-
-(defclass CNM-1-1 (CNM-0)
- ())
-
-(defclass CNM-1-2 (CNM-0)
- ())
-
-(defclass CNM-2 (CNM-1-1 CNM-1-2)
- ())
-
-(defmethod CNM-M ((this CNM-0) args)
- (push (cons 'CNM-0 (copy-sequence args))
- eieio-test-call-next-method-arguments)
- (when (next-method-p)
- (call-next-method
- this (cons 'CNM-0 args))))
-
-(defmethod CNM-M ((this CNM-1-1) args)
- (push (cons 'CNM-1-1 (copy-sequence args))
- eieio-test-call-next-method-arguments)
- (when (next-method-p)
- (call-next-method
- this (cons 'CNM-1-1 args))))
-
-(defmethod CNM-M ((this CNM-1-2) args)
- (push (cons 'CNM-1-2 (copy-sequence args))
- eieio-test-call-next-method-arguments)
- (when (next-method-p)
- (call-next-method)))
-
-(defmethod CNM-M ((this CNM-2) args)
- (push (cons 'CNM-2 (copy-sequence args))
- eieio-test-call-next-method-arguments)
- (when (next-method-p)
- (call-next-method
- this (cons 'CNM-2 args))))
-
-(ert-deftest eieio-test-method-order-list-10 ()
- (let ((eieio-test-call-next-method-arguments nil))
- (CNM-M (CNM-2 "") '(INIT))
- (should (equal (eieio-test-arguments-for 'CNM-0)
- '(CNM-1-1 CNM-2 INIT)))
- (should (equal (eieio-test-arguments-for 'CNM-1-1)
- '(CNM-2 INIT)))
- (should (equal (eieio-test-arguments-for 'CNM-1-2)
- '(CNM-1-1 CNM-2 INIT)))
- (should (equal (eieio-test-arguments-for 'CNM-2)
- '(INIT)))))
-
-;;; Check cl-generic integration.
-
-(cl-defgeneric eieio-test--1 (x y))
-
-(ert-deftest eieio-test-cl-generic-1 ()
- (cl-defgeneric eieio-test--1 (x y))
- (cl-defmethod eieio-test--1 (x y) (list x y))
- (cl-defmethod eieio-test--1 ((_x CNM-0) y)
- (cons "CNM-0" (cl-call-next-method 7 y)))
- (cl-defmethod eieio-test--1 ((_x CNM-1-1) _y)
- (cons "CNM-1-1" (cl-call-next-method)))
- (cl-defmethod eieio-test--1 ((_x CNM-1-2) _y)
- (cons "CNM-1-2" (cl-call-next-method)))
- (cl-defmethod eieio-test--1 ((_x (subclass CNM-1-2)) _y)
- (cons "subclass CNM-1-2" (cl-call-next-method)))
- (should (equal (eieio-test--1 4 5) '(4 5)))
- (should (equal (eieio-test--1 (make-instance 'CNM-0) 5)
- '("CNM-0" 7 5)))
- (should (equal (eieio-test--1 (make-instance 'CNM-2) 5)
- '("CNM-1-1" "CNM-1-2" "CNM-0" 7 5)))
- (should (equal (eieio-test--1 'CNM-2 6) '("subclass CNM-1-2" CNM-2 6))))
diff --git a/test/automated/eieio-test-persist.el b/test/automated/eieio-test-persist.el
deleted file mode 100644
index 9b21b730385..00000000000
--- a/test/automated/eieio-test-persist.el
+++ /dev/null
@@ -1,219 +0,0 @@
-;;; eieio-persist.el --- Tests for eieio-persistent class
-
-;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
-
-;; Author: Eric M. Ludlam <eric@siege-engine.com>
-
-;; 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/>.
-
-;;; Commentary:
-;;
-;; The eieio-persistent base-class provides a vital service, that
-;; could be used to accidentally load in malicious code. As such,
-;; something as simple as calling eval on the generated code can't be
-;; used. These tests exercises various flavors of data that might be
-;; in a persistent object, and tries to save/load them.
-
-;;; Code:
-(require 'eieio)
-(require 'eieio-base)
-(require 'ert)
-
-(defun eieio--attribute-to-initarg (class attribute)
- "In CLASS, convert the ATTRIBUTE into the corresponding init argument tag.
-This is usually a symbol that starts with `:'."
- (let ((tuple (rassoc attribute (eieio--class-initarg-tuples class))))
- (if tuple
- (car tuple)
- nil)))
-
-(defun persist-test-save-and-compare (original)
- "Compare the object ORIGINAL against the one read fromdisk."
-
- (eieio-persistent-save original)
-
- (let* ((file (oref original file))
- (class (eieio-object-class original))
- (fromdisk (eieio-persistent-read file class))
- (cv (cl--find-class class))
- (slots (eieio--class-slots cv))
- )
- (unless (object-of-class-p fromdisk class)
- (error "Persistent class %S != original class %S"
- (eieio-object-class fromdisk)
- class))
-
- (dotimes (i (length slots))
- (let* ((slot (aref slots i))
- (oneslot (cl--slot-descriptor-name slot))
- (origvalue (eieio-oref original oneslot))
- (fromdiskvalue (eieio-oref fromdisk oneslot))
- (initarg-p (eieio--attribute-to-initarg
- (cl--find-class class) oneslot))
- )
-
- (if initarg-p
- (unless (equal origvalue fromdiskvalue)
- (error "Slot %S Original Val %S != Persistent Val %S"
- oneslot origvalue fromdiskvalue))
- ;; Else !initarg-p
- (unless (equal (cl--slot-descriptor-initform slot) fromdiskvalue)
- (error "Slot %S Persistent Val %S != Default Value %S"
- oneslot fromdiskvalue (cl--slot-descriptor-initform slot))))
- ))))
-
-;;; Simple Case
-;;
-;; Simplest case is a mix of slots with and without initargs.
-
-(defclass persist-simple (eieio-persistent)
- ((slot1 :initarg :slot1
- :type symbol
- :initform moose)
- (slot2 :initarg :slot2
- :initform "foo")
- (slot3 :initform 2))
- "A Persistent object with two initializable slots, and one not.")
-
-(ert-deftest eieio-test-persist-simple-1 ()
- (let ((persist-simple-1
- (persist-simple "simple 1" :slot1 'goose :slot2 "testing"
- :file (concat default-directory "test-ps1.pt"))))
- (should persist-simple-1)
-
- ;; When the slot w/out an initarg has not been changed
- (persist-test-save-and-compare persist-simple-1)
-
- ;; When the slot w/out an initarg HAS been changed
- (oset persist-simple-1 slot3 3)
- (persist-test-save-and-compare persist-simple-1)
- (delete-file (oref persist-simple-1 file))))
-
-;;; Slot Writers
-;;
-;; Replica of the test in eieio-tests.el -
-
-(defclass persist-:printer (eieio-persistent)
- ((slot1 :initarg :slot1
- :initform 'moose
- :printer PO-slot1-printer)
- (slot2 :initarg :slot2
- :initform "foo"))
- "A Persistent object with two initializable slots.")
-
-(defun PO-slot1-printer (slotvalue)
- "Print the slot value SLOTVALUE to stdout.
-Assume SLOTVALUE is a symbol of some sort."
- (princ "'")
- (princ (symbol-name slotvalue))
- (princ " ;; RAN PRINTER")
- nil)
-
-(ert-deftest eieio-test-persist-printer ()
- (let ((persist-:printer-1
- (persist-:printer "persist" :slot1 'goose :slot2 "testing"
- :file (concat default-directory "test-ps2.pt"))))
- (should persist-:printer-1)
- (persist-test-save-and-compare persist-:printer-1)
-
- (let* ((find-file-hook nil)
- (tbuff (find-file-noselect "test-ps2.pt"))
- )
- (condition-case nil
- (unwind-protect
- (with-current-buffer tbuff
- (goto-char (point-min))
- (re-search-forward "RAN PRINTER"))
- (kill-buffer tbuff))
- (error "persist-:printer-1's Slot1 printer function didn't work.")))
- (delete-file (oref persist-:printer-1 file))))
-
-;;; Slot with Object
-;;
-;; A slot that contains another object that isn't persistent
-(defclass persist-not-persistent ()
- ((slot1 :initarg :slot1
- :initform 1)
- (slot2 :initform 2))
- "Class for testing persistent saving of an object that isn't
-persistent. This class is instead used as a slot value in a
-persistent class.")
-
-(defclass persistent-with-objs-slot (eieio-persistent)
- ((pnp :initarg :pnp
- :type (or null persist-not-persistent)
- :initform nil))
- "Class for testing the saving of slots with objects in them.")
-
-(ert-deftest eieio-test-non-persistent-as-slot ()
- (let ((persist-wos
- (persistent-with-objs-slot
- "persist wos 1"
- :pnp (persist-not-persistent "pnp 1" :slot1 3)
- :file (concat default-directory "test-ps3.pt"))))
-
- (persist-test-save-and-compare persist-wos)
- (delete-file (oref persist-wos file))))
-
-;;; Slot with Object child of :type
-;;
-;; A slot that contains another object that isn't persistent
-(defclass persist-not-persistent-subclass (persist-not-persistent)
- ((slot3 :initarg :slot1
- :initform 1)
- (slot4 :initform 2))
- "Class for testing persistent saving of an object subclass that isn't
-persistent. This class is instead used as a slot value in a
-persistent class.")
-
-(defclass persistent-with-objs-slot-subs (eieio-persistent)
- ((pnp :initarg :pnp
- :type (or null persist-not-persistent)
- :initform nil))
- "Class for testing the saving of slots with objects in them.")
-
-(ert-deftest eieio-test-non-persistent-as-slot-child ()
- (let ((persist-woss
- (persistent-with-objs-slot-subs
- "persist woss 1"
- :pnp (persist-not-persistent-subclass "pnps 1" :slot1 3)
- :file (concat default-directory "test-ps4.pt"))))
-
- (persist-test-save-and-compare persist-woss)
- (delete-file (oref persist-woss file))))
-
-;;; Slot with a list of Objects
-;;
-;; A slot that contains another object that isn't persistent
-(defclass persistent-with-objs-list-slot (eieio-persistent)
- ((pnp :initarg :pnp
- :type (list-of persist-not-persistent)
- :initform nil))
- "Class for testing the saving of slots with objects in them.")
-
-(ert-deftest eieio-test-slot-with-list-of-objects ()
- (let ((persist-wols
- (persistent-with-objs-list-slot
- "persist wols 1"
- :pnp (list (persist-not-persistent "pnp 1" :slot1 3)
- (persist-not-persistent "pnp 2" :slot1 4)
- (persist-not-persistent "pnp 3" :slot1 5))
- :file (concat default-directory "test-ps5.pt"))))
-
- (persist-test-save-and-compare persist-wols)
- (delete-file (oref persist-wols file))))
-
-;;; eieio-test-persist.el ends here
diff --git a/test/automated/eieio-tests.el b/test/automated/eieio-tests.el
deleted file mode 100644
index 915532b299c..00000000000
--- a/test/automated/eieio-tests.el
+++ /dev/null
@@ -1,900 +0,0 @@
-;;; eieio-tests.el -- eieio tests routines
-
-;; Copyright (C) 1999-2003, 2005-2010, 2012-2015 Free Software
-;; Foundation, Inc.
-
-;; Author: Eric M. Ludlam <zappo@gnu.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/>.
-
-;;; Commentary:
-;;
-;; Test the various features of EIEIO.
-
-(require 'ert)
-(require 'eieio)
-(require 'eieio-base)
-(require 'eieio-opt)
-
-(eval-when-compile (require 'cl-lib))
-
-;;; Code:
-;; Set up some test classes
-(defclass class-a ()
- ((water :initarg :water
- :initform h20
- :type symbol
- :documentation "Detail about water.")
- (classslot :initform penguin
- :type symbol
- :documentation "A class allocated slot."
- :allocation :class)
- (test-tag :initform nil
- :documentation "Used to make sure methods are called.")
- (self :initform nil
- :type (or null class-a)
- :documentation "Test self referencing types.")
- )
- "Class A")
-
-(defclass class-b ()
- ((land :initform "Sc"
- :type string
- :documentation "Detail about land."))
- "Class B")
-
-(defclass class-ab (class-a class-b)
- ((amphibian :initform "frog"
- :documentation "Detail about amphibian on land and water."))
- "Class A and B combined.")
-
-(defclass class-c ()
- ((slot-1 :initarg :moose
- :initform moose
- :type symbol
- :allocation :instance
- :documentation "First slot testing slot arguments."
- :custom symbol
- :label "Wild Animal"
- :group borg
- :protection :public)
- (slot-2 :initarg :penguin
- :initform "penguin"
- :type string
- :allocation :instance
- :documentation "Second slot testing slot arguments."
- :custom string
- :label "Wild bird"
- :group vorlon
- :accessor get-slot-2
- :protection :private)
- (slot-3 :initarg :emu
- :initform emu
- :type symbol
- :allocation :class
- :documentation "Third slot test class allocated accessor"
- :custom symbol
- :label "Fuzz"
- :group tokra
- :accessor get-slot-3
- :protection :private)
- )
- (:custom-groups (foo))
- "A class for testing slot arguments."
- )
-
-(defclass class-subc (class-c)
- ((slot-1 ;; :initform moose - don't override this
- )
- (slot-2 :initform "linux" ;; Do override this one
- :protection :private
- ))
- "A class for testing slot arguments.")
-
-;;; Defining a class with a slot tag error
-;;
-;; Temporarily disable this test because of macro expansion changes in
-;; current Emacs trunk. It can be re-enabled when we have moved
-;; `eieio-defclass' into the `defclass' macro and the
-;; `eval-and-compile' there is removed.
-
-;; (let ((eieio-error-unsupported-class-tags t))
-;; (condition-case nil
-;; (progn
-;; (defclass class-error ()
-;; ((error-slot :initarg :error-slot
-;; :badslottag 1))
-;; "A class with a bad slot tag.")
-;; (error "No error was thrown for badslottag"))
-;; (invalid-slot-type nil)))
-
-;; (let ((eieio-error-unsupported-class-tags nil))
-;; (condition-case nil
-;; (progn
-;; (defclass class-error ()
-;; ((error-slot :initarg :error-slot
-;; :badslottag 1))
-;; "A class with a bad slot tag."))
-;; (invalid-slot-type
-;; (error "invalid-slot-type thrown when eieio-error-unsupported-class-tags is nil")
-;; )))
-
-(ert-deftest eieio-test-01-mix-alloc-initarg ()
- ;; Only run this test if the message framework thingy works.
- (when (and (message "foo") (string= "foo" (current-message)))
-
- ;; Defining this class should generate a warning(!) message that
- ;; you should not mix :initarg with class allocated slots.
- (defclass class-alloc-initarg ()
- ((throwwarning :initarg :throwwarning
- :allocation :class))
- "Throw a warning mixing allocation class and an initarg.")
-
- ;; Check that message is there
- (should (current-message))
- (should (string-match "Class allocated slots do not need :initarg"
- (current-message)))))
-
-(defclass abstract-class ()
- ((some-slot :initarg :some-slot
- :initform nil
- :documentation "A slot."))
- :documentation "An abstract class."
- :abstract t)
-
-(ert-deftest eieio-test-02-abstract-class ()
- ;; Abstract classes cannot be instantiated, so this should throw an
- ;; error
- (should-error (abstract-class)))
-
-(defgeneric generic1 () "First generic function")
-
-(ert-deftest eieio-test-03-generics ()
- (defun anormalfunction () "A plain function for error testing." nil)
- (should-error
- (progn
- (defgeneric anormalfunction ()
- "Attempt to turn it into a generic.")))
-
- ;; Check that generic-p works
- (should (generic-p 'generic1))
-
- (defmethod generic1 ((c class-a))
- "Method on generic1."
- 'monkey)
-
- (defmethod generic1 (not-an-object)
- "Method generic1 that can take a non-object."
- not-an-object)
-
- (let ((ans-obj (generic1 (class-a)))
- (ans-num (generic1 666)))
- (should (eq ans-obj 'monkey))
- (should (eq ans-num 666))))
-
-(defclass static-method-class ()
- ((some-slot :initform nil
- :allocation :class
- :documentation "A slot."))
- :documentation "A class used for testing static methods.")
-
-(defmethod static-method-class-method :STATIC ((c static-method-class) value)
- "Test static methods.
-Argument C is the class bound to this static method."
- (if (eieio-object-p c) (setq c (eieio-object-class c)))
- (oset-default c some-slot value))
-
-(ert-deftest eieio-test-04-static-method ()
- ;; Call static method on a class and see if it worked
- (static-method-class-method 'static-method-class 'class)
- (should (eq (oref-default 'static-method-class some-slot) 'class))
- (static-method-class-method (static-method-class) 'object)
- (should (eq (oref-default 'static-method-class some-slot) 'object)))
-
-(ert-deftest eieio-test-05-static-method-2 ()
- (defclass static-method-class-2 (static-method-class)
- ()
- "A second class after the previous for static methods.")
-
- (defmethod static-method-class-method :STATIC ((c static-method-class-2) value)
- "Test static methods.
-Argument C is the class bound to this static method."
- (if (eieio-object-p c) (setq c (eieio-object-class c)))
- (oset-default c some-slot (intern (concat "moose-" (symbol-name value)))))
-
- (static-method-class-method 'static-method-class-2 'class)
- (should (eq (oref-default 'static-method-class-2 some-slot) 'moose-class))
- (static-method-class-method (static-method-class-2) 'object)
- (should (eq (oref-default 'static-method-class-2 some-slot) 'moose-object)))
-
-
-;;; Perform method testing
-;;
-
-;;; Multiple Inheritance, and method signal testing
-;;
-(defvar eitest-ab nil)
-(defvar eitest-a nil)
-(defvar eitest-b nil)
-(ert-deftest eieio-test-06-allocate-objects ()
- ;; allocate an object to use
- (should (setq eitest-ab (class-ab)))
- (should (setq eitest-a (class-a)))
- (should (setq eitest-b (class-b))))
-
-(ert-deftest eieio-test-07-make-instance ()
- (should (make-instance 'class-ab))
- (should (make-instance 'class-a :water 'cho))
- (should (make-instance 'class-b)))
-
-(defmethod class-cn ((a class-a))
- "Try calling `call-next-method' when there isn't one.
-Argument A is object of type symbol `class-a'."
- (call-next-method))
-
-(defmethod no-next-method ((a class-a) &rest args)
- "Override signal throwing for variable `class-a'.
-Argument A is the object of class variable `class-a'."
- 'moose)
-
-(ert-deftest eieio-test-08-call-next-method ()
- ;; Play with call-next-method
- (should (eq (class-cn eitest-ab) 'moose)))
-
-(defmethod no-applicable-method ((b class-b) method &rest args)
- "No need.
-Argument B is for booger.
-METHOD is the method that was attempting to be called."
- 'moose)
-
-(ert-deftest eieio-test-09-no-applicable-method ()
- ;; Non-existing methods.
- (should (eq (class-cn eitest-b) 'moose)))
-
-(defmethod class-fun ((a class-a))
- "Fun with class A."
- 'moose)
-
-(defmethod class-fun ((b class-b))
- "Fun with class B."
- (error "Class B fun should not be called")
- )
-
-(defmethod class-fun-foo ((b class-b))
- "Foo Fun with class B."
- 'moose)
-
-(defmethod class-fun2 ((a class-a))
- "More fun with class A."
- 'moose)
-
-(defmethod class-fun2 ((b class-b))
- "More fun with class B."
- (error "Class B fun2 should not be called")
- )
-
-(defmethod class-fun2 ((ab class-ab))
- "More fun with class AB."
- (call-next-method))
-
-;; How about if B is the only slot?
-(defmethod class-fun3 ((b class-b))
- "Even More fun with class B."
- 'moose)
-
-(defmethod class-fun3 ((ab class-ab))
- "Even More fun with class AB."
- (call-next-method))
-
-(ert-deftest eieio-test-10-multiple-inheritance ()
- ;; play with methods and mi
- (should (eq (class-fun eitest-ab) 'moose))
- (should (eq (class-fun-foo eitest-ab) 'moose))
- ;; Play with next-method and mi
- (should (eq (class-fun2 eitest-ab) 'moose))
- (should (eq (class-fun3 eitest-ab) 'moose)))
-
-(ert-deftest eieio-test-11-self ()
- ;; Try the self referencing test
- (should (oset eitest-a self eitest-a))
- (should (oset eitest-ab self eitest-ab)))
-
-
-(defvar class-fun-value-seq '())
-(defmethod class-fun-value :BEFORE ((a class-a))
- "Return `before', and push `before' in `class-fun-value-seq'."
- (push 'before class-fun-value-seq)
- 'before)
-
-(defmethod class-fun-value :PRIMARY ((a class-a))
- "Return `primary', and push `primary' in `class-fun-value-seq'."
- (push 'primary class-fun-value-seq)
- 'primary)
-
-(defmethod class-fun-value :AFTER ((a class-a))
- "Return `after', and push `after' in `class-fun-value-seq'."
- (push 'after class-fun-value-seq)
- 'after)
-
-(ert-deftest eieio-test-12-generic-function-call ()
- ;; Test value of a generic function call
- ;;
- (let* ((class-fun-value-seq nil)
- (value (class-fun-value eitest-a)))
- ;; Test if generic function call returns the primary method's value
- (should (eq value 'primary))
- ;; Make sure :before and :after methods were run
- (should (equal class-fun-value-seq '(after primary before)))))
-
-;;; Test initialization methods
-;;
-
-(ert-deftest eieio-test-13-init-methods ()
- (defmethod initialize-instance ((a class-a) &rest slots)
- "Initialize the slots of class-a."
- (call-next-method)
- (if (/= (oref a test-tag) 1)
- (error "shared-initialize test failed."))
- (oset a test-tag 2))
-
- (defmethod shared-initialize ((a class-a) &rest slots)
- "Shared initialize method for class-a."
- (call-next-method)
- (oset a test-tag 1))
-
- (let ((ca (class-a)))
- (should-not (/= (oref ca test-tag) 2))))
-
-
-;;; Perform slot testing
-;;
-(ert-deftest eieio-test-14-slots ()
- ;; Check slot existence
- (should (oref eitest-ab water))
- (should (oref eitest-ab land))
- (should (oref eitest-ab amphibian)))
-
-(ert-deftest eieio-test-15-slot-missing ()
-
- (defmethod slot-missing ((ab class-ab) &rest foo)
- "If a slot in AB is unbound, return something cool. FOO."
- 'moose)
-
- (should (eq (oref eitest-ab ooga-booga) 'moose))
- (should-error (oref eitest-a ooga-booga) :type 'invalid-slot-name))
-
-(ert-deftest eieio-test-16-slot-makeunbound ()
- (slot-makeunbound eitest-a 'water)
- ;; Should now be unbound
- (should-not (slot-boundp eitest-a 'water))
- ;; But should still exist
- (should (slot-exists-p eitest-a 'water))
- (should-not (slot-exists-p eitest-a 'moose))
- ;; oref of unbound slot must fail
- (should-error (oref eitest-a water) :type 'unbound-slot))
-
-(defvar eitest-vsca nil)
-(defvar eitest-vscb nil)
-(defclass virtual-slot-class ()
- ((base-value :initarg :base-value))
- "Class has real slot :base-value and simulated slot :derived-value.")
-(defmethod slot-missing ((vsc virtual-slot-class)
- slot-name operation &optional new-value)
- "Simulate virtual slot derived-value."
- (cond
- ((or (eq slot-name :derived-value)
- (eq slot-name 'derived-value))
- (with-slots (base-value) vsc
- (if (eq operation 'oref)
- (+ base-value 1)
- (setq base-value (- new-value 1)))))
- (t (call-next-method))))
-
-(ert-deftest eieio-test-17-virtual-slot ()
- (setq eitest-vsca (virtual-slot-class :base-value 1))
- ;; Check slot values
- (should (= (oref eitest-vsca base-value) 1))
- (should (= (oref eitest-vsca :derived-value) 2))
-
- (oset eitest-vsca derived-value 3)
- (should (= (oref eitest-vsca base-value) 2))
- (should (= (oref eitest-vsca :derived-value) 3))
-
- (oset eitest-vsca base-value 3)
- (should (= (oref eitest-vsca base-value) 3))
- (should (= (oref eitest-vsca :derived-value) 4))
-
- ;; should also be possible to initialize instance using virtual slot
-
- (setq eitest-vscb (virtual-slot-class :derived-value 5))
- (should (= (oref eitest-vscb base-value) 4))
- (should (= (oref eitest-vscb :derived-value) 5)))
-
-(ert-deftest eieio-test-18-slot-unbound ()
-
- (defmethod slot-unbound ((a class-a) &rest foo)
- "If a slot in A is unbound, ignore FOO."
- 'moose)
-
- (should (eq (oref eitest-a water) 'moose))
-
- ;; Check if oset of unbound works
- (oset eitest-a water 'moose)
- (should (eq (oref eitest-a water) 'moose))
-
- ;; oref/oref-default comparison
- (should-not (eq (oref eitest-a water) (oref-default eitest-a water)))
-
- ;; oset-default -> oref/oref-default comparison
- (oset-default (eieio-object-class eitest-a) water 'moose)
- (should (eq (oref eitest-a water) (oref-default eitest-a water)))
-
- ;; After setting 'water to 'moose, make sure a new object has
- ;; the right stuff.
- (oset-default (eieio-object-class eitest-a) water 'penguin)
- (should (eq (oref (class-a) water) 'penguin))
-
- ;; Revert the above
- (defmethod slot-unbound ((a class-a) &rest foo)
- "If a slot in A is unbound, ignore FOO."
- ;; Disable the old slot-unbound so we can run this test
- ;; more than once
- (call-next-method)))
-
-(ert-deftest eieio-test-19-slot-type-checking ()
- ;; Slot type checking
- ;; We should not be able to set a string here
- (should-error (oset eitest-ab water "a string, not a symbol") :type 'invalid-slot-type)
- (should-error (oset eitest-ab classslot "a string, not a symbol") :type 'invalid-slot-type)
- (should-error (class-a :water "a string not a symbol") :type 'invalid-slot-type))
-
-(ert-deftest eieio-test-20-class-allocated-slots ()
- ;; Test out class allocated slots
- (defvar eitest-aa nil)
- (setq eitest-aa (class-a))
-
- ;; Make sure class slots do not track between objects
- (let ((newval 'moose))
- (oset eitest-aa classslot newval)
- (should (eq (oref eitest-a classslot) newval))
- (should (eq (oref eitest-aa classslot) newval)))
-
- ;; Slot should be bound
- (should (slot-boundp eitest-a 'classslot))
- (should (slot-boundp 'class-a 'classslot))
-
- (slot-makeunbound eitest-a 'classslot)
-
- (should-not (slot-boundp eitest-a 'classslot))
- (should-not (slot-boundp 'class-a 'classslot)))
-
-
-(defvar eieio-test-permuting-value nil)
-(defvar eitest-pvinit nil)
-(eval-and-compile
- (setq eieio-test-permuting-value 1))
-
-(defclass inittest nil
- ((staticval :initform 1)
- (symval :initform eieio-test-permuting-value)
- (evalval :initform (symbol-value 'eieio-test-permuting-value))
- (evalnow :initform (symbol-value 'eieio-test-permuting-value)
- :allocation :class)
- )
- "Test initforms that eval.")
-
-(ert-deftest eieio-test-21-eval-at-construction-time ()
- ;; initforms that need to be evalled at construction time.
- (setq eieio-test-permuting-value 2)
- (setq eitest-pvinit (inittest))
-
- (should (eq (oref eitest-pvinit staticval) 1))
- (should (eq (oref eitest-pvinit symval) 'eieio-test-permuting-value))
- (should (eq (oref eitest-pvinit evalval) 2))
- (should (eq (oref eitest-pvinit evalnow) 1)))
-
-(defvar eitest-tests nil)
-
-(ert-deftest eieio-test-22-init-forms-dont-match-runnable ()
- ;; Init forms with types that don't match the runnable.
- (defclass eitest-subordinate nil
- ((text :initform "" :type string))
- "Test class that will be a calculated value.")
-
- (defclass eitest-superior nil
- ((sub :initform (eitest-subordinate)
- :type eitest-subordinate))
- "A class with an initform that creates a class.")
-
- (should (setq eitest-tests (eitest-superior)))
-
- (should-error
- (eval
- '(defclass broken-init nil
- ((broken :initform 1
- :type string))
- "This class should break."))
- :type 'invalid-slot-type))
-
-(ert-deftest eieio-test-23-inheritance-check ()
- (should (child-of-class-p 'class-ab 'class-a))
- (should (child-of-class-p 'class-ab 'class-b))
- (should (object-of-class-p eitest-a 'class-a))
- (should (object-of-class-p eitest-ab 'class-a))
- (should (object-of-class-p eitest-ab 'class-b))
- (should (object-of-class-p eitest-ab 'class-ab))
- (should (eq (eieio-class-parents 'class-a) nil))
- (should (equal (eieio-class-parents 'class-ab)
- (mapcar #'find-class '(class-a class-b))))
- (should (same-class-p eitest-a 'class-a))
- (should (class-a-p eitest-a))
- (should (not (class-a-p eitest-ab)))
- (should (cl-typep eitest-a 'class-a))
- (should (cl-typep eitest-ab 'class-a))
- (should (not (class-a-p "foo")))
- (should (not (cl-typep "foo" 'class-a))))
-
-(ert-deftest eieio-test-24-object-predicates ()
- (let ((listooa (list (class-ab) (class-a)))
- (listoob (list (class-ab) (class-b))))
- (should (cl-typep listooa '(list-of class-a)))
- (should (cl-typep listoob '(list-of class-b)))
- (should-not (cl-typep listooa '(list-of class-b)))
- (should-not (cl-typep listoob '(list-of class-a)))))
-
-(defvar eitest-t1 nil)
-(ert-deftest eieio-test-25-slot-tests ()
- (setq eitest-t1 (class-c))
- ;; Slot initialization
- (should (eq (oref eitest-t1 slot-1) 'moose))
- ;; Accessing via the initarg name is deprecated!
- ;; (should (eq (oref eitest-t1 :moose) 'moose))
- ;; Don't pass reference of private slot
- ;;PRIVATE (should-error (oref eitest-t1 slot-2) :type 'invalid-slot-name)
- ;; Check private slot accessor
- (should (string= (get-slot-2 eitest-t1) "penguin"))
- ;; Pass string instead of symbol
- (should-error (class-c :moose "not a symbol") :type 'invalid-slot-type)
- (should (eq (get-slot-3 eitest-t1) 'emu))
- (should (eq (get-slot-3 'class-c) 'emu))
- ;; Check setf
- (setf (get-slot-3 eitest-t1) 'setf-emu)
- (should (eq (get-slot-3 eitest-t1) 'setf-emu))
- ;; Roll back
- (setf (get-slot-3 eitest-t1) 'emu))
-
-(defvar eitest-t2 nil)
-(ert-deftest eieio-test-26-default-inheritance ()
- ;; See previous test, nor for subclass
- (setq eitest-t2 (class-subc))
- (should (eq (oref eitest-t2 slot-1) 'moose))
- ;; Accessing via the initarg name is deprecated!
- ;;(should (eq (oref eitest-t2 :moose) 'moose))
- (should (string= (get-slot-2 eitest-t2) "linux"))
- ;;PRIVATE (should-error (oref eitest-t2 slot-2) :type 'invalid-slot-name)
- (should (string= (get-slot-2 eitest-t2) "linux"))
- (should-error (class-subc :moose "not a symbol") :type 'invalid-slot-type))
-
-;;(ert-deftest eieio-test-27-inherited-new-value ()
- ;;; HACK ALERT: The new value of a class slot is inherited by the
- ;; subclass! This is probably a bug. We should either share the slot
- ;; so sets on the baseclass change the subclass, or we should inherit
- ;; the original value.
-;; (should (eq (get-slot-3 eitest-t2) 'emu))
-;; (should (eq (get-slot-3 class-subc) 'emu))
-;; (setf (get-slot-3 eitest-t2) 'setf-emu)
-;; (should (eq (get-slot-3 eitest-t2) 'setf-emu)))
-
-;; Slot protection
-(defclass prot-0 ()
- ()
- "Protection testing baseclass.")
-
-(defmethod prot0-slot-2 ((s2 prot-0))
- "Try to access slot-2 from this class which doesn't have it.
-The object S2 passed in will be of class prot-1, which does have
-the slot. This could be allowed, and currently is in EIEIO.
-Needed by the eieio persistent base class."
- (oref s2 slot-2))
-
-(defclass prot-1 (prot-0)
- ((slot-1 :initarg :slot-1
- :initform nil
- :protection :public)
- (slot-2 :initarg :slot-2
- :initform nil
- :protection :protected)
- (slot-3 :initarg :slot-3
- :initform nil
- :protection :private))
- "A class for testing the :protection option.")
-
-(defclass prot-2 (prot-1)
- nil
- "A class for testing the :protection option.")
-
-(defmethod prot1-slot-2 ((s2 prot-1))
- "Try to access slot-2 in S2."
- (oref s2 slot-2))
-
-(defmethod prot1-slot-2 ((s2 prot-2))
- "Try to access slot-2 in S2."
- (oref s2 slot-2))
-
-(defmethod prot1-slot-3-only ((s2 prot-1))
- "Try to access slot-3 in S2.
-Do not override for `prot-2'."
- (oref s2 slot-3))
-
-(defmethod prot1-slot-3 ((s2 prot-1))
- "Try to access slot-3 in S2."
- (oref s2 slot-3))
-
-(defmethod prot1-slot-3 ((s2 prot-2))
- "Try to access slot-3 in S2."
- (oref s2 slot-3))
-
-(defvar eitest-p1 nil)
-(defvar eitest-p2 nil)
-(ert-deftest eieio-test-28-slot-protection ()
- (setq eitest-p1 (prot-1))
- (setq eitest-p2 (prot-2))
- ;; Access public slots
- (oref eitest-p1 slot-1)
- (oref eitest-p2 slot-1)
- ;; Accessing protected slot out of context used to fail, but we dropped this
- ;; feature, since it was underused and no one noticed that the check was
- ;; incorrect (much too loose).
- ;;PROTECTED (should-error (oref eitest-p1 slot-2) :type 'invalid-slot-name)
- ;; Access protected slot in method
- (prot1-slot-2 eitest-p1)
- ;; Protected slot in subclass method
- (prot1-slot-2 eitest-p2)
- ;; Protected slot from parent class method
- (prot0-slot-2 eitest-p1)
- ;; Accessing private slot out of context used to fail, but we dropped this
- ;; feature, since it was not used.
- ;;PRIVATE (should-error (oref eitest-p1 slot-3) :type 'invalid-slot-name)
- ;; Access private slot in method
- (prot1-slot-3 eitest-p1)
- ;; Access private slot in subclass method must fail
- ;;PRIVATE (should-error (prot1-slot-3 eitest-p2) :type 'invalid-slot-name)
- ;; Access private slot by same class
- (prot1-slot-3-only eitest-p1)
- ;; Access private slot by subclass in sameclass method
- (prot1-slot-3-only eitest-p2))
-
-;;; eieio-instance-inheritor
-;; Test to make sure this works.
-(defclass II (eieio-instance-inheritor)
- ((slot1 :initform 1)
- (slot2)
- (slot3))
- "Instance Inheritor test class.")
-
-(defvar eitest-II1 nil)
-(defvar eitest-II2 nil)
-(defvar eitest-II3 nil)
-(ert-deftest eieio-test-29-instance-inheritor ()
- (setq eitest-II1 (II "II Test."))
- (oset eitest-II1 slot2 'cat)
- (setq eitest-II2 (clone eitest-II1 "eitest-II2 Test."))
- (oset eitest-II2 slot1 'moose)
- (setq eitest-II3 (clone eitest-II2 "eitest-II3 Test."))
- (oset eitest-II3 slot3 'penguin)
-
- ;; Test level 1 inheritance
- (should (eq (oref eitest-II3 slot1) 'moose))
- ;; Test level 2 inheritance
- (should (eq (oref eitest-II3 slot2) 'cat))
- ;; Test level 0 inheritance
- (should (eq (oref eitest-II3 slot3) 'penguin)))
-
-(defclass slotattr-base ()
- ((initform :initform init)
- (type :type list)
- (initarg :initarg :initarg)
- (protection :protection :private)
- (custom :custom (repeat string)
- :label "Custom Strings"
- :group moose)
- (docstring :documentation
- "Replace the doc-string for this property.")
- (printer :printer printer1)
- )
- "Baseclass we will attempt to subclass.
-Subclasses to override slot attributes.")
-
-(defclass slotattr-ok (slotattr-base)
- ((initform :initform no-init)
- (initarg :initarg :initblarg)
- (custom :custom string
- :label "One String"
- :group cow)
- (docstring :documentation
- "A better doc string for this class.")
- (printer :printer printer2)
- )
- "This class should allow overriding of various slot attributes.")
-
-
-(ert-deftest eieio-test-30-slot-attribute-override ()
- ;; Subclass should not override :protection slot attribute
- ;;PROTECTION is gone.
- ;;(should-error
- ;; (eval
- ;; '(defclass slotattr-fail (slotattr-base)
- ;; ((protection :protection :public)
- ;; )
- ;; "This class should throw an error.")))
-
- ;; Subclass should not override :type slot attribute
- (should-error
- (eval
- '(defclass slotattr-fail (slotattr-base)
- ((type :type string)
- )
- "This class should throw an error.")))
-
- ;; Initform should override instance allocation
- (let ((obj (slotattr-ok)))
- (should (eq (oref obj initform) 'no-init))))
-
-(defclass slotattr-class-base ()
- ((initform :allocation :class
- :initform init)
- (type :allocation :class
- :type list)
- (initarg :allocation :class
- :initarg :initarg)
- (protection :allocation :class
- :protection :private)
- (custom :allocation :class
- :custom (repeat string)
- :label "Custom Strings"
- :group moose)
- (docstring :allocation :class
- :documentation
- "Replace the doc-string for this property.")
- )
- "Baseclass we will attempt to subclass.
-Subclasses to override slot attributes.")
-
-(defclass slotattr-class-ok (slotattr-class-base)
- ((initform :initform no-init)
- (initarg :initarg :initblarg)
- (custom :custom string
- :label "One String"
- :group cow)
- (docstring :documentation
- "A better doc string for this class.")
- )
- "This class should allow overriding of various slot attributes.")
-
-
-(ert-deftest eieio-test-31-slot-attribute-override-class-allocation ()
- ;; Same as test-30, but with class allocation
- ;;PROTECTION is gone.
- ;;(should-error
- ;; (eval
- ;; '(defclass slotattr-fail (slotattr-class-base)
- ;; ((protection :protection :public)
- ;; )
- ;; "This class should throw an error.")))
- (should-error
- (eval
- '(defclass slotattr-fail (slotattr-class-base)
- ((type :type string)
- )
- "This class should throw an error.")))
- (should (eq (oref-default 'slotattr-class-ok initform) 'no-init)))
-
-(ert-deftest eieio-test-32-slot-attribute-override-2 ()
- (let* ((cv (cl--find-class 'slotattr-ok))
- (slots (eieio--class-slots cv))
- (args (eieio--class-initarg-tuples cv)))
- ;; :initarg should override for subclass
- (should (assoc :initblarg args))
-
- (dotimes (i (length slots))
- (let* ((slot (aref slots i))
- (props (cl--slot-descriptor-props slot)))
- (cond
- ((eq (cl--slot-descriptor-name slot) 'custom)
- ;; Custom slot attributes must override
- (should (eq (alist-get :custom props) 'string))
- ;; Custom label slot attribute must override
- (should (string= (alist-get :label props) "One String"))
- (let ((grp (alist-get :group props)))
- ;; Custom group slot attribute must combine
- (should (and (memq 'moose grp) (memq 'cow grp)))))
- (t nil))))))
-
-(defvar eitest-CLONETEST1 nil)
-(defvar eitest-CLONETEST2 nil)
-
-(ert-deftest eieio-test-32-test-clone-boring-objects ()
- ;; A simple make instance with EIEIO extension
- (should (setq eitest-CLONETEST1 (make-instance 'class-a)))
- (should (setq eitest-CLONETEST2 (clone eitest-CLONETEST1)))
-
- ;; CLOS form of make-instance
- (should (setq eitest-CLONETEST1 (make-instance 'class-a)))
- (should (setq eitest-CLONETEST2 (clone eitest-CLONETEST1))))
-
-(defclass IT (eieio-instance-tracker)
- ((tracking-symbol :initform IT-list)
- (slot1 :initform 'die))
- "Instance Tracker test object.")
-
-(ert-deftest eieio-test-33-instance-tracker ()
- (let (IT-list IT1)
- (should (setq IT1 (IT)))
- ;; The instance tracker must find this
- (should (eieio-instance-tracker-find 'die 'slot1 'IT-list))
- ;; Test deletion
- (delete-instance IT1)
- (should-not (eieio-instance-tracker-find 'die 'slot1 'IT-list))))
-
-(defclass SINGLE (eieio-singleton)
- ((a-slot :initarg :a-slot :initform t))
- "A Singleton test object.")
-
-(ert-deftest eieio-test-34-singletons ()
- (let ((obj1 (SINGLE))
- (obj2 (SINGLE)))
- (should (eieio-object-p obj1))
- (should (eieio-object-p obj2))
- (should (eq obj1 obj2))
- (should (oref obj1 a-slot))))
-
-(defclass NAMED (eieio-named)
- ((some-slot :initform nil)
- )
- "A class inheriting from eieio-named.")
-
-(ert-deftest eieio-test-35-named-object ()
- (let (N)
- (should (setq N (NAMED :object-name "Foo")))
- (should (string= "Foo" (oref N object-name)))
- (should-error (oref N missing-slot) :type 'invalid-slot-name)
- (oset N object-name "NewName")
- (should (string= "NewName" (oref N object-name)))))
-
-(defclass opt-test1 ()
- ()
- "Abstract base class"
- :abstract t)
-
-(defclass opt-test2 (opt-test1)
- ()
- "Instantiable child")
-
-(ert-deftest eieio-test-36-build-class-alist ()
- (should (= (length (eieio-build-class-alist 'opt-test1 nil)) 2))
- (should (= (length (eieio-build-class-alist 'opt-test1 t)) 1)))
-
-(defclass eieio--testing () ())
-
-(defmethod constructor :static ((_x eieio--testing) newname &rest _args)
- (list newname 2))
-
-(ert-deftest eieio-test-37-obsolete-name-in-constructor ()
- (should (equal (eieio--testing "toto") '("toto" 2))))
-
-(provide 'eieio-tests)
-
-;;; eieio-tests.el ends here
diff --git a/test/automated/electric-tests.el b/test/automated/electric-tests.el
deleted file mode 100644
index b675989c072..00000000000
--- a/test/automated/electric-tests.el
+++ /dev/null
@@ -1,588 +0,0 @@
-;;; electric-tests.el --- tests for electric.el
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: João Távora <joaotavora@gmail.com>
-;; Keywords:
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Tests for Electric Pair mode.
-;; TODO: Add tests for other Electric-* functionality
-
-;;; Code:
-(require 'ert)
-(require 'ert-x)
-(require 'electric)
-(require 'elec-pair)
-(require 'cl-lib)
-
-(defun call-with-saved-electric-modes (fn)
- (let ((saved-electric (if electric-pair-mode 1 -1))
- (saved-layout (if electric-layout-mode 1 -1))
- (saved-indent (if electric-indent-mode 1 -1)))
- (electric-pair-mode -1)
- (electric-layout-mode -1)
- (electric-indent-mode -1)
- (unwind-protect
- (funcall fn)
- (electric-pair-mode saved-electric)
- (electric-indent-mode saved-indent)
- (electric-layout-mode saved-layout))))
-
-(defmacro save-electric-modes (&rest body)
- (declare (indent defun) (debug t))
- `(call-with-saved-electric-modes #'(lambda () ,@body)))
-
-(defun electric-pair-test-for (fixture where char expected-string
- expected-point mode bindings fixture-fn)
- (with-temp-buffer
- (funcall mode)
- (insert fixture)
- (save-electric-modes
- (let ((last-command-event char)
- (transient-mark-mode 'lambda))
- (goto-char where)
- (funcall fixture-fn)
- (cl-progv
- (mapcar #'car bindings)
- (mapcar #'cdr bindings)
- (call-interactively (key-binding `[,last-command-event])))))
- (should (equal (buffer-substring-no-properties (point-min) (point-max))
- expected-string))
- (should (equal (point)
- expected-point))))
-
-(eval-when-compile
- (defun electric-pair-define-test-form (name fixture
- char
- pos
- expected-string
- expected-point
- skip-pair-string
- prefix
- suffix
- extra-desc
- mode
- bindings
- fixture-fn)
- (let* ((expected-string-and-point
- (if skip-pair-string
- (with-temp-buffer
- (cl-progv
- ;; FIXME: avoid `eval'
- (mapcar #'car (eval bindings))
- (mapcar #'cdr (eval bindings))
- (funcall mode)
- (insert fixture)
- (goto-char (1+ pos))
- (insert char)
- (cond ((eq (aref skip-pair-string pos)
- ?p)
- (insert (cadr (electric-pair-syntax-info char)))
- (backward-char 1))
- ((eq (aref skip-pair-string pos)
- ?s)
- (delete-char -1)
- (forward-char 1)))
- (list
- (buffer-substring-no-properties (point-min) (point-max))
- (point))))
- (list expected-string expected-point)))
- (expected-string (car expected-string-and-point))
- (expected-point (cadr expected-string-and-point))
- (fixture (format "%s%s%s" prefix fixture suffix))
- (expected-string (format "%s%s%s" prefix expected-string suffix))
- (expected-point (+ (length prefix) expected-point))
- (pos (+ (length prefix) pos)))
- `(ert-deftest ,(intern (format "electric-pair-%s-at-point-%s-in-%s%s"
- name
- (1+ pos)
- mode
- extra-desc))
- ()
- ,(format "With |%s|, try input %c at point %d. \
-Should %s |%s| and point at %d"
- fixture
- char
- (1+ pos)
- (if (string= fixture expected-string)
- "stay"
- "become")
- (replace-regexp-in-string "\n" "\\\\n" expected-string)
- expected-point)
- (electric-pair-test-for ,fixture
- ,(1+ pos)
- ,char
- ,expected-string
- ,expected-point
- ',mode
- ,bindings
- ,fixture-fn)))))
-
-(cl-defmacro define-electric-pair-test
- (name fixture
- input
- &key
- skip-pair-string
- expected-string
- expected-point
- bindings
- (modes '(quote (ruby-mode c++-mode)))
- (test-in-comments t)
- (test-in-strings t)
- (test-in-code t)
- (fixture-fn #'(lambda ()
- (electric-pair-mode 1))))
- `(progn
- ,@(cl-loop
- for mode in (eval modes) ;FIXME: avoid `eval'
- append
- (cl-loop
- for (prefix suffix extra-desc) in
- (append (if test-in-comments
- `((,(with-temp-buffer
- (funcall mode)
- (insert "z")
- (comment-region (point-min) (point-max))
- (buffer-substring-no-properties (point-min)
- (1- (point-max))))
- ""
- "-in-comments")))
- (if test-in-strings
- `(("\"" "\"" "-in-strings")))
- (if test-in-code
- `(("" "" ""))))
- append
- (cl-loop
- for char across input
- for pos from 0
- unless (eq char ?-)
- collect (electric-pair-define-test-form
- name
- fixture
- (aref input pos)
- pos
- expected-string
- expected-point
- skip-pair-string
- prefix
- suffix
- extra-desc
- mode
- bindings
- fixture-fn))))))
-
-;;; Basic pairs and skips
-;;;
-(define-electric-pair-test balanced-situation
- " (()) " "(((((((" :skip-pair-string "ppppppp"
- :modes '(ruby-mode))
-
-(define-electric-pair-test too-many-openings
- " ((()) " "(((((((" :skip-pair-string "ppppppp")
-
-(define-electric-pair-test too-many-closings
- " (())) " "(((((((" :skip-pair-string "------p")
-
-(define-electric-pair-test too-many-closings-2
- "() ) " "---(---" :skip-pair-string "-------")
-
-(define-electric-pair-test too-many-closings-3
- ")() " "(------" :skip-pair-string "-------")
-
-(define-electric-pair-test balanced-autoskipping
- " (()) " "---))--" :skip-pair-string "---ss--")
-
-(define-electric-pair-test too-many-openings-autoskipping
- " ((()) " "----))-" :skip-pair-string "-------")
-
-(define-electric-pair-test too-many-closings-autoskipping
- " (())) " "---)))-" :skip-pair-string "---sss-")
-
-
-;;; Mixed parens
-;;;
-(define-electric-pair-test mixed-paren-1
- " ()] " "-(-(---" :skip-pair-string "-p-p---")
-
-(define-electric-pair-test mixed-paren-2
- " [() " "-(-()--" :skip-pair-string "-p-ps--")
-
-(define-electric-pair-test mixed-paren-3
- " (]) " "-(-()--" :skip-pair-string "---ps--")
-
-(define-electric-pair-test mixed-paren-4
- " ()] " "---)]--" :skip-pair-string "---ss--")
-
-(define-electric-pair-test mixed-paren-5
- " [() " "----(--" :skip-pair-string "----p--")
-
-(define-electric-pair-test find-matching-different-paren-type
- " ()] " "-[-----" :skip-pair-string "-------")
-
-(define-electric-pair-test find-matching-different-paren-type-inside-list
- "( ()]) " "-[-----" :skip-pair-string "-------")
-
-(define-electric-pair-test ignore-different-nonmatching-paren-type
- "( ()]) " "-(-----" :skip-pair-string "-p-----")
-
-(define-electric-pair-test autopair-keep-least-amount-of-mixed-unbalance
- "( ()] " "-(-----" :skip-pair-string "-p-----")
-
-(define-electric-pair-test dont-autopair-to-resolve-mixed-unbalance
- "( ()] " "-[-----" :skip-pair-string "-------")
-
-(define-electric-pair-test autopair-so-as-not-to-worsen-unbalance-situation
- "( (]) " "-[-----" :skip-pair-string "-p-----")
-
-(define-electric-pair-test skip-over-partially-balanced
- " [([]) " "-----)---" :skip-pair-string "-----s---")
-
-(define-electric-pair-test only-skip-over-at-least-partially-balanced-stuff
- " [([()) " "-----))--" :skip-pair-string "-----s---")
-
-
-
-
-;;; Quotes
-;;;
-(define-electric-pair-test pair-some-quotes-skip-others
- " \"\" " "-\"\"-----" :skip-pair-string "-ps------"
- :test-in-strings nil
- :bindings `((electric-pair-text-syntax-table
- . ,prog-mode-syntax-table)))
-
-(define-electric-pair-test skip-single-quotes-in-ruby-mode
- " '' " "--'-" :skip-pair-string "--s-"
- :modes '(ruby-mode)
- :test-in-comments nil
- :test-in-strings nil
- :bindings `((electric-pair-text-syntax-table
- . ,prog-mode-syntax-table)))
-
-(define-electric-pair-test leave-unbalanced-quotes-alone
- " \"' " "-\"'-" :skip-pair-string "----"
- :modes '(ruby-mode)
- :test-in-strings nil
- :bindings `((electric-pair-text-syntax-table
- . ,prog-mode-syntax-table)))
-
-(define-electric-pair-test leave-unbalanced-quotes-alone-2
- " \"\\\"' " "-\"--'-" :skip-pair-string "------"
- :modes '(ruby-mode)
- :test-in-strings nil
- :bindings `((electric-pair-text-syntax-table
- . ,prog-mode-syntax-table)))
-
-(define-electric-pair-test leave-unbalanced-quotes-alone-3
- " foo\\''" "'------" :skip-pair-string "-------"
- :modes '(ruby-mode)
- :test-in-strings nil
- :bindings `((electric-pair-text-syntax-table
- . ,prog-mode-syntax-table)))
-
-(define-electric-pair-test inhibit-if-strings-mismatched
- "\"foo\"\"bar" "\""
- :expected-string "\"\"foo\"\"bar"
- :expected-point 2
- :test-in-strings nil
- :bindings `((electric-pair-text-syntax-table
- . ,prog-mode-syntax-table)))
-
-(define-electric-pair-test inhibit-in-mismatched-string-inside-ruby-comments
- "foo\"\"
-#
-# \"bar\"
-# \" \"
-# \"
-#
-baz\"\""
- "\""
- :modes '(ruby-mode)
- :test-in-strings nil
- :test-in-comments nil
- :expected-point 19
- :expected-string
- "foo\"\"
-#
-# \"bar\"\"
-# \" \"
-# \"
-#
-baz\"\""
- :fixture-fn #'(lambda () (goto-char (point-min)) (search-forward "bar")))
-
-(define-electric-pair-test inhibit-in-mismatched-string-inside-c-comments
- "foo\"\"/*
- \"bar\"
- \" \"
- \"
-*/baz\"\""
- "\""
- :modes '(c-mode)
- :test-in-strings nil
- :test-in-comments nil
- :expected-point 18
- :expected-string
- "foo\"\"/*
- \"bar\"\"
- \" \"
- \"
-*/baz\"\""
- :fixture-fn #'(lambda () (goto-char (point-min)) (search-forward "bar")))
-
-
-;;; More quotes, but now don't bind `electric-pair-text-syntax-table'
-;;; to `prog-mode-syntax-table'. Use the defaults for
-;;; `electric-pair-pairs' and `electric-pair-text-pairs'.
-;;;
-(define-electric-pair-test pairing-skipping-quotes-in-code
- " \"\" " "-\"\"-----" :skip-pair-string "-ps------"
- :test-in-strings nil
- :test-in-comments nil)
-
-(define-electric-pair-test skipping-quotes-in-comments
- " \"\" " "--\"-----" :skip-pair-string "--s------"
- :test-in-strings nil)
-
-
-;;; Skipping over whitespace
-;;;
-(define-electric-pair-test whitespace-jumping
- " ( ) " "--))))---" :expected-string " ( ) " :expected-point 8
- :bindings '((electric-pair-skip-whitespace . t)))
-
-(define-electric-pair-test whitespace-chomping
- " ( ) " "--)------" :expected-string " () " :expected-point 4
- :bindings '((electric-pair-skip-whitespace . chomp)))
-
-(define-electric-pair-test whitespace-chomping-2
- " ( \n\t\t\n ) " "--)------" :expected-string " () " :expected-point 4
- :bindings '((electric-pair-skip-whitespace . chomp))
- :test-in-comments nil)
-
-(define-electric-pair-test whitespace-chomping-dont-cross-comments
- " ( \n\t\t\n ) " "--)------" :expected-string " () \n\t\t\n ) "
- :expected-point 4
- :bindings '((electric-pair-skip-whitespace . chomp))
- :test-in-strings nil
- :test-in-code nil
- :test-in-comments t)
-
-(define-electric-pair-test whitespace-skipping-for-quotes-not-outside
- " \" \"" "\"-----" :expected-string "\"\" \" \""
- :expected-point 2
- :bindings '((electric-pair-skip-whitespace . chomp))
- :test-in-strings nil
- :test-in-code t
- :test-in-comments nil)
-
-(define-electric-pair-test whitespace-skipping-for-quotes-only-inside
- " \" \"" "---\"--" :expected-string " \"\""
- :expected-point 5
- :bindings '((electric-pair-skip-whitespace . chomp))
- :test-in-strings nil
- :test-in-code t
- :test-in-comments nil)
-
-(define-electric-pair-test whitespace-skipping-quotes-not-without-proper-syntax
- " \" \"" "---\"--" :expected-string " \"\"\" \""
- :expected-point 5
- :modes '(text-mode)
- :bindings '((electric-pair-skip-whitespace . chomp))
- :test-in-strings nil
- :test-in-code t
- :test-in-comments nil)
-
-
-;;; Pairing arbitrary characters
-;;;
-(define-electric-pair-test angle-brackets-everywhere
- "<>" "<>" :skip-pair-string "ps"
- :bindings '((electric-pair-pairs . ((?\< . ?\>)))))
-
-(define-electric-pair-test angle-brackets-everywhere-2
- "(<>" "-<>" :skip-pair-string "-ps"
- :bindings '((electric-pair-pairs . ((?\< . ?\>)))))
-
-(defvar electric-pair-test-angle-brackets-table
- (let ((table (make-syntax-table prog-mode-syntax-table)))
- (modify-syntax-entry ?\< "(>" table)
- (modify-syntax-entry ?\> ")<`" table)
- table))
-
-(define-electric-pair-test angle-brackets-pair
- "<>" "<" :expected-string "<><>" :expected-point 2
- :test-in-code nil
- :bindings `((electric-pair-text-syntax-table
- . ,electric-pair-test-angle-brackets-table)))
-
-(define-electric-pair-test angle-brackets-skip
- "<>" "->" :expected-string "<>" :expected-point 3
- :test-in-code nil
- :bindings `((electric-pair-text-syntax-table
- . ,electric-pair-test-angle-brackets-table)))
-
-(define-electric-pair-test pair-backtick-and-quote-in-comments
- ";; " "---`" :expected-string ";; `'" :expected-point 5
- :test-in-comments nil
- :test-in-strings nil
- :modes '(emacs-lisp-mode)
- :bindings '((electric-pair-text-pairs . ((?\` . ?\')))))
-
-(define-electric-pair-test skip-backtick-and-quote-in-comments
- ";; `foo'" "-------'" :expected-string ";; `foo'" :expected-point 9
- :test-in-comments nil
- :test-in-strings nil
- :modes '(emacs-lisp-mode)
- :bindings '((electric-pair-text-pairs . ((?\` . ?\')))))
-
-(define-electric-pair-test pair-backtick-and-quote-in-strings
- "\"\"" "-`" :expected-string "\"`'\"" :expected-point 3
- :test-in-comments nil
- :test-in-strings nil
- :modes '(emacs-lisp-mode)
- :bindings '((electric-pair-text-pairs . ((?\` . ?\')))))
-
-(define-electric-pair-test skip-backtick-and-quote-in-strings
- "\"`'\"" "--'" :expected-string "\"`'\"" :expected-point 4
- :test-in-comments nil
- :test-in-strings nil
- :modes '(emacs-lisp-mode)
- :bindings '((electric-pair-text-pairs . ((?\` . ?\')))))
-
-(define-electric-pair-test skip-backtick-and-quote-in-strings-2
- " \"`'\"" "----'" :expected-string " \"`'\"" :expected-point 6
- :test-in-comments nil
- :test-in-strings nil
- :modes '(emacs-lisp-mode)
- :bindings '((electric-pair-text-pairs . ((?\` . ?\')))))
-
-
-;;; `js-mode' has `electric-layout-rules' for '{ and '}
-;;;
-(define-electric-pair-test js-mode-braces
- "" "{" :expected-string "{}" :expected-point 2
- :modes '(js-mode)
- :fixture-fn #'(lambda ()
- (electric-pair-mode 1)))
-
-(define-electric-pair-test js-mode-braces-with-layout
- "" "{" :expected-string "{\n\n}" :expected-point 3
- :modes '(js-mode)
- :test-in-comments nil
- :test-in-strings nil
- :fixture-fn #'(lambda ()
- (electric-layout-mode 1)
- (electric-pair-mode 1)))
-
-(define-electric-pair-test js-mode-braces-with-layout-and-indent
- "" "{" :expected-string "{\n \n}" :expected-point 7
- :modes '(js-mode)
- :test-in-comments nil
- :test-in-strings nil
- :fixture-fn #'(lambda ()
- (electric-pair-mode 1)
- (electric-indent-mode 1)
- (electric-layout-mode 1)))
-
-
-;;; Backspacing
-;;; TODO: better tests
-;;;
-(ert-deftest electric-pair-backspace-1 ()
- (save-electric-modes
- (with-temp-buffer
- (insert "()")
- (goto-char 2)
- (electric-pair-delete-pair 1)
- (should (equal "" (buffer-string))))))
-
-
-;;; Electric newlines between pairs
-;;; TODO: better tests
-(ert-deftest electric-pair-open-extra-newline ()
- (save-electric-modes
- (with-temp-buffer
- (c-mode)
- (electric-pair-mode 1)
- (electric-indent-mode 1)
- (insert "int main {}")
- (backward-char 1)
- (let ((c-basic-offset 4))
- (newline 1 t)
- (should (equal "int main {\n \n}"
- (buffer-string)))
- (should (equal (point) (- (point-max) 2)))))))
-
-
-
-;;; Autowrapping
-;;;
-(define-electric-pair-test autowrapping-1
- "foo" "(" :expected-string "(foo)" :expected-point 2
- :fixture-fn #'(lambda ()
- (electric-pair-mode 1)
- (mark-sexp 1)))
-
-(define-electric-pair-test autowrapping-2
- "foo" ")" :expected-string "(foo)" :expected-point 6
- :fixture-fn #'(lambda ()
- (electric-pair-mode 1)
- (mark-sexp 1)))
-
-(define-electric-pair-test autowrapping-3
- "foo" ")" :expected-string "(foo)" :expected-point 6
- :fixture-fn #'(lambda ()
- (electric-pair-mode 1)
- (goto-char (point-max))
- (skip-chars-backward "\"")
- (mark-sexp -1)))
-
-(define-electric-pair-test autowrapping-4
- "foo" "(" :expected-string "(foo)" :expected-point 2
- :fixture-fn #'(lambda ()
- (electric-pair-mode 1)
- (goto-char (point-max))
- (skip-chars-backward "\"")
- (mark-sexp -1)))
-
-(define-electric-pair-test autowrapping-5
- "foo" "\"" :expected-string "\"foo\"" :expected-point 2
- :fixture-fn #'(lambda ()
- (electric-pair-mode 1)
- (mark-sexp 1)))
-
-(define-electric-pair-test autowrapping-6
- "foo" "\"" :expected-string "\"foo\"" :expected-point 6
- :fixture-fn #'(lambda ()
- (electric-pair-mode 1)
- (goto-char (point-max))
- (skip-chars-backward "\"")
- (mark-sexp -1)))
-
-(define-electric-pair-test autowrapping-7
- "foo" "\"" :expected-string "``foo''" :expected-point 8
- :modes '(tex-mode)
- :fixture-fn #'(lambda ()
- (electric-pair-mode 1)
- (goto-char (point-max))
- (skip-chars-backward "\"")
- (mark-sexp -1)))
-
-(provide 'electric-tests)
-;;; electric-tests.el ends here
diff --git a/test/automated/elisp-mode-tests.el b/test/automated/elisp-mode-tests.el
deleted file mode 100644
index 38c0b3be056..00000000000
--- a/test/automated/elisp-mode-tests.el
+++ /dev/null
@@ -1,645 +0,0 @@
-;;; elisp-mode-tests.el --- Tests for emacs-lisp-mode -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov <dgutov@yandex.ru>
-;; Author: Stephen Leake <stephen_leake@member.fsf.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)
-(require 'xref)
-
-;;; Completion
-
-(defun elisp--test-completions ()
- (let ((data (elisp-completion-at-point)))
- (all-completions (buffer-substring (nth 0 data) (nth 1 data))
- (nth 2 data)
- (plist-get (nthcdr 3 data) :predicate))))
-
-(ert-deftest elisp-completes-functions ()
- (with-temp-buffer
- (emacs-lisp-mode)
- (insert "(ba")
- (let ((comps (elisp--test-completions)))
- (should (member "backup-buffer" comps))
- (should-not (member "backup-inhibited" comps)))))
-
-(ert-deftest elisp-completes-variables ()
- (with-temp-buffer
- (emacs-lisp-mode)
- (insert "(foo ba")
- (let ((comps (elisp--test-completions)))
- (should (member "backup-inhibited" comps))
- (should-not (member "backup-buffer" comps)))))
-
-(ert-deftest elisp-completes-anything-quoted ()
- (dolist (text '("`(foo ba" "(foo 'ba"
- "`(,foo ba" "`,(foo `ba"
- "'(foo (ba"))
- (with-temp-buffer
- (emacs-lisp-mode)
- (insert text)
- (let ((comps (elisp--test-completions)))
- (should (member "backup-inhibited" comps))
- (should (member "backup-buffer" comps))
- (should (member "backup" comps))))))
-
-(ert-deftest elisp-completes-variables-unquoted ()
- (dolist (text '("`(foo ,ba" "`(,(foo ba" "`(,ba"))
- (with-temp-buffer
- (emacs-lisp-mode)
- (insert text)
- (let ((comps (elisp--test-completions)))
- (should (member "backup-inhibited" comps))
- (should-not (member "backup-buffer" comps))))))
-
-(ert-deftest elisp-completes-functions-in-special-macros ()
- (dolist (text '("(declare-function ba" "(cl-callf2 ba"))
- (with-temp-buffer
- (emacs-lisp-mode)
- (insert text)
- (let ((comps (elisp--test-completions)))
- (should (member "backup-buffer" comps))
- (should-not (member "backup-inhibited" comps))))))
-
-(ert-deftest elisp-completes-functions-after-hash-quote ()
- (ert-deftest elisp-completes-functions-after-let-bindings ()
- (with-temp-buffer
- (emacs-lisp-mode)
- (insert "#'ba")
- (let ((comps (elisp--test-completions)))
- (should (member "backup-buffer" comps))
- (should-not (member "backup-inhibited" comps))))))
-
-(ert-deftest elisp-completes-local-variables ()
- (with-temp-buffer
- (emacs-lisp-mode)
- (insert "(let ((bar 1) baz) (foo ba")
- (let ((comps (elisp--test-completions)))
- (should (member "backup-inhibited" comps))
- (should (member "bar" comps))
- (should (member "baz" comps)))))
-
-(ert-deftest elisp-completest-variables-in-let-bindings ()
- (dolist (text '("(let (ba" "(let* ((ba"))
- (with-temp-buffer
- (emacs-lisp-mode)
- (insert text)
- (let ((comps (elisp--test-completions)))
- (should (member "backup-inhibited" comps))
- (should-not (member "backup-buffer" comps))))))
-
-(ert-deftest elisp-completes-functions-after-let-bindings ()
- (with-temp-buffer
- (emacs-lisp-mode)
- (insert "(let ((bar 1) (baz 2)) (ba")
- (let ((comps (elisp--test-completions)))
- (should (member "backup-buffer" comps))
- (should-not (member "backup-inhibited" comps)))))
-
-;;; xref
-
-(defun xref-elisp-test-descr-to-target (xref)
- "Return an appropriate `looking-at' match string for XREF."
- (let* ((loc (xref-item-location xref))
- (type (or (xref-elisp-location-type loc)
- 'defun)))
-
- (cl-case type
- (defalias
- ;; summary: "(defalias xref)"
- ;; target : "(defalias 'xref"
- (concat "(defalias '" (substring (xref-item-summary xref) 10 -1)))
-
- (defun
- (let ((summary (xref-item-summary xref))
- (file (xref-elisp-location-file loc)))
- (cond
- ((string= "c" (file-name-extension file))
- ;; summary: "(defun buffer-live-p)"
- ;; target : "DEFUN (buffer-live-p"
- (concat
- (upcase (substring summary 1 6))
- " (\""
- (substring summary 7 -1)
- "\""))
-
- (t
- (substring summary 0 -1))
- )))
-
- (defvar
- (let ((summary (xref-item-summary xref))
- (file (xref-elisp-location-file loc)))
- (cond
- ((string= "c" (file-name-extension file))
- ;; summary: "(defvar system-name)"
- ;; target : "DEFVAR_LISP ("system-name", "
- ;; summary: "(defvar abbrev-mode)"
- ;; target : DEFVAR_PER_BUFFER ("abbrev-mode"
- (concat
- (upcase (substring summary 1 7))
- (if (bufferp (variable-binding-locus (xref-elisp-location-symbol loc)))
- "_PER_BUFFER (\""
- "_LISP (\"")
- (substring summary 8 -1)
- "\""))
-
- (t
- (substring summary 0 -1))
- )))
-
- (feature
- ;; summary: "(feature xref)"
- ;; target : "(provide 'xref)"
- (concat "(provide '" (substring (xref-item-summary xref) 9 -1)))
-
- (otherwise
- (substring (xref-item-summary xref) 0 -1))
- )))
-
-
-(defun xref-elisp-test-run (xrefs expected-xrefs)
- (should (= (length xrefs) (length expected-xrefs)))
- (while xrefs
- (let* ((xref (pop xrefs))
- (expected (pop expected-xrefs))
- (expected-xref (or (when (consp expected) (car expected)) expected))
- (expected-source (when (consp expected) (cdr expected))))
-
- ;; Downcase the filenames for case-insensitive file systems.
- (setf (xref-elisp-location-file (oref xref location))
- (downcase (xref-elisp-location-file (oref xref location))))
-
- (setf (xref-elisp-location-file (oref expected-xref location))
- (downcase (xref-elisp-location-file (oref expected-xref location))))
-
- (should (equal xref expected-xref))
-
- (xref--goto-location (xref-item-location xref))
- (back-to-indentation)
- (should (looking-at (or expected-source
- (xref-elisp-test-descr-to-target expected)))))
- ))
-
-(defmacro xref-elisp-deftest (name computed-xrefs expected-xrefs)
- "Define an ert test for an xref-elisp feature.
-COMPUTED-XREFS and EXPECTED-XREFS are lists of xrefs, except if
-an element of EXPECTED-XREFS is a cons (XREF . TARGET), TARGET is
-matched to the found location; otherwise, match
-to (xref-elisp-test-descr-to-target xref)."
- (declare (indent defun)
- (debug (symbolp "name")))
- `(ert-deftest ,(intern (concat "xref-elisp-test-" (symbol-name name))) ()
- (let ((find-file-suppress-same-file-warnings t))
- (xref-elisp-test-run ,computed-xrefs ,expected-xrefs)
- )))
-
-;; When tests are run from the Makefile, 'default-directory' is $HOME,
-;; so we must provide this dir to expand-file-name in the expected
-;; results. This also allows running these tests from other
-;; directories.
-;;
-;; We add 'downcase' here to deliberately cause a potential problem on
-;; case-insensitive file systems. On such systems, `load-file-name'
-;; may not have the same case as the real file system, since the user
-;; can set `load-path' to have the wrong case (on my Windows system,
-;; `load-path' has the correct case, so this causes the expected test
-;; values to have the wrong case). This is handled in
-;; `xref-elisp-test-run'.
-(defconst emacs-test-dir (downcase (file-name-directory (or load-file-name (buffer-file-name)))))
-
-
-;; alphabetical by test name
-
-;; Autoloads require no special support; they are handled as functions.
-
-;; FIXME: defalias-defun-c cmpl-prefix-entry-head
-;; FIXME: defalias-defvar-el allout-mode-map
-
-(xref-elisp-deftest find-defs-constructor
- (elisp--xref-find-definitions 'xref-make-elisp-location)
- ;; 'xref-make-elisp-location' is just a name for the default
- ;; constructor created by the cl-defstruct, so the location is the
- ;; cl-defstruct location.
- (list
- (cons
- (xref-make "(cl-defstruct (xref-elisp-location (:constructor xref-make-elisp-location)))"
- (xref-make-elisp-location
- 'xref-elisp-location 'define-type
- (expand-file-name "../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
- ;; It's not worth adding another special case to `xref-elisp-test-descr-to-target' for this
- "(cl-defstruct (xref-elisp-location")
- ))
-
-(xref-elisp-deftest find-defs-defalias-defun-el
- (elisp--xref-find-definitions 'Buffer-menu-sort)
- (list
- (xref-make "(defalias Buffer-menu-sort)"
- (xref-make-elisp-location
- 'Buffer-menu-sort 'defalias
- (expand-file-name "../../lisp/buff-menu.elc" emacs-test-dir)))
- (xref-make "(defun tabulated-list-sort)"
- (xref-make-elisp-location
- 'tabulated-list-sort nil
- (expand-file-name "../../lisp/emacs-lisp/tabulated-list.el" emacs-test-dir)))
- ))
-
-;; FIXME: defconst
-
-;; FIXME: eieio defclass
-
-;; Possible ways of defining the default method implementation for a
-;; generic function. We declare these here, so we know we cover all
-;; cases, and we don't rely on other code not changing.
-;;
-;; When the generic and default method are declared in the same place,
-;; elisp--xref-find-definitions only returns one.
-
-(cl-defstruct (xref-elisp-root-type)
- slot-1)
-
-(cl-defgeneric xref-elisp-generic-no-methods (arg1 arg2)
- "doc string generic no-methods"
- ;; No default implementation, no methods, but fboundp is true for
- ;; this symbol; it calls cl-no-applicable-method
- )
-
-;; WORKAROUND: ‘this’ is unused, and the byte compiler complains, so
-;; it should be spelled ‘_this’. But for some unknown reason, that
-;; causes the batch mode test to fail; the symbol shows up as
-;; ‘this’. It passes in interactive tests, so I haven't been able to
-;; track down the problem.
-(cl-defmethod xref-elisp-generic-no-default ((this xref-elisp-root-type) arg2)
- "doc string generic no-default xref-elisp-root-type"
- "non-default for no-default")
-
-;; defgeneric after defmethod in file to ensure the fallback search
-;; method of just looking for the function name will fail.
-(cl-defgeneric xref-elisp-generic-no-default (arg1 arg2)
- "doc string generic no-default generic"
- ;; No default implementation; this function calls the cl-generic
- ;; dispatching code.
- )
-
-(cl-defgeneric xref-elisp-generic-co-located-default (arg1 arg2)
- "doc string generic co-located-default"
- "co-located default")
-
-(cl-defmethod xref-elisp-generic-co-located-default ((this xref-elisp-root-type) arg2)
- "doc string generic co-located-default xref-elisp-root-type"
- "non-default for co-located-default")
-
-(cl-defgeneric xref-elisp-generic-separate-default (arg1 arg2)
- "doc string generic separate-default"
- ;; default implementation provided separately
- )
-
-(cl-defmethod xref-elisp-generic-separate-default (arg1 arg2)
- "doc string generic separate-default default"
- "separate default")
-
-(cl-defmethod xref-elisp-generic-separate-default ((this xref-elisp-root-type) arg2)
- "doc string generic separate-default xref-elisp-root-type"
- "non-default for separate-default")
-
-(cl-defmethod xref-elisp-generic-implicit-generic (arg1 arg2)
- "doc string generic implicit-generic default"
- "default for implicit generic")
-
-(cl-defmethod xref-elisp-generic-implicit-generic ((this xref-elisp-root-type) arg2)
- "doc string generic implicit-generic xref-elisp-root-type"
- "non-default for implicit generic")
-
-
-(xref-elisp-deftest find-defs-defgeneric-no-methods
- (elisp--xref-find-definitions 'xref-elisp-generic-no-methods)
- (list
- (xref-make "(cl-defgeneric xref-elisp-generic-no-methods)"
- (xref-make-elisp-location
- 'xref-elisp-generic-no-methods 'cl-defgeneric
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- ))
-
-(xref-elisp-deftest find-defs-defgeneric-no-default
- (elisp--xref-find-definitions 'xref-elisp-generic-no-default)
- (list
- (xref-make "(cl-defgeneric xref-elisp-generic-no-default)"
- (xref-make-elisp-location
- 'xref-elisp-generic-no-default 'cl-defgeneric
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- (xref-make "(cl-defmethod xref-elisp-generic-no-default ((this xref-elisp-root-type) arg2))"
- (xref-make-elisp-location
- '(xref-elisp-generic-no-default xref-elisp-root-type t) 'cl-defmethod
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- ))
-
-(xref-elisp-deftest find-defs-defgeneric-co-located-default
- (elisp--xref-find-definitions 'xref-elisp-generic-co-located-default)
- (list
- (xref-make "(cl-defgeneric xref-elisp-generic-co-located-default)"
- (xref-make-elisp-location
- 'xref-elisp-generic-co-located-default 'cl-defgeneric
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- (xref-make "(cl-defmethod xref-elisp-generic-co-located-default ((this xref-elisp-root-type) arg2))"
- (xref-make-elisp-location
- '(xref-elisp-generic-co-located-default xref-elisp-root-type t) 'cl-defmethod
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- ))
-
-(xref-elisp-deftest find-defs-defgeneric-separate-default
- (elisp--xref-find-definitions 'xref-elisp-generic-separate-default)
- (list
- (xref-make "(cl-defgeneric xref-elisp-generic-separate-default)"
- (xref-make-elisp-location
- 'xref-elisp-generic-separate-default 'cl-defgeneric
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- (xref-make "(cl-defmethod xref-elisp-generic-separate-default (arg1 arg2))"
- (xref-make-elisp-location
- '(xref-elisp-generic-separate-default t t) 'cl-defmethod
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- (xref-make "(cl-defmethod xref-elisp-generic-separate-default ((this xref-elisp-root-type) arg2))"
- (xref-make-elisp-location
- '(xref-elisp-generic-separate-default xref-elisp-root-type t) 'cl-defmethod
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- ))
-
-(xref-elisp-deftest find-defs-defgeneric-implicit-generic
- (elisp--xref-find-definitions 'xref-elisp-generic-implicit-generic)
- (list
- (xref-make "(cl-defmethod xref-elisp-generic-implicit-generic (arg1 arg2))"
- (xref-make-elisp-location
- '(xref-elisp-generic-implicit-generic t t) 'cl-defmethod
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- (xref-make "(cl-defmethod xref-elisp-generic-implicit-generic ((this xref-elisp-root-type) arg2))"
- (xref-make-elisp-location
- '(xref-elisp-generic-implicit-generic xref-elisp-root-type t) 'cl-defmethod
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- ))
-
-;; Test that we handle more than one method
-
-;; When run from the Makefile, etags is not loaded at compile time,
-;; but it is by the time this test is run. interactively; don't fail
-;; for that.
-(require 'etags)
-(xref-elisp-deftest find-defs-defgeneric-el
- (elisp--xref-find-definitions 'xref-location-marker)
- (list
- (xref-make "(cl-defgeneric xref-location-marker)"
- (xref-make-elisp-location
- 'xref-location-marker 'cl-defgeneric
- (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
- (xref-make "(cl-defmethod xref-location-marker ((l xref-elisp-location)))"
- (xref-make-elisp-location
- '(xref-location-marker xref-elisp-location) 'cl-defmethod
- (expand-file-name "../../lisp/progmodes/elisp-mode.el" emacs-test-dir)))
- (xref-make "(cl-defmethod xref-location-marker ((l xref-file-location)))"
- (xref-make-elisp-location
- '(xref-location-marker xref-file-location) 'cl-defmethod
- (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
- (xref-make "(cl-defmethod xref-location-marker ((l xref-buffer-location)))"
- (xref-make-elisp-location
- '(xref-location-marker xref-buffer-location) 'cl-defmethod
- (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
- (xref-make "(cl-defmethod xref-location-marker ((l xref-bogus-location)))"
- (xref-make-elisp-location
- '(xref-location-marker xref-bogus-location) 'cl-defmethod
- (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
- (xref-make "(cl-defmethod xref-location-marker ((l xref-etags-location)))"
- (xref-make-elisp-location
- '(xref-location-marker xref-etags-location) 'cl-defmethod
- (expand-file-name "../../lisp/progmodes/etags.el" emacs-test-dir)))
- ))
-
-(xref-elisp-deftest find-defs-defgeneric-eval
- (elisp--xref-find-definitions (eval '(cl-defgeneric stephe-leake-cl-defgeneric ())))
- nil)
-
-;; Define some mode-local overloadable/overridden functions for xref to find
-(require 'mode-local)
-
-(define-overloadable-function xref-elisp-overloadable-no-methods ()
- "doc string overloadable no-methods")
-
-(define-overloadable-function xref-elisp-overloadable-no-default ()
- "doc string overloadable no-default")
-
-;; FIXME: byte compiler complains about unused lexical arguments
-;; generated by this macro.
-(define-mode-local-override xref-elisp-overloadable-no-default c-mode
- (start end &optional nonterminal depth returnonerror)
- "doc string overloadable no-default c-mode."
- "result overloadable no-default c-mode.")
-
-(define-overloadable-function xref-elisp-overloadable-co-located-default ()
- "doc string overloadable co-located-default"
- "result overloadable co-located-default.")
-
-(define-mode-local-override xref-elisp-overloadable-co-located-default c-mode
- (start end &optional nonterminal depth returnonerror)
- "doc string overloadable co-located-default c-mode."
- "result overloadable co-located-default c-mode.")
-
-(define-overloadable-function xref-elisp-overloadable-separate-default ()
- "doc string overloadable separate-default.")
-
-(defun xref-elisp-overloadable-separate-default-default ()
- "doc string overloadable separate-default default"
- "result overloadable separate-default.")
-
-(define-mode-local-override xref-elisp-overloadable-separate-default c-mode
- (start end &optional nonterminal depth returnonerror)
- "doc string overloadable separate-default c-mode."
- "result overloadable separate-default c-mode.")
-
-(xref-elisp-deftest find-defs-define-overload-no-methods
- (elisp--xref-find-definitions 'xref-elisp-overloadable-no-methods)
- (list
- (xref-make "(define-overloadable-function xref-elisp-overloadable-no-methods)"
- (xref-make-elisp-location
- 'xref-elisp-overloadable-no-methods 'define-overloadable-function
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- ))
-
-(xref-elisp-deftest find-defs-define-overload-no-default
- (elisp--xref-find-definitions 'xref-elisp-overloadable-no-default)
- (list
- (xref-make "(define-overloadable-function xref-elisp-overloadable-no-default)"
- (xref-make-elisp-location
- 'xref-elisp-overloadable-no-default 'define-overloadable-function
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- (xref-make "(define-mode-local-override xref-elisp-overloadable-no-default c-mode)"
- (xref-make-elisp-location
- '(xref-elisp-overloadable-no-default-c-mode . c-mode) 'define-mode-local-override
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- ))
-
-(xref-elisp-deftest find-defs-define-overload-co-located-default
- (elisp--xref-find-definitions 'xref-elisp-overloadable-co-located-default)
- (list
- (xref-make "(define-overloadable-function xref-elisp-overloadable-co-located-default)"
- (xref-make-elisp-location
- 'xref-elisp-overloadable-co-located-default 'define-overloadable-function
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- (xref-make "(define-mode-local-override xref-elisp-overloadable-co-located-default c-mode)"
- (xref-make-elisp-location
- '(xref-elisp-overloadable-co-located-default-c-mode . c-mode) 'define-mode-local-override
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- ))
-
-(xref-elisp-deftest find-defs-define-overload-separate-default
- (elisp--xref-find-definitions 'xref-elisp-overloadable-separate-default)
- (list
- (xref-make "(define-overloadable-function xref-elisp-overloadable-separate-default)"
- (xref-make-elisp-location
- 'xref-elisp-overloadable-separate-default 'define-overloadable-function
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- (xref-make "(defun xref-elisp-overloadable-separate-default-default)"
- (xref-make-elisp-location
- 'xref-elisp-overloadable-separate-default-default nil
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- (xref-make "(define-mode-local-override xref-elisp-overloadable-separate-default c-mode)"
- (xref-make-elisp-location
- '(xref-elisp-overloadable-separate-default-c-mode . c-mode) 'define-mode-local-override
- (expand-file-name "elisp-mode-tests.el" emacs-test-dir)))
- ))
-
-(xref-elisp-deftest find-defs-defun-el
- (elisp--xref-find-definitions 'xref-find-definitions)
- (list
- (xref-make "(defun xref-find-definitions)"
- (xref-make-elisp-location
- 'xref-find-definitions nil
- (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))))
-
-(xref-elisp-deftest find-defs-defun-eval
- (elisp--xref-find-definitions (eval '(defun stephe-leake-defun ())))
- nil)
-
-(xref-elisp-deftest find-defs-defun-c
- (elisp--xref-find-definitions 'buffer-live-p)
- (list
- (xref-make "(defun buffer-live-p)"
- (xref-make-elisp-location 'buffer-live-p nil "src/buffer.c"))))
-
-;; FIXME: deftype
-
-(xref-elisp-deftest find-defs-defun-c-defvar-c
- (elisp-xref-find 'definitions "system-name")
- (list
- (xref-make "(defvar system-name)"
- (xref-make-elisp-location 'system-name 'defvar "src/editfns.c"))
- (xref-make "(defun system-name)"
- (xref-make-elisp-location 'system-name nil "src/editfns.c")))
- )
-
-(xref-elisp-deftest find-defs-defun-el-defvar-c
- (elisp-xref-find 'definitions "abbrev-mode")
- ;; It's a minor mode, but the variable is defined in buffer.c
- (list
- (xref-make "(defvar abbrev-mode)"
- (xref-make-elisp-location 'abbrev-mode 'defvar "src/buffer.c"))
- (cons
- (xref-make "(defun abbrev-mode)"
- (xref-make-elisp-location
- 'abbrev-mode nil
- (expand-file-name "../../lisp/abbrev.el" emacs-test-dir)))
- "(define-minor-mode abbrev-mode"))
- )
-
-;; Source for both variable and defun is "(define-minor-mode
-;; compilation-minor-mode". There is no way to tell that directly from
-;; the symbol, but we can use (memq sym minor-mode-list) to detect
-;; that the symbol is a minor mode. See `elisp--xref-find-definitions'
-;; for more comments.
-;;
-;; IMPROVEME: return defvar instead of defun if source near starting
-;; point indicates the user is searching for a variable, not a
-;; function.
-(require 'compile) ;; not loaded by default at test time
-(xref-elisp-deftest find-defs-defun-defvar-el
- (elisp--xref-find-definitions 'compilation-minor-mode)
- (list
- (cons
- (xref-make "(defun compilation-minor-mode)"
- (xref-make-elisp-location
- 'compilation-minor-mode nil
- (expand-file-name "../../lisp/progmodes/compile.el" emacs-test-dir)))
- "(define-minor-mode compilation-minor-mode")
- ))
-
-(xref-elisp-deftest find-defs-defvar-el
- (elisp--xref-find-definitions 'xref--marker-ring)
- (list
- (xref-make "(defvar xref--marker-ring)"
- (xref-make-elisp-location
- 'xref--marker-ring 'defvar
- (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
- ))
-
-(xref-elisp-deftest find-defs-defvar-c
- (elisp--xref-find-definitions 'default-directory)
- (list
- (cons
- (xref-make "(defvar default-directory)"
- (xref-make-elisp-location 'default-directory 'defvar "src/buffer.c"))
- ;; IMPROVEME: we might be able to compute this target
- "DEFVAR_PER_BUFFER (\"default-directory\"")))
-
-(xref-elisp-deftest find-defs-defvar-eval
- (elisp--xref-find-definitions (eval '(defvar stephe-leake-defvar nil)))
- nil)
-
-(xref-elisp-deftest find-defs-face-el
- (elisp--xref-find-definitions 'font-lock-keyword-face)
- ;; 'font-lock-keyword-face is both a face and a var
- (list
- (xref-make "(defvar font-lock-keyword-face)"
- (xref-make-elisp-location
- 'font-lock-keyword-face 'defvar
- (expand-file-name "../../lisp/font-lock.el" emacs-test-dir)))
- (xref-make "(defface font-lock-keyword-face)"
- (xref-make-elisp-location
- 'font-lock-keyword-face 'defface
- (expand-file-name "../../lisp/font-lock.el" emacs-test-dir)))
- ))
-
-(xref-elisp-deftest find-defs-face-eval
- (elisp--xref-find-definitions (eval '(defface stephe-leake-defface nil "")))
- nil)
-
-(xref-elisp-deftest find-defs-feature-el
- (elisp--xref-find-definitions 'xref)
- (list
- (cons
- (xref-make "(feature xref)"
- (xref-make-elisp-location
- 'xref 'feature
- (expand-file-name "../../lisp/progmodes/xref.el" emacs-test-dir)))
- ";;; Code:")
- ))
-
-(xref-elisp-deftest find-defs-feature-eval
- (elisp--xref-find-definitions (eval '(provide 'stephe-leake-feature)))
- nil)
-
-(provide 'elisp-mode-tests)
-;;; elisp-mode-tests.el ends here
diff --git a/test/automated/epg-tests.el b/test/automated/epg-tests.el
deleted file mode 100644
index a958d82bd03..00000000000
--- a/test/automated/epg-tests.el
+++ /dev/null
@@ -1,172 +0,0 @@
-;;; epg-tests.el --- Test suite for epg.el -*- lexical-binding: t -*-
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'ert)
-(require 'epg)
-
-(defvar epg-tests-context nil)
-
-(defvar epg-tests-data-directory
- (expand-file-name "data/epg" (getenv "EMACS_TEST_DIRECTORY"))
- "Directory containing epg test data.")
-
-(defun epg-tests-gpg-usable (&optional require-passphrase)
- (and (executable-find epg-gpg-program)
- (condition-case nil
- (progn
- (epg-check-configuration (epg-configuration))
- (if require-passphrase
- (string-match "\\`1\\."
- (cdr (assq 'version (epg-configuration))))
- t))
- (error nil))))
-
-(defun epg-tests-passphrase-callback (_c _k _d)
- ;; Need to create a copy here, since the string will be wiped out
- ;; after the use.
- (copy-sequence "test0123456789"))
-
-(cl-defmacro with-epg-tests ((&optional &key require-passphrase
- require-public-key
- require-secret-key)
- &rest body)
- "Set up temporary locations and variables for testing."
- (declare (indent 1))
- `(let* ((epg-tests-home-directory (make-temp-file "epg-tests-homedir" t)))
- (unwind-protect
- (let ((context (epg-make-context 'OpenPGP)))
- (setf (epg-context-home-directory context)
- epg-tests-home-directory)
- (setenv "GPG_AGENT_INFO")
- ,(if require-passphrase
- `(epg-context-set-passphrase-callback
- context
- #'epg-tests-passphrase-callback))
- ,(if require-public-key
- `(epg-import-keys-from-file
- context
- (expand-file-name "pubkey.asc" epg-tests-data-directory)))
- ,(if require-secret-key
- `(epg-import-keys-from-file
- context
- (expand-file-name "seckey.asc" epg-tests-data-directory)))
- (with-temp-buffer
- (make-local-variable 'epg-tests-context)
- (setq epg-tests-context context)
- ,@body))
- (when (file-directory-p epg-tests-home-directory)
- (delete-directory epg-tests-home-directory t)))))
-
-(ert-deftest epg-decrypt-1 ()
- (skip-unless (epg-tests-gpg-usable 'require-passphrase))
- (with-epg-tests (:require-passphrase t)
- (should (equal "test"
- (epg-decrypt-string epg-tests-context "\
------BEGIN PGP MESSAGE-----
-Version: GnuPG v2
-
-jA0EAwMCE19JBLTvvmhgyRrGGglRbnKkK9PJG8fDwO5ccjysrR7IcdNcnA==
-=U8z7
------END PGP MESSAGE-----")))))
-
-(ert-deftest epg-roundtrip-1 ()
- (skip-unless (epg-tests-gpg-usable 'require-passphrase))
- (with-epg-tests (:require-passphrase t)
- (let ((cipher (epg-encrypt-string epg-tests-context "symmetric" nil)))
- (should (equal "symmetric"
- (epg-decrypt-string epg-tests-context cipher))))))
-
-(ert-deftest epg-roundtrip-2 ()
- (skip-unless (epg-tests-gpg-usable 'require-passphrase))
- (with-epg-tests (:require-passphrase t
- :require-public-key t
- :require-secret-key t)
- (let* ((recipients (epg-list-keys epg-tests-context "joe@example.com"))
- (cipher (epg-encrypt-string epg-tests-context "public key"
- recipients nil t)))
- (should (equal "public key"
- (epg-decrypt-string epg-tests-context cipher))))))
-
-(ert-deftest epg-sign-verify-1 ()
- (skip-unless (epg-tests-gpg-usable 'require-passphrase))
- (with-epg-tests (:require-passphrase t
- :require-public-key t
- :require-secret-key t)
- (let (signature verify-result)
- (setf (epg-context-signers epg-tests-context)
- (epg-list-keys epg-tests-context "joe@example.com"))
- (setq signature (epg-sign-string epg-tests-context "signed" t))
- (epg-verify-string epg-tests-context signature "signed")
- (setq verify-result (epg-context-result-for context 'verify))
- (should (= 1 (length verify-result)))
- (should (eq 'good (epg-signature-status (car verify-result)))))))
-
-(ert-deftest epg-sign-verify-2 ()
- (skip-unless (epg-tests-gpg-usable 'require-passphrase))
- (with-epg-tests (:require-passphrase t
- :require-public-key t
- :require-secret-key t)
- (let (signature verify-result)
- (setf (epg-context-signers epg-tests-context)
- (epg-list-keys epg-tests-context "joe@example.com"))
- (setq signature (epg-sign-string epg-tests-context "clearsigned" 'clear))
- ;; Clearsign signature always ends with a new line.
- (should (equal "clearsigned\n"
- (epg-verify-string epg-tests-context signature)))
- (setq verify-result (epg-context-result-for context 'verify))
- (should (= 1 (length verify-result)))
- (should (eq 'good (epg-signature-status (car verify-result)))))))
-
-(ert-deftest epg-sign-verify-3 ()
- (skip-unless (epg-tests-gpg-usable 'require-passphrase))
- (with-epg-tests (:require-passphrase t
- :require-public-key t
- :require-secret-key t)
- (let (signature verify-result)
- (setf (epg-context-signers epg-tests-context)
- (epg-list-keys epg-tests-context "joe@example.com"))
- (setq signature (epg-sign-string epg-tests-context "normal signed"))
- (should (equal "normal signed"
- (epg-verify-string epg-tests-context signature)))
- (setq verify-result (epg-context-result-for context 'verify))
- (should (= 1 (length verify-result)))
- (should (eq 'good (epg-signature-status (car verify-result)))))))
-
-(ert-deftest epg-import-1 ()
- (skip-unless (epg-tests-gpg-usable 'require-passphrase))
- (with-epg-tests (:require-passphrase nil)
- (should (= 0 (length (epg-list-keys epg-tests-context))))
- (should (= 0 (length (epg-list-keys epg-tests-context nil t)))))
- (with-epg-tests (:require-passphrase nil
- :require-public-key t)
- (should (= 1 (length (epg-list-keys epg-tests-context))))
- (should (= 0 (length (epg-list-keys epg-tests-context nil t)))))
- (with-epg-tests (:require-public-key nil
- :require-public-key t
- :require-secret-key t)
- (should (= 1 (length (epg-list-keys epg-tests-context))))
- (should (= 1 (length (epg-list-keys epg-tests-context nil t))))))
-
-(provide 'epg-tests)
-
-;;; epg-tests.el ends here
diff --git a/test/automated/ert-tests.el b/test/automated/ert-tests.el
deleted file mode 100644
index 5382c400962..00000000000
--- a/test/automated/ert-tests.el
+++ /dev/null
@@ -1,843 +0,0 @@
-;;; ert-tests.el --- ERT's self-tests -*- lexical-binding: t -*-
-
-;; Copyright (C) 2007-2008, 2010-2015 Free Software Foundation, Inc.
-
-;; Author: Christian Ohler <ohler@gnu.org>
-
-;; This file is part of GNU Emacs.
-
-;; This program 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.
-;;
-;; This program 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 this program. If not, see `http://www.gnu.org/licenses/'.
-
-;;; Commentary:
-
-;; This file is part of ERT, the Emacs Lisp Regression Testing tool.
-;; See ert.el or the texinfo manual for more details.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'ert)
-
-;;; Self-test that doesn't rely on ERT, for bootstrapping.
-
-;; This is used to test that bodies actually run.
-(defvar ert--test-body-was-run)
-(ert-deftest ert-test-body-runs ()
- (setq ert--test-body-was-run t))
-
-(defun ert-self-test ()
- "Run ERT's self-tests and make sure they actually ran."
- (let ((window-configuration (current-window-configuration)))
- (let ((ert--test-body-was-run nil))
- ;; The buffer name chosen here should not compete with the default
- ;; results buffer name for completion in `switch-to-buffer'.
- (let ((stats (ert-run-tests-interactively "^ert-" " *ert self-tests*")))
- (cl-assert ert--test-body-was-run)
- (if (zerop (ert-stats-completed-unexpected stats))
- ;; Hide results window only when everything went well.
- (set-window-configuration window-configuration)
- (error "ERT self-test failed"))))))
-
-(defun ert-self-test-and-exit ()
- "Run ERT's self-tests and exit Emacs.
-
-The exit code will be zero if the tests passed, nonzero if they
-failed or if there was a problem."
- (unwind-protect
- (progn
- (ert-self-test)
- (kill-emacs 0))
- (unwind-protect
- (progn
- (message "Error running tests")
- (backtrace))
- (kill-emacs 1))))
-
-
-;;; Further tests are defined using ERT.
-
-(ert-deftest ert-test-nested-test-body-runs ()
- "Test that nested test bodies run."
- (let ((was-run nil))
- (let ((test (make-ert-test :body (lambda ()
- (setq was-run t)))))
- (cl-assert (not was-run))
- (ert-run-test test)
- (cl-assert was-run))))
-
-
-;;; Test that pass/fail works.
-(ert-deftest ert-test-pass ()
- (let ((test (make-ert-test :body (lambda ()))))
- (let ((result (ert-run-test test)))
- (cl-assert (ert-test-passed-p result)))))
-
-(ert-deftest ert-test-fail ()
- (let ((test (make-ert-test :body (lambda () (ert-fail "failure message")))))
- (let ((result (let ((ert-debug-on-error nil))
- (ert-run-test test))))
- (cl-assert (ert-test-failed-p result) t)
- (cl-assert (equal (ert-test-result-with-condition-condition result)
- '(ert-test-failed "failure message"))
- t))))
-
-(ert-deftest ert-test-fail-debug-with-condition-case ()
- (let ((test (make-ert-test :body (lambda () (ert-fail "failure message")))))
- (condition-case condition
- (progn
- (let ((ert-debug-on-error t))
- (ert-run-test test))
- (cl-assert nil))
- ((error)
- (cl-assert (equal condition '(ert-test-failed "failure message")) t)))))
-
-(ert-deftest ert-test-fail-debug-with-debugger-1 ()
- (let ((test (make-ert-test :body (lambda () (ert-fail "failure message")))))
- (let ((debugger (lambda (&rest _args)
- (cl-assert nil))))
- (let ((ert-debug-on-error nil))
- (ert-run-test test)))))
-
-(ert-deftest ert-test-fail-debug-with-debugger-2 ()
- (let ((test (make-ert-test :body (lambda () (ert-fail "failure message")))))
- (cl-block nil
- (let ((debugger (lambda (&rest _args)
- (cl-return-from nil nil))))
- (let ((ert-debug-on-error t))
- (ert-run-test test))
- (cl-assert nil)))))
-
-(ert-deftest ert-test-fail-debug-nested-with-debugger ()
- (let ((test (make-ert-test :body (lambda ()
- (let ((ert-debug-on-error t))
- (ert-fail "failure message"))))))
- (let ((debugger (lambda (&rest _args)
- (cl-assert nil nil "Assertion a"))))
- (let ((ert-debug-on-error nil))
- (ert-run-test test))))
- (let ((test (make-ert-test :body (lambda ()
- (let ((ert-debug-on-error nil))
- (ert-fail "failure message"))))))
- (cl-block nil
- (let ((debugger (lambda (&rest _args)
- (cl-return-from nil nil))))
- (let ((ert-debug-on-error t))
- (ert-run-test test))
- (cl-assert nil nil "Assertion b")))))
-
-(ert-deftest ert-test-error ()
- (let ((test (make-ert-test :body (lambda () (error "Error message")))))
- (let ((result (let ((ert-debug-on-error nil))
- (ert-run-test test))))
- (cl-assert (ert-test-failed-p result) t)
- (cl-assert (equal (ert-test-result-with-condition-condition result)
- '(error "Error message"))
- t))))
-
-(ert-deftest ert-test-error-debug ()
- (let ((test (make-ert-test :body (lambda () (error "Error message")))))
- (condition-case condition
- (progn
- (let ((ert-debug-on-error t))
- (ert-run-test test))
- (cl-assert nil))
- ((error)
- (cl-assert (equal condition '(error "Error message")) t)))))
-
-
-;;; Test that `should' works.
-(ert-deftest ert-test-should ()
- (let ((test (make-ert-test :body (lambda () (should nil)))))
- (let ((result (let ((ert-debug-on-error nil))
- (ert-run-test test))))
- (cl-assert (ert-test-failed-p result) t)
- (cl-assert (equal (ert-test-result-with-condition-condition result)
- '(ert-test-failed ((should nil) :form nil :value nil)))
- t)))
- (let ((test (make-ert-test :body (lambda () (should t)))))
- (let ((result (ert-run-test test)))
- (cl-assert (ert-test-passed-p result) t))))
-
-(ert-deftest ert-test-should-value ()
- (should (eql (should 'foo) 'foo))
- (should (eql (should 'bar) 'bar)))
-
-(ert-deftest ert-test-should-not ()
- (let ((test (make-ert-test :body (lambda () (should-not t)))))
- (let ((result (let ((ert-debug-on-error nil))
- (ert-run-test test))))
- (cl-assert (ert-test-failed-p result) t)
- (cl-assert (equal (ert-test-result-with-condition-condition result)
- '(ert-test-failed ((should-not t) :form t :value t)))
- t)))
- (let ((test (make-ert-test :body (lambda () (should-not nil)))))
- (let ((result (ert-run-test test)))
- (cl-assert (ert-test-passed-p result)))))
-
-
-(ert-deftest ert-test-should-with-macrolet ()
- (let ((test (make-ert-test :body (lambda ()
- (cl-macrolet ((foo () `(progn t nil)))
- (should (foo)))))))
- (let ((result (let ((ert-debug-on-error nil))
- (ert-run-test test))))
- (should (ert-test-failed-p result))
- (should (equal
- (ert-test-result-with-condition-condition result)
- '(ert-test-failed ((should (foo))
- :form (progn t nil)
- :value nil)))))))
-
-(ert-deftest ert-test-should-error ()
- ;; No error.
- (let ((test (make-ert-test :body (lambda () (should-error (progn))))))
- (let ((result (let ((ert-debug-on-error nil))
- (ert-run-test test))))
- (should (ert-test-failed-p result))
- (should (equal (ert-test-result-with-condition-condition result)
- '(ert-test-failed
- ((should-error (progn))
- :form (progn)
- :value nil
- :fail-reason "did not signal an error"))))))
- ;; A simple error.
- (should (equal (should-error (error "Foo"))
- '(error "Foo")))
- ;; Error of unexpected type.
- (let ((test (make-ert-test :body (lambda ()
- (should-error (error "Foo")
- :type 'singularity-error)))))
- (let ((result (ert-run-test test)))
- (should (ert-test-failed-p result))
- (should (equal
- (ert-test-result-with-condition-condition result)
- '(ert-test-failed
- ((should-error (error "Foo") :type 'singularity-error)
- :form (error "Foo")
- :condition (error "Foo")
- :fail-reason
- "the error signaled did not have the expected type"))))))
- ;; Error of the expected type.
- (let* ((error nil)
- (test (make-ert-test
- :body (lambda ()
- (setq error
- (should-error (signal 'singularity-error nil)
- :type 'singularity-error))))))
- (let ((result (ert-run-test test)))
- (should (ert-test-passed-p result))
- (should (equal error '(singularity-error))))))
-
-(ert-deftest ert-test-should-error-subtypes ()
- (should-error (signal 'singularity-error nil)
- :type 'singularity-error
- :exclude-subtypes t)
- (let ((test (make-ert-test
- :body (lambda ()
- (should-error (signal 'arith-error nil)
- :type 'singularity-error)))))
- (let ((result (ert-run-test test)))
- (should (ert-test-failed-p result))
- (should (equal
- (ert-test-result-with-condition-condition result)
- '(ert-test-failed
- ((should-error (signal 'arith-error nil)
- :type 'singularity-error)
- :form (signal arith-error nil)
- :condition (arith-error)
- :fail-reason
- "the error signaled did not have the expected type"))))))
- (let ((test (make-ert-test
- :body (lambda ()
- (should-error (signal 'arith-error nil)
- :type 'singularity-error
- :exclude-subtypes t)))))
- (let ((result (ert-run-test test)))
- (should (ert-test-failed-p result))
- (should (equal
- (ert-test-result-with-condition-condition result)
- '(ert-test-failed
- ((should-error (signal 'arith-error nil)
- :type 'singularity-error
- :exclude-subtypes t)
- :form (signal arith-error nil)
- :condition (arith-error)
- :fail-reason
- "the error signaled did not have the expected type"))))))
- (let ((test (make-ert-test
- :body (lambda ()
- (should-error (signal 'singularity-error nil)
- :type 'arith-error
- :exclude-subtypes t)))))
- (let ((result (ert-run-test test)))
- (should (ert-test-failed-p result))
- (should (equal
- (ert-test-result-with-condition-condition result)
- '(ert-test-failed
- ((should-error (signal 'singularity-error nil)
- :type 'arith-error
- :exclude-subtypes t)
- :form (signal singularity-error nil)
- :condition (singularity-error)
- :fail-reason
- "the error signaled was a subtype of the expected type")))))
- ))
-
-(ert-deftest ert-test-skip-unless ()
- ;; Don't skip.
- (let ((test (make-ert-test :body (lambda () (skip-unless t)))))
- (let ((result (ert-run-test test)))
- (should (ert-test-passed-p result))))
- ;; Skip.
- (let ((test (make-ert-test :body (lambda () (skip-unless nil)))))
- (let ((result (ert-run-test test)))
- (should (ert-test-skipped-p result))))
- ;; Skip in case of error.
- (let ((test (make-ert-test :body (lambda () (skip-unless (error "Foo"))))))
- (let ((result (ert-run-test test)))
- (should (ert-test-skipped-p result)))))
-
-(defmacro ert--test-my-list (&rest args)
- "Don't use this. Instead, call `list' with ARGS, it does the same thing.
-
-This macro is used to test if macroexpansion in `should' works."
- `(list ,@args))
-
-(ert-deftest ert-test-should-failure-debugging ()
- "Test that `should' errors contain the information we expect them to."
- (cl-loop
- for (body expected-condition) in
- `((,(lambda () (let ((x nil)) (should x)))
- (ert-test-failed ((should x) :form x :value nil)))
- (,(lambda () (let ((x t)) (should-not x)))
- (ert-test-failed ((should-not x) :form x :value t)))
- (,(lambda () (let ((x t)) (should (not x))))
- (ert-test-failed ((should (not x)) :form (not t) :value nil)))
- (,(lambda () (let ((x nil)) (should-not (not x))))
- (ert-test-failed ((should-not (not x)) :form (not nil) :value t)))
- (,(lambda () (let ((x t) (y nil)) (should-not
- (ert--test-my-list x y))))
- (ert-test-failed
- ((should-not (ert--test-my-list x y))
- :form (list t nil)
- :value (t nil))))
- (,(lambda () (let ((_x t)) (should (error "Foo"))))
- (error "Foo")))
- do
- (let ((test (make-ert-test :body body)))
- (condition-case actual-condition
- (progn
- (let ((ert-debug-on-error t))
- (ert-run-test test))
- (cl-assert nil))
- ((error)
- (should (equal actual-condition expected-condition)))))))
-
-(ert-deftest ert-test-deftest ()
- ;; FIXME: These tests don't look very good. What is their intent, i.e. what
- ;; are they really testing? The precise generated code shouldn't matter, so
- ;; we should either test the behavior of the code, or else try to express the
- ;; kind of efficiency guarantees we're looking for.
- (should (equal (macroexpand '(ert-deftest abc () "foo" :tags '(bar)))
- '(progn
- (ert-set-test 'abc
- (progn
- "Constructor for objects of type `ert-test'."
- (vector 'cl-struct-ert-test 'abc "foo"
- #'(lambda nil)
- nil ':passed
- '(bar))))
- (setq current-load-list
- (cons
- '(ert-deftest . abc)
- current-load-list))
- 'abc)))
- (should (equal (macroexpand '(ert-deftest def ()
- :expected-result ':passed))
- '(progn
- (ert-set-test 'def
- (progn
- "Constructor for objects of type `ert-test'."
- (vector 'cl-struct-ert-test 'def nil
- #'(lambda nil)
- nil ':passed 'nil)))
- (setq current-load-list
- (cons
- '(ert-deftest . def)
- current-load-list))
- 'def)))
- ;; :documentation keyword is forbidden
- (should-error (macroexpand '(ert-deftest ghi ()
- :documentation "foo"))))
-
-(ert-deftest ert-test-record-backtrace ()
- (let ((test (make-ert-test :body (lambda () (ert-fail "foo")))))
- (let ((result (ert-run-test test)))
- (should (ert-test-failed-p result))
- (with-temp-buffer
- (ert--print-backtrace (ert-test-failed-backtrace result))
- (goto-char (point-min))
- (end-of-line)
- (let ((first-line (buffer-substring-no-properties (point-min) (point))))
- (should (equal first-line " (closure (ert--test-body-was-run t) nil (ert-fail \"foo\"))()")))))))
-
-(ert-deftest ert-test-messages ()
- :tags '(:causes-redisplay)
- (let* ((message-string "Test message")
- (messages-buffer (get-buffer-create "*Messages*"))
- (test (make-ert-test :body (lambda () (message "%s" message-string)))))
- (with-current-buffer messages-buffer
- (let ((result (ert-run-test test)))
- (should (equal (concat message-string "\n")
- (ert-test-result-messages result)))))))
-
-(ert-deftest ert-test-running-tests ()
- (let ((outer-test (ert-get-test 'ert-test-running-tests)))
- (should (equal (ert-running-test) outer-test))
- (let (test1 test2 test3)
- (setq test1 (make-ert-test
- :name "1"
- :body (lambda ()
- (should (equal (ert-running-test) outer-test))
- (should (equal ert--running-tests
- (list test1 test2 test3
- outer-test)))))
- test2 (make-ert-test
- :name "2"
- :body (lambda ()
- (should (equal (ert-running-test) outer-test))
- (should (equal ert--running-tests
- (list test3 test2 outer-test)))
- (ert-run-test test1)))
- test3 (make-ert-test
- :name "3"
- :body (lambda ()
- (should (equal (ert-running-test) outer-test))
- (should (equal ert--running-tests
- (list test3 outer-test)))
- (ert-run-test test2))))
- (should (ert-test-passed-p (ert-run-test test3))))))
-
-(ert-deftest ert-test-test-result-expected-p ()
- "Test `ert-test-result-expected-p' and (implicitly) `ert-test-result-type-p'."
- ;; passing test
- (let ((test (make-ert-test :body (lambda ()))))
- (should (ert-test-result-expected-p test (ert-run-test test))))
- ;; unexpected failure
- (let ((test (make-ert-test :body (lambda () (ert-fail "failed")))))
- (should-not (ert-test-result-expected-p test (ert-run-test test))))
- ;; expected failure
- (let ((test (make-ert-test :body (lambda () (ert-fail "failed"))
- :expected-result-type ':failed)))
- (should (ert-test-result-expected-p test (ert-run-test test))))
- ;; `not' expected type
- (let ((test (make-ert-test :body (lambda ())
- :expected-result-type '(not :failed))))
- (should (ert-test-result-expected-p test (ert-run-test test))))
- (let ((test (make-ert-test :body (lambda ())
- :expected-result-type '(not :passed))))
- (should-not (ert-test-result-expected-p test (ert-run-test test))))
- ;; `and' expected type
- (let ((test (make-ert-test :body (lambda ())
- :expected-result-type '(and :passed :failed))))
- (should-not (ert-test-result-expected-p test (ert-run-test test))))
- (let ((test (make-ert-test :body (lambda ())
- :expected-result-type '(and :passed
- (not :failed)))))
- (should (ert-test-result-expected-p test (ert-run-test test))))
- ;; `or' expected type
- (let ((test (make-ert-test :body (lambda ())
- :expected-result-type '(or (and :passed :failed)
- :passed))))
- (should (ert-test-result-expected-p test (ert-run-test test))))
- (let ((test (make-ert-test :body (lambda ())
- :expected-result-type '(or (and :passed :failed)
- nil (not t)))))
- (should-not (ert-test-result-expected-p test (ert-run-test test)))))
-
-;;; Test `ert-select-tests'.
-(ert-deftest ert-test-select-regexp ()
- (should (equal (ert-select-tests "^ert-test-select-regexp$" t)
- (list (ert-get-test 'ert-test-select-regexp)))))
-
-(ert-deftest ert-test-test-boundp ()
- (should (ert-test-boundp 'ert-test-test-boundp))
- (should-not (ert-test-boundp (make-symbol "ert-not-a-test"))))
-
-(ert-deftest ert-test-select-member ()
- (should (equal (ert-select-tests '(member ert-test-select-member) t)
- (list (ert-get-test 'ert-test-select-member)))))
-
-(ert-deftest ert-test-select-test ()
- (should (equal (ert-select-tests (ert-get-test 'ert-test-select-test) t)
- (list (ert-get-test 'ert-test-select-test)))))
-
-(ert-deftest ert-test-select-symbol ()
- (should (equal (ert-select-tests 'ert-test-select-symbol t)
- (list (ert-get-test 'ert-test-select-symbol)))))
-
-(ert-deftest ert-test-select-and ()
- (let ((test (make-ert-test
- :name nil
- :body nil
- :most-recent-result (make-ert-test-failed
- :condition nil
- :backtrace nil
- :infos nil))))
- (should (equal (ert-select-tests `(and (member ,test) :failed) t)
- (list test)))))
-
-(ert-deftest ert-test-select-tag ()
- (let ((test (make-ert-test
- :name nil
- :body nil
- :tags '(a b))))
- (should (equal (ert-select-tests `(tag a) (list test)) (list test)))
- (should (equal (ert-select-tests `(tag b) (list test)) (list test)))
- (should (equal (ert-select-tests `(tag c) (list test)) '()))))
-
-
-;;; Tests for utility functions.
-(ert-deftest ert-test-proper-list-p ()
- (should (ert--proper-list-p '()))
- (should (ert--proper-list-p '(1)))
- (should (ert--proper-list-p '(1 2)))
- (should (ert--proper-list-p '(1 2 3)))
- (should (ert--proper-list-p '(1 2 3 4)))
- (should (not (ert--proper-list-p 'a)))
- (should (not (ert--proper-list-p '(1 . a))))
- (should (not (ert--proper-list-p '(1 2 . a))))
- (should (not (ert--proper-list-p '(1 2 3 . a))))
- (should (not (ert--proper-list-p '(1 2 3 4 . a))))
- (let ((a (list 1)))
- (setf (cdr (last a)) a)
- (should (not (ert--proper-list-p a))))
- (let ((a (list 1 2)))
- (setf (cdr (last a)) a)
- (should (not (ert--proper-list-p a))))
- (let ((a (list 1 2 3)))
- (setf (cdr (last a)) a)
- (should (not (ert--proper-list-p a))))
- (let ((a (list 1 2 3 4)))
- (setf (cdr (last a)) a)
- (should (not (ert--proper-list-p a))))
- (let ((a (list 1 2)))
- (setf (cdr (last a)) (cdr a))
- (should (not (ert--proper-list-p a))))
- (let ((a (list 1 2 3)))
- (setf (cdr (last a)) (cdr a))
- (should (not (ert--proper-list-p a))))
- (let ((a (list 1 2 3 4)))
- (setf (cdr (last a)) (cdr a))
- (should (not (ert--proper-list-p a))))
- (let ((a (list 1 2 3)))
- (setf (cdr (last a)) (cddr a))
- (should (not (ert--proper-list-p a))))
- (let ((a (list 1 2 3 4)))
- (setf (cdr (last a)) (cddr a))
- (should (not (ert--proper-list-p a))))
- (let ((a (list 1 2 3 4)))
- (setf (cdr (last a)) (cl-cdddr a))
- (should (not (ert--proper-list-p a)))))
-
-(ert-deftest ert-test-parse-keys-and-body ()
- (should (equal (ert--parse-keys-and-body '(foo)) '(nil (foo))))
- (should (equal (ert--parse-keys-and-body '(:bar foo)) '((:bar foo) nil)))
- (should (equal (ert--parse-keys-and-body '(:bar foo a (b)))
- '((:bar foo) (a (b)))))
- (should (equal (ert--parse-keys-and-body '(:bar foo :a (b)))
- '((:bar foo :a (b)) nil)))
- (should (equal (ert--parse-keys-and-body '(bar foo :a (b)))
- '(nil (bar foo :a (b)))))
- (should-error (ert--parse-keys-and-body '(:bar foo :a))))
-
-
-(ert-deftest ert-test-run-tests-interactively ()
- :tags '(:causes-redisplay)
- (let ((passing-test (make-ert-test :name 'passing-test
- :body (lambda () (ert-pass))))
- (failing-test (make-ert-test :name 'failing-test
- :body (lambda () (ert-fail
- "failure message"))))
- (skipped-test (make-ert-test :name 'skipped-test
- :body (lambda () (ert-skip
- "skip message")))))
- (let ((ert-debug-on-error nil))
- (let* ((buffer-name (generate-new-buffer-name " *ert-test-run-tests*"))
- (messages nil)
- (mock-message-fn
- (lambda (format-string &rest args)
- (push (apply #'format format-string args) messages))))
- (save-window-excursion
- (unwind-protect
- (let ((case-fold-search nil))
- (ert-run-tests-interactively
- `(member ,passing-test ,failing-test, skipped-test) buffer-name
- mock-message-fn)
- (should (equal messages `(,(concat
- "Ran 3 tests, 1 results were "
- "as expected, 1 unexpected, "
- "1 skipped"))))
- (with-current-buffer buffer-name
- (goto-char (point-min))
- (should (equal
- (buffer-substring (point-min)
- (save-excursion
- (forward-line 5)
- (point)))
- (concat
- "Selector: (member <passing-test> <failing-test> "
- "<skipped-test>)\n"
- "Passed: 1\n"
- "Failed: 1 (1 unexpected)\n"
- "Skipped: 1\n"
- "Total: 3/3\n")))))
- (when (get-buffer buffer-name)
- (kill-buffer buffer-name))))))))
-
-(ert-deftest ert-test-special-operator-p ()
- (should (ert--special-operator-p 'if))
- (should-not (ert--special-operator-p 'car))
- (should-not (ert--special-operator-p 'ert--special-operator-p))
- (let ((b (cl-gensym)))
- (should-not (ert--special-operator-p b))
- (fset b 'if)
- (should (ert--special-operator-p b))))
-
-(ert-deftest ert-test-list-of-should-forms ()
- (let ((test (make-ert-test :body (lambda ()
- (should t)
- (should (null '()))
- (should nil)
- (should t)))))
- (let ((result (let ((ert-debug-on-error nil))
- (ert-run-test test))))
- (should (equal (ert-test-result-should-forms result)
- '(((should t) :form t :value t)
- ((should (null '())) :form (null nil) :value t)
- ((should nil) :form nil :value nil)))))))
-
-(ert-deftest ert-test-list-of-should-forms-observers-should-not-stack ()
- (let ((test (make-ert-test
- :body (lambda ()
- (let ((test2 (make-ert-test
- :body (lambda ()
- (should t)))))
- (let ((result (ert-run-test test2)))
- (should (ert-test-passed-p result))))))))
- (let ((result (let ((ert-debug-on-error nil))
- (ert-run-test test))))
- (should (ert-test-passed-p result))
- (should (eql (length (ert-test-result-should-forms result))
- 1)))))
-
-(ert-deftest ert-test-list-of-should-forms-no-deep-copy ()
- (let ((test (make-ert-test :body (lambda ()
- (let ((obj (list 'a)))
- (should (equal obj '(a)))
- (setf (car obj) 'b)
- (should (equal obj '(b))))))))
- (let ((result (let ((ert-debug-on-error nil))
- (ert-run-test test))))
- (should (ert-test-passed-p result))
- (should (equal (ert-test-result-should-forms result)
- '(((should (equal obj '(a))) :form (equal (b) (a)) :value t
- :explanation nil)
- ((should (equal obj '(b))) :form (equal (b) (b)) :value t
- :explanation nil)
- ))))))
-
-(ert-deftest ert-test-string-first-line ()
- (should (equal (ert--string-first-line "") ""))
- (should (equal (ert--string-first-line "abc") "abc"))
- (should (equal (ert--string-first-line "abc\n") "abc"))
- (should (equal (ert--string-first-line "foo\nbar") "foo"))
- (should (equal (ert--string-first-line " foo\nbar\nbaz\n") " foo")))
-
-(ert-deftest ert-test-explain-equal ()
- (should (equal (ert--explain-equal nil 'foo)
- '(different-atoms nil foo)))
- (should (equal (ert--explain-equal '(a a) '(a b))
- '(list-elt 1 (different-atoms a b))))
- (should (equal (ert--explain-equal '(1 48) '(1 49))
- '(list-elt 1 (different-atoms (48 "#x30" "?0")
- (49 "#x31" "?1")))))
- (should (equal (ert--explain-equal 'nil '(a))
- '(different-types nil (a))))
- (should (equal (ert--explain-equal '(a b c) '(a b c d))
- '(proper-lists-of-different-length 3 4 (a b c) (a b c d)
- first-mismatch-at 3)))
- (let ((sym (make-symbol "a")))
- (should (equal (ert--explain-equal 'a sym)
- `(different-symbols-with-the-same-name a ,sym)))))
-
-(ert-deftest ert-test-explain-equal-improper-list ()
- (should (equal (ert--explain-equal '(a . b) '(a . c))
- '(cdr (different-atoms b c)))))
-
-(ert-deftest ert-test-explain-equal-keymaps ()
- ;; This used to be very slow.
- (should (equal (make-keymap) (make-keymap)))
- (should (equal (make-sparse-keymap) (make-sparse-keymap))))
-
-(ert-deftest ert-test-significant-plist-keys ()
- (should (equal (ert--significant-plist-keys '()) '()))
- (should (equal (ert--significant-plist-keys '(a b c d e f c g p q r nil s t))
- '(a c e p s))))
-
-(ert-deftest ert-test-plist-difference-explanation ()
- (should (equal (ert--plist-difference-explanation
- '(a b c nil) '(a b))
- nil))
- (should (equal (ert--plist-difference-explanation
- '(a b c t) '(a b))
- '(different-properties-for-key c (different-atoms t nil))))
- (should (equal (ert--plist-difference-explanation
- '(a b c t) '(c nil a b))
- '(different-properties-for-key c (different-atoms t nil))))
- (should (equal (ert--plist-difference-explanation
- '(a b c (foo . bar)) '(c (foo . baz) a b))
- '(different-properties-for-key c
- (cdr
- (different-atoms bar baz))))))
-
-(ert-deftest ert-test-abbreviate-string ()
- (should (equal (ert--abbreviate-string "foo" 4 nil) "foo"))
- (should (equal (ert--abbreviate-string "foo" 3 nil) "foo"))
- (should (equal (ert--abbreviate-string "foo" 3 nil) "foo"))
- (should (equal (ert--abbreviate-string "foo" 2 nil) "fo"))
- (should (equal (ert--abbreviate-string "foo" 1 nil) "f"))
- (should (equal (ert--abbreviate-string "foo" 0 nil) ""))
- (should (equal (ert--abbreviate-string "bar" 4 t) "bar"))
- (should (equal (ert--abbreviate-string "bar" 3 t) "bar"))
- (should (equal (ert--abbreviate-string "bar" 3 t) "bar"))
- (should (equal (ert--abbreviate-string "bar" 2 t) "ar"))
- (should (equal (ert--abbreviate-string "bar" 1 t) "r"))
- (should (equal (ert--abbreviate-string "bar" 0 t) "")))
-
-(ert-deftest ert-test-explain-equal-string-properties ()
- (should
- (equal (ert--explain-equal-including-properties #("foo" 0 1 (a b))
- "foo")
- '(char 0 "f"
- (different-properties-for-key a (different-atoms b nil))
- context-before ""
- context-after "oo")))
- (should (equal (ert--explain-equal-including-properties
- #("foo" 1 3 (a b))
- #("goo" 0 1 (c d)))
- '(array-elt 0 (different-atoms (?f "#x66" "?f")
- (?g "#x67" "?g")))))
- (should
- (equal (ert--explain-equal-including-properties
- #("foo" 0 1 (a b c d) 1 3 (a b))
- #("foo" 0 1 (c d a b) 1 2 (a foo)))
- '(char 1 "o" (different-properties-for-key a (different-atoms b foo))
- context-before "f" context-after "o"))))
-
-(ert-deftest ert-test-equal-including-properties ()
- (should (equal-including-properties "foo" "foo"))
- (should (ert-equal-including-properties "foo" "foo"))
-
- (should (equal-including-properties #("foo" 0 3 (a b))
- (propertize "foo" 'a 'b)))
- (should (ert-equal-including-properties #("foo" 0 3 (a b))
- (propertize "foo" 'a 'b)))
-
- (should (equal-including-properties #("foo" 0 3 (a b c d))
- (propertize "foo" 'a 'b 'c 'd)))
- (should (ert-equal-including-properties #("foo" 0 3 (a b c d))
- (propertize "foo" 'a 'b 'c 'd)))
-
- (should-not (equal-including-properties #("foo" 0 3 (a b c e))
- (propertize "foo" 'a 'b 'c 'd)))
- (should-not (ert-equal-including-properties #("foo" 0 3 (a b c e))
- (propertize "foo" 'a 'b 'c 'd)))
-
- ;; This is bug 6581.
- (should-not (equal-including-properties #("foo" 0 3 (a (t)))
- (propertize "foo" 'a (list t))))
- (should (ert-equal-including-properties #("foo" 0 3 (a (t)))
- (propertize "foo" 'a (list t)))))
-
-(ert-deftest ert-test-stats-set-test-and-result ()
- (let* ((test-1 (make-ert-test :name 'test-1
- :body (lambda () nil)))
- (test-2 (make-ert-test :name 'test-2
- :body (lambda () nil)))
- (test-3 (make-ert-test :name 'test-2
- :body (lambda () nil)))
- (stats (ert--make-stats (list test-1 test-2) 't))
- (failed (make-ert-test-failed :condition nil
- :backtrace nil
- :infos nil))
- (skipped (make-ert-test-skipped :condition nil
- :backtrace nil
- :infos nil)))
- (should (eql 2 (ert-stats-total stats)))
- (should (eql 0 (ert-stats-completed stats)))
- (should (eql 0 (ert-stats-completed-expected stats)))
- (should (eql 0 (ert-stats-completed-unexpected stats)))
- (should (eql 0 (ert-stats-skipped stats)))
- (ert--stats-set-test-and-result stats 0 test-1 (make-ert-test-passed))
- (should (eql 2 (ert-stats-total stats)))
- (should (eql 1 (ert-stats-completed stats)))
- (should (eql 1 (ert-stats-completed-expected stats)))
- (should (eql 0 (ert-stats-completed-unexpected stats)))
- (should (eql 0 (ert-stats-skipped stats)))
- (ert--stats-set-test-and-result stats 0 test-1 failed)
- (should (eql 2 (ert-stats-total stats)))
- (should (eql 1 (ert-stats-completed stats)))
- (should (eql 0 (ert-stats-completed-expected stats)))
- (should (eql 1 (ert-stats-completed-unexpected stats)))
- (should (eql 0 (ert-stats-skipped stats)))
- (ert--stats-set-test-and-result stats 0 test-1 nil)
- (should (eql 2 (ert-stats-total stats)))
- (should (eql 0 (ert-stats-completed stats)))
- (should (eql 0 (ert-stats-completed-expected stats)))
- (should (eql 0 (ert-stats-completed-unexpected stats)))
- (should (eql 0 (ert-stats-skipped stats)))
- (ert--stats-set-test-and-result stats 0 test-3 failed)
- (should (eql 2 (ert-stats-total stats)))
- (should (eql 1 (ert-stats-completed stats)))
- (should (eql 0 (ert-stats-completed-expected stats)))
- (should (eql 1 (ert-stats-completed-unexpected stats)))
- (should (eql 0 (ert-stats-skipped stats)))
- (ert--stats-set-test-and-result stats 1 test-2 (make-ert-test-passed))
- (should (eql 2 (ert-stats-total stats)))
- (should (eql 2 (ert-stats-completed stats)))
- (should (eql 1 (ert-stats-completed-expected stats)))
- (should (eql 1 (ert-stats-completed-unexpected stats)))
- (should (eql 0 (ert-stats-skipped stats)))
- (ert--stats-set-test-and-result stats 0 test-1 (make-ert-test-passed))
- (should (eql 2 (ert-stats-total stats)))
- (should (eql 2 (ert-stats-completed stats)))
- (should (eql 2 (ert-stats-completed-expected stats)))
- (should (eql 0 (ert-stats-completed-unexpected stats)))
- (should (eql 0 (ert-stats-skipped stats)))
- (ert--stats-set-test-and-result stats 0 test-1 skipped)
- (should (eql 2 (ert-stats-total stats)))
- (should (eql 2 (ert-stats-completed stats)))
- (should (eql 1 (ert-stats-completed-expected stats)))
- (should (eql 0 (ert-stats-completed-unexpected stats)))
- (should (eql 1 (ert-stats-skipped stats)))))
-
-
-(provide 'ert-tests)
-
-;;; ert-tests.el ends here
-
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
diff --git a/test/automated/ert-x-tests.el b/test/automated/ert-x-tests.el
deleted file mode 100644
index 660a1cb218e..00000000000
--- a/test/automated/ert-x-tests.el
+++ /dev/null
@@ -1,280 +0,0 @@
-;;; ert-x-tests.el --- Tests for ert-x.el
-
-;; Copyright (C) 2008, 2010-2015 Free Software Foundation, Inc.
-
-;; Author: Phil Hagelberg
-;; Christian Ohler <ohler@gnu.org>
-
-;; This file is part of GNU Emacs.
-
-;; This program 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.
-;;
-;; This program 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 this program. If not, see `http://www.gnu.org/licenses/'.
-
-;;; Commentary:
-
-;; This file is part of ERT, the Emacs Lisp Regression Testing tool.
-;; See ert.el or the texinfo manual for more details.
-
-;;; Code:
-
-(eval-when-compile
- (require 'cl-lib))
-(require 'ert)
-(require 'ert-x)
-
-;;; Utilities
-
-(ert-deftest ert-test-buffer-string-reindented ()
- (ert-with-test-buffer (:name "well-indented")
- (insert (concat "(hello (world\n"
- " 'elisp)\n"))
- (emacs-lisp-mode)
- (should (equal (ert-buffer-string-reindented) (buffer-string))))
- (ert-with-test-buffer (:name "badly-indented")
- (insert (concat "(hello\n"
- " world)"))
- (emacs-lisp-mode)
- (should-not (equal (ert-buffer-string-reindented) (buffer-string)))))
-
-(defun ert--hash-table-to-alist (table)
- (let ((accu nil))
- (maphash (lambda (key value)
- (push (cons key value) accu))
- table)
- (nreverse accu)))
-
-(ert-deftest ert-test-test-buffers ()
- (let (buffer-1
- buffer-2)
- (let ((test-1
- (make-ert-test
- :name 'test-1
- :body (lambda ()
- (ert-with-test-buffer (:name "foo")
- (should (string-match
- "[*]Test buffer (ert-test-test-buffers): foo[*]"
- (buffer-name)))
- (setq buffer-1 (current-buffer))))))
- (test-2
- (make-ert-test
- :name 'test-2
- :body (lambda ()
- (ert-with-test-buffer (:name "bar")
- (should (string-match
- "[*]Test buffer (ert-test-test-buffers): bar[*]"
- (buffer-name)))
- (setq buffer-2 (current-buffer))
- (ert-fail "fail for test"))))))
- (let ((ert--test-buffers (make-hash-table :weakness t)))
- (ert-run-tests `(member ,test-1 ,test-2) #'ignore)
- (should (equal (ert--hash-table-to-alist ert--test-buffers)
- `((,buffer-2 . t))))
- (should-not (buffer-live-p buffer-1))
- (should (buffer-live-p buffer-2))))))
-
-
-(ert-deftest ert-filter-string ()
- (should (equal (ert-filter-string "foo bar baz" "quux")
- "foo bar baz"))
- (should (equal (ert-filter-string "foo bar baz" "bar")
- "foo baz")))
-
-(ert-deftest ert-propertized-string ()
- (should (ert-equal-including-properties
- (ert-propertized-string "a" '(a b) "b" '(c t) "cd")
- #("abcd" 1 2 (a b) 2 4 (c t))))
- (should (ert-equal-including-properties
- (ert-propertized-string "foo " '(face italic) "bar" " baz" nil
- " quux")
- #("foo bar baz quux" 4 11 (face italic)))))
-
-
-;;; Tests for ERT itself that require test features from ert-x.el.
-
-(ert-deftest ert-test-run-tests-interactively-2 ()
- :tags '(:causes-redisplay)
- (let* ((passing-test (make-ert-test :name 'passing-test
- :body (lambda () (ert-pass))))
- (failing-test (make-ert-test :name 'failing-test
- :body (lambda ()
- (ert-info ((propertize "foo\nbar"
- 'a 'b))
- (ert-fail
- "failure message")))))
- (skipped-test (make-ert-test :name 'skipped-test
- :body (lambda () (ert-skip
- "skip message"))))
- (ert-debug-on-error nil)
- (buffer-name (generate-new-buffer-name "*ert-test-run-tests*"))
- (messages nil)
- (mock-message-fn
- (lambda (format-string &rest args)
- (push (apply #'format format-string args) messages))))
- (cl-flet ((expected-string (with-font-lock-p)
- (ert-propertized-string
- "Selector: (member <passing-test> <failing-test> "
- "<skipped-test>)\n"
- "Passed: 1\n"
- "Failed: 1 (1 unexpected)\n"
- "Skipped: 1\n"
- "Total: 3/3\n\n"
- "Started at:\n"
- "Finished.\n"
- "Finished at:\n\n"
- `(category ,(button-category-symbol
- 'ert--results-progress-bar-button)
- button (t)
- face ,(if with-font-lock-p
- 'ert-test-result-unexpected
- 'button))
- ".Fs" nil "\n\n"
- `(category ,(button-category-symbol
- 'ert--results-expand-collapse-button)
- button (t)
- face ,(if with-font-lock-p
- 'ert-test-result-unexpected
- 'button))
- "F" nil " "
- `(category ,(button-category-symbol
- 'ert--test-name-button)
- button (t)
- ert-test-name failing-test)
- "failing-test"
- nil "\n Info: " '(a b) "foo\n"
- nil " " '(a b) "bar"
- nil "\n (ert-test-failed \"failure message\")\n\n\n"
- )))
- (save-window-excursion
- (unwind-protect
- (let ((case-fold-search nil))
- (ert-run-tests-interactively
- `(member ,passing-test ,failing-test ,skipped-test) buffer-name
- mock-message-fn)
- (should (equal messages `(,(concat
- "Ran 3 tests, 1 results were "
- "as expected, 1 unexpected, "
- "1 skipped"))))
- (with-current-buffer buffer-name
- (font-lock-mode 0)
- (should (ert-equal-including-properties
- (ert-filter-string (buffer-string)
- '("Started at:\\(.*\\)$" 1)
- '("Finished at:\\(.*\\)$" 1))
- (expected-string nil)))
- ;; `font-lock-mode' only works if interactive, so
- ;; pretend we are.
- (let ((noninteractive nil))
- (font-lock-mode 1))
- (should (ert-equal-including-properties
- (ert-filter-string (buffer-string)
- '("Started at:\\(.*\\)$" 1)
- '("Finished at:\\(.*\\)$" 1))
- (expected-string t)))))
- (when (get-buffer buffer-name)
- (kill-buffer buffer-name)))))))
-
-(ert-deftest ert-test-describe-test ()
- "Tests `ert-describe-test'."
- (save-window-excursion
- (ert-with-buffer-renamed ("*Help*")
- (if (< emacs-major-version 24)
- (should (equal (should-error (ert-describe-test 'ert-describe-test))
- '(error "Requires Emacs 24")))
- (ert-describe-test 'ert-test-describe-test)
- (with-current-buffer "*Help*"
- (let ((case-fold-search nil))
- (should (string-match (concat
- "\\`ert-test-describe-test is a test"
- " defined in"
- " ['`‘]ert-x-tests.elc?['’]\\.\n\n"
- "Tests ['`‘]ert-describe-test['’]\\.\n\\'")
- (buffer-string)))))))))
-
-(ert-deftest ert-test-message-log-truncation ()
- :tags '(:causes-redisplay)
- (let ((test (make-ert-test
- :body (lambda ()
- ;; Emacs would combine messages if we
- ;; generate the same message multiple
- ;; times.
- (message "a")
- (message "b")
- (message "c")
- (message "d")))))
- (let (result)
- (ert-with-buffer-renamed ("*Messages*")
- (let ((message-log-max 2))
- (setq result (ert-run-test test)))
- (should (equal (with-current-buffer "*Messages*"
- (buffer-string))
- "c\nd\n")))
- (should (equal (ert-test-result-messages result) "a\nb\nc\nd\n")))))
-
-(ert-deftest ert-test-builtin-message-log-flushing ()
- "This test attempts to demonstrate that there is no way to
-force immediate truncation of the *Messages* buffer from Lisp
-\(and hence justifies the existence of
-`ert--force-message-log-buffer-truncation'): The only way that
-came to my mind was \(message \"\"), which doesn't have the
-desired effect."
- :tags '(:causes-redisplay)
- (ert-with-buffer-renamed ("*Messages*")
- (with-current-buffer "*Messages*"
- (should (equal (buffer-string) ""))
- ;; We used to get sporadic failures in this test that involved
- ;; a spurious newline at the beginning of the buffer, before
- ;; the first message. Below, we print a message and erase the
- ;; buffer since this seems to eliminate the sporadic failures.
- (message "foo")
- (erase-buffer)
- (should (equal (buffer-string) ""))
- (let ((message-log-max 2))
- (let ((message-log-max t))
- (cl-loop for i below 4 do
- (message "%s" i))
- (should (equal (buffer-string) "0\n1\n2\n3\n")))
- (should (equal (buffer-string) "0\n1\n2\n3\n"))
- (message "")
- (should (equal (buffer-string) "0\n1\n2\n3\n"))
- (message "Test message")
- (should (equal (buffer-string) "3\nTest message\n"))))))
-
-(ert-deftest ert-test-force-message-log-buffer-truncation ()
- :tags '(:causes-redisplay)
- (cl-labels ((body ()
- (cl-loop for i below 3 do
- (message "%s" i)))
- ;; Uses the implicit messages buffer truncation implemented
- ;; in Emacs' C core.
- (c (x)
- (ert-with-buffer-renamed ("*Messages*")
- (let ((message-log-max x))
- (body))
- (with-current-buffer "*Messages*"
- (buffer-string))))
- ;; Uses our lisp reimplementation.
- (lisp (x)
- (ert-with-buffer-renamed ("*Messages*")
- (let ((message-log-max t))
- (body))
- (let ((message-log-max x))
- (ert--force-message-log-buffer-truncation))
- (with-current-buffer "*Messages*"
- (buffer-string)))))
- (cl-loop for x in '(0 1 2 3 4 t) do
- (should (equal (c x) (lisp x))))))
-
-
-(provide 'ert-x-tests)
-
-;;; ert-x-tests.el ends here
diff --git a/test/automated/eshell.el b/test/automated/eshell.el
deleted file mode 100644
index 81898db79a7..00000000000
--- a/test/automated/eshell.el
+++ /dev/null
@@ -1,252 +0,0 @@
-;;; tests/eshell.el --- Eshell test suite
-
-;; Copyright (C) 1999-2015 Free Software Foundation, Inc.
-
-;; Author: John Wiegley <johnw@gnu.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/>.
-
-;;; Commentary:
-
-;; Eshell test suite.
-
-;;; Code:
-
-(require 'ert)
-(require 'eshell)
-
-(defmacro with-temp-eshell (&rest body)
- "Evaluate BODY in a temporary Eshell buffer."
- `(let* ((eshell-directory-name (make-temp-file "eshell" t))
- (eshell-history-file-name nil)
- (eshell-buffer (eshell t)))
- (unwind-protect
- (with-current-buffer eshell-buffer
- ,@body)
- (let (kill-buffer-query-functions)
- (kill-buffer eshell-buffer)
- (delete-directory eshell-directory-name t)))))
-
-(defun eshell-insert-command (text &optional func)
- "Insert a command at the end of the buffer."
- (goto-char eshell-last-output-end)
- (insert-and-inherit text)
- (funcall (or func 'eshell-send-input)))
-
-(defun eshell-match-result (regexp)
- "Check that text after `eshell-last-input-end' matches REGEXP."
- (goto-char eshell-last-input-end)
- (should (string-match-p regexp (buffer-substring-no-properties
- (point) (point-max)))))
-
-(defun eshell-command-result-p (text regexp &optional func)
- "Insert a command at the end of the buffer."
- (eshell-insert-command text func)
- (eshell-match-result regexp))
-
-(defun eshell-test-command-result (command)
- "Like `eshell-command-result', but not using HOME."
- (let ((eshell-directory-name (make-temp-file "eshell" t))
- (eshell-history-file-name nil))
- (unwind-protect
- (eshell-command-result command)
- (delete-directory eshell-directory-name t))))
-
-;;; Tests:
-
-(ert-deftest eshell-test/simple-command-result ()
- "Test `eshell-command-result' with a simple command."
- (should (equal (eshell-test-command-result "+ 1 2") 3)))
-
-(ert-deftest eshell-test/lisp-command ()
- "Test `eshell-command-result' with an elisp command."
- (should (equal (eshell-test-command-result "(+ 1 2)") 3)))
-
-(ert-deftest eshell-test/for-loop ()
- "Test `eshell-command-result' with a for loop.."
- (let ((process-environment (cons "foo" process-environment)))
- (should (equal (eshell-test-command-result
- "for foo in 5 { echo $foo }") 5))))
-
-(ert-deftest eshell-test/for-name-loop () ;Bug#15231
- "Test `eshell-command-result' with a for loop using `name'."
- (let ((process-environment (cons "name" process-environment)))
- (should (equal (eshell-test-command-result
- "for name in 3 { echo $name }") 3))))
-
-(ert-deftest eshell-test/for-name-shadow-loop () ; bug#15372
- "Test `eshell-command-result' with a for loop using an env-var."
- (let ((process-environment (cons "name=env-value" process-environment)))
- (with-temp-eshell
- (eshell-command-result-p "echo $name; for name in 3 { echo $name }; echo $name"
- "env-value\n3\nenv-value\n"))))
-
-(ert-deftest eshell-test/lisp-command-args ()
- "Test `eshell-command-result' with elisp and trailing args.
-Test that trailing arguments outside the S-expression are
-ignored. e.g. \"(+ 1 2) 3\" => 3"
- (should (equal (eshell-test-command-result "(+ 1 2) 3") 3)))
-
-(ert-deftest eshell-test/subcommand ()
- "Test `eshell-command-result' with a simple subcommand."
- (should (equal (eshell-test-command-result "{+ 1 2}") 3)))
-
-(ert-deftest eshell-test/subcommand-args ()
- "Test `eshell-command-result' with a subcommand and trailing args.
-Test that trailing arguments outside the subcommand are ignored.
-e.g. \"{+ 1 2} 3\" => 3"
- (should (equal (eshell-test-command-result "{+ 1 2} 3") 3)))
-
-(ert-deftest eshell-test/subcommand-lisp ()
- "Test `eshell-command-result' with an elisp subcommand and trailing args.
-Test that trailing arguments outside the subcommand are ignored.
-e.g. \"{(+ 1 2)} 3\" => 3"
- (should (equal (eshell-test-command-result "{(+ 1 2)} 3") 3)))
-
-(ert-deftest eshell-test/interp-cmd ()
- "Interpolate command result"
- (should (equal (eshell-test-command-result "+ ${+ 1 2} 3") 6)))
-
-(ert-deftest eshell-test/interp-lisp ()
- "Interpolate Lisp form evaluation"
- (should (equal (eshell-test-command-result "+ $(+ 1 2) 3") 6)))
-
-(ert-deftest eshell-test/interp-concat ()
- "Interpolate and concat command"
- (should (equal (eshell-test-command-result "+ ${+ 1 2}3 3") 36)))
-
-(ert-deftest eshell-test/interp-concat-lisp ()
- "Interpolate and concat Lisp form"
- (should (equal (eshell-test-command-result "+ $(+ 1 2)3 3") 36)))
-
-(ert-deftest eshell-test/interp-concat2 ()
- "Interpolate and concat two commands"
- (should (equal (eshell-test-command-result "+ ${+ 1 2}${+ 1 2} 3") 36)))
-
-(ert-deftest eshell-test/interp-concat-lisp2 ()
- "Interpolate and concat two Lisp forms"
- (should (equal (eshell-test-command-result "+ $(+ 1 2)$(+ 1 2) 3") 36)))
-
-(ert-deftest eshell-test/window-height ()
- "$LINES should equal (window-height)"
- (should (eshell-test-command-result "= $LINES (window-height)")))
-
-(ert-deftest eshell-test/window-width ()
- "$COLUMNS should equal (window-width)"
- (should (eshell-test-command-result "= $COLUMNS (window-width)")))
-
-(ert-deftest eshell-test/last-result-var ()
- "Test using the \"last result\" ($$) variable"
- (with-temp-eshell
- (eshell-command-result-p "+ 1 2; + $$ 2"
- "3\n5\n")))
-
-(ert-deftest eshell-test/last-result-var2 ()
- "Test using the \"last result\" ($$) variable twice"
- (with-temp-eshell
- (eshell-command-result-p "+ 1 2; + $$ $$"
- "3\n6\n")))
-
-(ert-deftest eshell-test/last-arg-var ()
- "Test using the \"last arg\" ($_) variable"
- (with-temp-eshell
- (eshell-command-result-p "+ 1 2; + $_ 4"
- "3\n6\n")))
-
-(ert-deftest eshell-test/escape-nonspecial ()
- "Test that \"\\c\" and \"c\" are equivalent when \"c\" is not a
-special character."
- (with-temp-eshell
- (eshell-command-result-p "echo he\\llo"
- "hello\n")))
-
-(ert-deftest eshell-test/escape-nonspecial-unicode ()
- "Test that \"\\c\" and \"c\" are equivalent when \"c\" is a
-unicode character (unicode characters are nonspecial by
-definition)."
- (with-temp-eshell
- (eshell-command-result-p "echo Vid\\éos"
- "Vidéos\n")))
-
-(ert-deftest eshell-test/escape-nonspecial-quoted ()
- "Test that the backslash is preserved for escaped nonspecial
-chars"
- (with-temp-eshell
- (eshell-command-result-p "echo \"h\\i\""
- ;; Backslashes are doubled for regexp.
- "h\\\\i\n")))
-
-(ert-deftest eshell-test/escape-special-quoted ()
- "Test that the backslash is not preserved for escaped special
-chars"
- (with-temp-eshell
- (eshell-command-result-p "echo \"h\\\\i\""
- ;; Backslashes are doubled for regexp.
- "h\\\\i\n")))
-
-(ert-deftest eshell-test/command-running-p ()
- "Modeline should show no command running"
- (with-temp-eshell
- (let ((eshell-status-in-mode-line t))
- (should (memq 'eshell-command-running-string mode-line-format))
- (should (equal eshell-command-running-string "--")))))
-
-(ert-deftest eshell-test/forward-arg ()
- "Test moving across command arguments"
- (with-temp-eshell
- (eshell-insert-command "echo $(+ 1 (- 4 3)) \"alpha beta\" file" 'ignore)
- (let ((here (point)) begin valid)
- (eshell-bol)
- (setq begin (point))
- (eshell-forward-argument 4)
- (setq valid (= here (point)))
- (eshell-backward-argument 4)
- (prog1
- (and valid (= begin (point)))
- (eshell-bol)
- (delete-region (point) (point-max))))))
-
-(ert-deftest eshell-test/queue-input ()
- "Test queuing command input"
- (with-temp-eshell
- (eshell-insert-command "sleep 2")
- (eshell-insert-command "echo alpha" 'eshell-queue-input)
- (let ((count 10))
- (while (and eshell-current-command
- (> count 0))
- (sit-for 1)
- (setq count (1- count))))
- (eshell-match-result "alpha\n")))
-
-(ert-deftest eshell-test/flush-output ()
- "Test flushing of previous output"
- (with-temp-eshell
- (eshell-insert-command "echo alpha")
- (eshell-kill-output)
- (eshell-match-result (regexp-quote "*** output flushed ***\n"))
- (should (forward-line))
- (should (= (point) eshell-last-output-start))))
-
-(ert-deftest eshell-test/run-old-command ()
- "Re-run an old command"
- (with-temp-eshell
- (eshell-insert-command "echo alpha")
- (goto-char eshell-last-input-start)
- (string= (eshell-get-old-input) "echo alpha")))
-
-(provide 'esh-test)
-
-;;; tests/eshell.el ends here
diff --git a/test/automated/f90.el b/test/automated/f90.el
deleted file mode 100644
index e429b21c092..00000000000
--- a/test/automated/f90.el
+++ /dev/null
@@ -1,258 +0,0 @@
-;;; f90.el --- tests for progmodes/f90.el
-
-;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
-
-;; Author: Glenn Morris <rgm@gnu.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/>.
-
-;;; Commentary:
-
-;; This file does not have "test" in the name, because it lives under
-;; a test/ directory, so that would be superfluous.
-
-;;; Code:
-
-(require 'ert)
-(require 'f90)
-
-(defconst f90-test-indent "\
-!! Comment before code.
-!!! Comments before code.
-#preprocessor before code
-
-program progname
-
- implicit none
-
- integer :: i
-
- !! Comment.
-
- do i = 1, 10
-
-#preprocessor
-
- !! Comment.
- if ( i % 2 == 0 ) then
- !! Comment.
- cycle
- else
- write(*,*) i
- end if
- end do
-
-!!! Comment.
-
-end program progname
-"
- "Test string for F90 indentation.")
-
-(ert-deftest f90-test-indent ()
- "Test F90 indentation."
- (with-temp-buffer
- (f90-mode)
- (insert f90-test-indent)
- (indent-rigidly (point-min) (point-max) -999)
- (f90-indent-region (point-min) (point-max))
- (should (string-equal (buffer-string) f90-test-indent))))
-
-(ert-deftest f90-test-bug3729 ()
- "Test for http://debbugs.gnu.org/3729 ."
- :expected-result :failed
- (with-temp-buffer
- (f90-mode)
- (insert "!! Comment
-
-include \"file.f90\"
-
-subroutine test (x)
- real x
- x = x+1.
- return
-end subroutine test")
- (goto-char (point-min))
- (forward-line 2)
- (f90-indent-subprogram)
- (should (= 0 (current-indentation)))))
-
-(ert-deftest f90-test-bug3730 ()
- "Test for http://debbugs.gnu.org/3730 ."
- (with-temp-buffer
- (f90-mode)
- (insert "a" )
- (move-to-column 68 t)
- (insert "(/ x /)")
- (f90-do-auto-fill)
- (beginning-of-line)
- (skip-chars-forward "[ \t]")
- (should (equal "&(/" (buffer-substring (point) (+ 3 (point)))))))
-
-;; TODO bug#5593
-
-(ert-deftest f90-test-bug8691 ()
- "Test for http://debbugs.gnu.org/8691 ."
- (with-temp-buffer
- (f90-mode)
- (insert "module modname
-type, bind(c) :: type1
-integer :: part1
-end type type1
-end module modname")
- (f90-indent-subprogram)
- (forward-line -1)
- (should (= 2 (current-indentation)))))
-
-;; TODO bug#8812
-
-(ert-deftest f90-test-bug8820 ()
- "Test for http://debbugs.gnu.org/8820 ."
- (with-temp-buffer
- (f90-mode)
- (should (eq (char-syntax ?%) (string-to-char ".")))))
-
-(ert-deftest f90-test-bug9553a ()
- "Test for http://debbugs.gnu.org/9553 ."
- (with-temp-buffer
- (f90-mode)
- (insert "!!!")
- (dotimes (_i 20) (insert " aaaa"))
- (f90-do-auto-fill)
- (beginning-of-line)
- ;; This gives a more informative failure than looking-at.
- (should (equal "!!! a" (buffer-substring (point) (+ 5 (point)))))))
-
-(ert-deftest f90-test-bug9553b ()
- "Test for http://debbugs.gnu.org/9553 ."
- (with-temp-buffer
- (f90-mode)
- (insert "!!!")
- (dotimes (_i 13) (insert " aaaa"))
- (insert "a, aaaa")
- (f90-do-auto-fill)
- (beginning-of-line)
- (should (equal "!!! a" (buffer-substring (point) (+ 5 (point)))))))
-
-(ert-deftest f90-test-bug9690 ()
- "Test for http://debbugs.gnu.org/9690 ."
- (with-temp-buffer
- (f90-mode)
- (insert "#include \"foo.h\"")
- (f90-indent-line)
- (should (= 0 (current-indentation)))))
-
-(ert-deftest f90-test-bug13138 ()
- "Test for http://debbugs.gnu.org/13138 ."
- (with-temp-buffer
- (f90-mode)
- (insert "program prog
- integer :: i = &
-#ifdef foo
- & 1
-#else
- & 2
-#endif
-
- write(*,*) i
-end program prog")
- (goto-char (point-min))
- (forward-line 2)
- (f90-indent-subprogram)
- (should (= 0 (current-indentation)))))
-
-(ert-deftest f90-test-bug-19809 ()
- "Test for http://debbugs.gnu.org/19809 ."
- (with-temp-buffer
- (f90-mode)
- ;; The Fortran standard says that continued strings should have
- ;; '&' at the start of continuation lines, but it seems gfortran
- ;; allows them to be absent (albeit with a warning).
- (insert "program prog
- write (*,*), '&
-end program prog'
-end program prog")
- (goto-char (point-min))
- (f90-end-of-subprogram)
- (should (= (point) (point-max)))))
-
-(ert-deftest f90-test-bug20680 ()
- "Test for http://debbugs.gnu.org/20680 ."
- (with-temp-buffer
- (f90-mode)
- (insert "module modname
-type, extends ( sometype ) :: type1
-integer :: part1
-end type type1
-end module modname")
- (f90-indent-subprogram)
- (forward-line -1)
- (should (= 2 (current-indentation)))))
-
-(ert-deftest f90-test-bug20680b ()
- "Test for http://debbugs.gnu.org/20680 ."
- (with-temp-buffer
- (f90-mode)
- (insert "module modname
-enum, bind(c)
-enumerator :: e1 = 0
-end enum
-end module modname")
- (f90-indent-subprogram)
- (forward-line -1)
- (should (= 2 (current-indentation)))))
-
-(ert-deftest f90-test-bug20969 ()
- "Test for http://debbugs.gnu.org/20969 ."
- (with-temp-buffer
- (f90-mode)
- (insert "module modname
-type, extends ( sometype ), private :: type1
-integer :: part1
-end type type1
-end module modname")
- (f90-indent-subprogram)
- (forward-line -1)
- (should (= 2 (current-indentation)))))
-
-(ert-deftest f90-test-bug20969b ()
- "Test for http://debbugs.gnu.org/20969 ."
- (with-temp-buffer
- (f90-mode)
- (insert "module modname
-type, private, extends ( sometype ) :: type1
-integer :: part1
-end type type1
-end module modname")
- (f90-indent-subprogram)
- (forward-line -1)
- (should (= 2 (current-indentation)))))
-
-(ert-deftest f90-test-bug21794 ()
- "Test for http://debbugs.gnu.org/21794 ."
- (with-temp-buffer
- (f90-mode)
- (insert "program prog
-do i=1,10
-associate (x => xa(i), y => ya(i))
-a(x,y,i) = fun(x,y,i)
-end associate
-end do
-end program prog")
- (f90-indent-subprogram)
- (forward-line -2)
- (should (= 5 (current-indentation)))))
-
-;;; f90.el ends here
diff --git a/test/automated/faces-tests.el b/test/automated/faces-tests.el
deleted file mode 100644
index 007bc805120..00000000000
--- a/test/automated/faces-tests.el
+++ /dev/null
@@ -1,54 +0,0 @@
-;;; faces-tests.el --- Tests for faces.el -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-;; Keywords:
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(require 'ert)
-(require 'faces)
-
-(defface faces--test1
- '((t :background "black" :foreground "black"))
- "")
-
-(defface faces--test2
- '((t :box 1))
- "")
-
-(ert-deftest faces--test-color-at-point ()
- (with-temp-buffer
- (insert (propertize "STRING" 'face '(faces--test2 faces--test1)))
- (goto-char (point-min))
- (should (equal (background-color-at-point) "black"))
- (should (equal (foreground-color-at-point) "black")))
- (with-temp-buffer
- (emacs-lisp-mode)
- (setq-local font-lock-comment-face 'faces--test1)
- (setq-local font-lock-constant-face 'faces--test2)
- (insert ";; `symbol'")
- (font-lock-fontify-region (point-min) (point-max))
- (goto-char (point-min))
- (should (equal (background-color-at-point) "black"))
- (should (equal (foreground-color-at-point) "black"))
- (goto-char 6)
- (should (equal (background-color-at-point) "black"))
- (should (equal (foreground-color-at-point) "black"))))
-
-(provide 'faces-tests)
-;;; faces-tests.el ends here
diff --git a/test/automated/file-notify-tests.el b/test/automated/file-notify-tests.el
deleted file mode 100644
index 67e929a6477..00000000000
--- a/test/automated/file-notify-tests.el
+++ /dev/null
@@ -1,628 +0,0 @@
-;;; file-notify-tests.el --- Tests of file notifications -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Michael Albinus <michael.albinus@gmx.de>
-
-;; This program 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.
-;;
-;; This program 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 this program. If not, see `http://www.gnu.org/licenses/'.
-
-;;; Commentary:
-
-;; Some of the tests require access to a remote host files. Since
-;; this could be problematic, a mock-up connection method "mock" is
-;; used. Emulating a remote connection, it simply calls "sh -i".
-;; Tramp's file name handlers still run, so this test is sufficient
-;; except for connection establishing.
-
-;; If you want to test a real Tramp connection, set
-;; $REMOTE_TEMPORARY_FILE_DIRECTORY to a suitable value in order to
-;; overwrite the default value. If you want to skip tests accessing a
-;; remote host, set this environment variable to "/dev/null" or
-;; whatever is appropriate on your system.
-
-;; A whole test run can be performed calling the command `file-notify-test-all'.
-
-;;; Code:
-
-(require 'ert)
-(require 'filenotify)
-(require 'tramp)
-
-;; There is no default value on w32 systems, which could work out of the box.
-(defconst file-notify-test-remote-temporary-file-directory
- (cond
- ((getenv "REMOTE_TEMPORARY_FILE_DIRECTORY"))
- ((eq system-type 'windows-nt) null-device)
- (t (add-to-list
- 'tramp-methods
- '("mock"
- (tramp-login-program "sh")
- (tramp-login-args (("-i")))
- (tramp-remote-shell "/bin/sh")
- (tramp-remote-shell-args ("-c"))
- (tramp-connection-timeout 10)))
- (format "/mock::%s" temporary-file-directory)))
- "Temporary directory for Tramp tests.")
-
-(defvar file-notify--test-tmpfile nil)
-(defvar file-notify--test-tmpfile1 nil)
-(defvar file-notify--test-desc nil)
-(defvar file-notify--test-results nil)
-(defvar file-notify--test-event nil)
-(defvar file-notify--test-events nil)
-(defvar file-notify--test-expected-events nil)
-
-(defun file-notify--test-timeout ()
- "Timeout to wait for arriving events, in seconds."
- (if (file-remote-p temporary-file-directory) 6 3))
-
-(defun file-notify--test-cleanup ()
- "Cleanup after a test."
- (file-notify-rm-watch file-notify--test-desc)
-
- (when (and file-notify--test-tmpfile
- (file-exists-p file-notify--test-tmpfile))
- (if (file-directory-p file-notify--test-tmpfile)
- (delete-directory file-notify--test-tmpfile 'recursive)
- (delete-file file-notify--test-tmpfile)))
- (when (and file-notify--test-tmpfile1
- (file-exists-p file-notify--test-tmpfile1))
- (if (file-directory-p file-notify--test-tmpfile1)
- (delete-directory file-notify--test-tmpfile1 'recursive)
- (delete-file file-notify--test-tmpfile1)))
- (when (file-remote-p temporary-file-directory)
- (tramp-cleanup-connection
- (tramp-dissect-file-name temporary-file-directory) nil 'keep-password))
-
- (setq file-notify--test-tmpfile nil
- file-notify--test-tmpfile1 nil
- file-notify--test-desc nil
- file-notify--test-results nil
- file-notify--test-events nil
- file-notify--test-expected-events nil)
- (when file-notify--test-event
- (error "file-notify--test-event should not be set but bound dynamically")))
-
-(setq password-cache-expiry nil
- tramp-verbose 0
- tramp-message-show-message nil)
-
-;; This shall happen on hydra only.
-(when (getenv "NIX_STORE")
- (add-to-list 'tramp-remote-path 'tramp-own-remote-path))
-
-;; We do not want to try and fail `file-notify-add-watch'.
-(defun file-notify--test-local-enabled ()
- "Whether local file notification is enabled.
-This is needed for local `temporary-file-directory' only, in the
-remote case we return always t."
- (or file-notify--library
- (file-remote-p temporary-file-directory)))
-
-(defvar file-notify--test-remote-enabled-checked nil
- "Cached result of `file-notify--test-remote-enabled'.
-If the function did run, the value is a cons cell, the `cdr'
-being the result.")
-
-(defun file-notify--test-remote-enabled ()
- "Whether remote file notification is enabled."
- (unless (consp file-notify--test-remote-enabled-checked)
- (let (desc)
- (ignore-errors
- (and
- (file-remote-p file-notify-test-remote-temporary-file-directory)
- (file-directory-p file-notify-test-remote-temporary-file-directory)
- (file-writable-p file-notify-test-remote-temporary-file-directory)
- (setq desc
- (file-notify-add-watch
- file-notify-test-remote-temporary-file-directory
- '(change) 'ignore))))
- (setq file-notify--test-remote-enabled-checked (cons t desc))
- (when desc (file-notify-rm-watch desc))))
- ;; Return result.
- (cdr file-notify--test-remote-enabled-checked))
-
-(defmacro file-notify--deftest-remote (test docstring)
- "Define ert `TEST-remote' for remote files."
- (declare (indent 1))
- `(ert-deftest ,(intern (concat (symbol-name test) "-remote")) ()
- ,docstring
- (let* ((temporary-file-directory
- file-notify-test-remote-temporary-file-directory)
- (ert-test (ert-get-test ',test)))
- (skip-unless (file-notify--test-remote-enabled))
- (tramp-cleanup-connection
- (tramp-dissect-file-name temporary-file-directory) nil 'keep-password)
- (funcall (ert-test-body ert-test)))))
-
-(ert-deftest file-notify-test00-availability ()
- "Test availability of `file-notify'."
- (skip-unless (file-notify--test-local-enabled))
- ;; Report the native library which has been used.
- (if (null (file-remote-p temporary-file-directory))
- (message "Local library: `%s'" file-notify--library)
- (message "Remote command: `%s'"
- (replace-regexp-in-string
- "<[[:digit:]]+>\\'" ""
- (process-name (cdr file-notify--test-remote-enabled-checked)))))
- (should
- (setq file-notify--test-desc
- (file-notify-add-watch temporary-file-directory '(change) 'ignore)))
-
- ;; Cleanup.
- (file-notify--test-cleanup))
-
-(file-notify--deftest-remote file-notify-test00-availability
- "Test availability of `file-notify' for remote files.")
-
-(ert-deftest file-notify-test01-add-watch ()
- "Check `file-notify-add-watch'."
- (skip-unless (file-notify--test-local-enabled))
-
- (setq file-notify--test-tmpfile (file-notify--test-make-temp-name)
- file-notify--test-tmpfile1
- (format "%s/%s" file-notify--test-tmpfile (md5 (current-time-string))))
-
- ;; Check, that different valid parameters are accepted.
- (should
- (setq file-notify--test-desc
- (file-notify-add-watch temporary-file-directory '(change) 'ignore)))
- (file-notify-rm-watch file-notify--test-desc)
- (should
- (setq file-notify--test-desc
- (file-notify-add-watch
- temporary-file-directory '(attribute-change) 'ignore)))
- (file-notify-rm-watch file-notify--test-desc)
- (should
- (setq file-notify--test-desc
- (file-notify-add-watch
- temporary-file-directory '(change attribute-change) 'ignore)))
- (file-notify-rm-watch file-notify--test-desc)
- ;; The file does not need to exist, just the upper directory.
- (should
- (setq file-notify--test-desc
- (file-notify-add-watch
- file-notify--test-tmpfile '(change attribute-change) 'ignore)))
- (file-notify-rm-watch file-notify--test-desc)
-
- ;; Check error handling.
- (should-error (file-notify-add-watch 1 2 3 4)
- :type 'wrong-number-of-arguments)
- (should
- (equal (should-error
- (file-notify-add-watch 1 2 3))
- '(wrong-type-argument 1)))
- (should
- (equal (should-error
- (file-notify-add-watch temporary-file-directory 2 3))
- '(wrong-type-argument 2)))
- (should
- (equal (should-error
- (file-notify-add-watch temporary-file-directory '(change) 3))
- '(wrong-type-argument 3)))
- ;; The upper directory of a file must exist.
- (should
- (equal (should-error
- (file-notify-add-watch
- file-notify--test-tmpfile1 '(change attribute-change) 'ignore))
- `(file-notify-error
- "Directory does not exist" ,file-notify--test-tmpfile)))
-
- ;; Cleanup.
- (file-notify--test-cleanup))
-
-(file-notify--deftest-remote file-notify-test01-add-watch
- "Check `file-notify-add-watch' for remote files.")
-
-(defun file-notify--test-event-test ()
- "Ert test function to be called by `file-notify--test-event-handler'.
-We cannot pass arguments, so we assume that `file-notify--test-event'
-is bound somewhere."
- ;; Check the descriptor.
- (should (equal (car file-notify--test-event) file-notify--test-desc))
- ;; Check the file name.
- (should
- (or (string-equal (file-notify--event-file-name file-notify--test-event)
- file-notify--test-tmpfile)
- (string-equal (directory-file-name
- (file-name-directory
- (file-notify--event-file-name file-notify--test-event)))
- file-notify--test-tmpfile)))
- ;; Check the second file name if exists.
- (when (eq (nth 1 file-notify--test-event) 'renamed)
- (should
- (string-equal
- (file-notify--event-file1-name file-notify--test-event)
- file-notify--test-tmpfile1))))
-
-(defun file-notify--test-event-handler (event)
- "Run a test over FILE-NOTIFY--TEST-EVENT.
-For later analysis, append the test result to `file-notify--test-results'
-and the event to `file-notify--test-events'."
- (let* ((file-notify--test-event event)
- (result
- (ert-run-test (make-ert-test :body 'file-notify--test-event-test))))
- ;; Do not add temporary files, this would confuse the checks.
- (unless (string-match
- (regexp-quote ".#")
- (file-notify--event-file-name file-notify--test-event))
- ;;(message "file-notify--test-event-handler %S" file-notify--test-event)
- (setq file-notify--test-events
- (append file-notify--test-events `(,file-notify--test-event))
- file-notify--test-results
- (append file-notify--test-results `(,result))))))
-
-(defun file-notify--test-make-temp-name ()
- "Create a temporary file name for test."
- (expand-file-name
- (make-temp-name "file-notify-test") temporary-file-directory))
-
-(defmacro file-notify--wait-for-events (timeout until)
- "Wait for and return file notification events until form UNTIL is true.
-TIMEOUT is the maximum time to wait for, in seconds."
- `(with-timeout (,timeout (ignore))
- (while (null ,until)
- (read-event nil nil 0.1))))
-
-(defmacro file-notify--test-with-events (events &rest body)
- "Run BODY collecting events and then compare with EVENTS.
-Don't wait longer than timeout seconds for the events to be delivered."
- (declare (indent 1))
- (let ((outer (make-symbol "outer")))
- `(let ((,outer file-notify--test-events))
- (setq file-notify--test-expected-events
- (append file-notify--test-expected-events ,events))
- (let (file-notify--test-events)
- ,@body
- (file-notify--wait-for-events
- (file-notify--test-timeout)
- (= (length ,events) (length file-notify--test-events)))
- (should (equal ,events (mapcar #'cadr file-notify--test-events)))
- (setq ,outer (append ,outer file-notify--test-events)))
- (setq file-notify--test-events ,outer))))
-
-(ert-deftest file-notify-test02-events ()
- "Check file creation/change/removal notifications."
- (skip-unless (file-notify--test-local-enabled))
- ;; Under cygwin there are so bad timings that it doesn't make sense to test.
- (skip-unless (not (eq system-type 'cygwin)))
-
- (setq file-notify--test-tmpfile (file-notify--test-make-temp-name)
- file-notify--test-tmpfile1 (file-notify--test-make-temp-name))
-
- (unwind-protect
- (progn
- ;; Check creation, change and deletion.
- (setq file-notify--test-desc
- (file-notify-add-watch
- file-notify--test-tmpfile
- '(change) 'file-notify--test-event-handler))
- (file-notify--test-with-events '(created changed deleted)
- (write-region
- "any text" nil file-notify--test-tmpfile nil 'no-message)
- (delete-file file-notify--test-tmpfile))
- ;; `file-notify-rm-watch' fires the `stopped' event. Suppress it.
- (let (file-notify--test-events)
- (file-notify-rm-watch file-notify--test-desc))
-
- ;; Check creation, change and deletion. There must be a
- ;; `stopped' event when deleting the directory. It doesn't
- ;; work for w32notify.
- (unless (eq file-notify--library 'w32notify)
- (make-directory file-notify--test-tmpfile)
- (setq file-notify--test-desc
- (file-notify-add-watch
- file-notify--test-tmpfile
- '(change) 'file-notify--test-event-handler))
- (file-notify--test-with-events
- ;; There are two `deleted' events, for the file and for
- ;; the directory.
- '(created changed deleted deleted stopped)
- (write-region
- "any text" nil (expand-file-name "foo" file-notify--test-tmpfile)
- nil 'no-message)
- (delete-directory file-notify--test-tmpfile 'recursive))
- ;; `file-notify-rm-watch' fires the `stopped' event. Suppress it.
- (let (file-notify--test-events)
- (file-notify-rm-watch file-notify--test-desc)))
-
- ;; Check copy.
- (setq file-notify--test-desc
- (file-notify-add-watch
- file-notify--test-tmpfile
- '(change) 'file-notify--test-event-handler))
- (should file-notify--test-desc)
- (file-notify--test-with-events
- ;; w32notify does not distinguish between `changed' and
- ;; `attribute-changed'.
- (if (eq file-notify--library 'w32notify)
- '(created changed changed deleted)
- '(created changed deleted))
- (write-region
- "any text" nil file-notify--test-tmpfile nil 'no-message)
- (copy-file file-notify--test-tmpfile file-notify--test-tmpfile1)
- ;; The next two events shall not be visible.
- (set-file-modes file-notify--test-tmpfile 000)
- (read-event nil nil 0.1) ; In order to distinguish the events.
- (set-file-times file-notify--test-tmpfile '(0 0))
- (delete-file file-notify--test-tmpfile)
- (delete-file file-notify--test-tmpfile1))
- ;; `file-notify-rm-watch' fires the `stopped' event. Suppress it.
- (let (file-notify--test-events)
- (file-notify-rm-watch file-notify--test-desc))
-
- ;; Check rename.
- (setq file-notify--test-desc
- (file-notify-add-watch
- file-notify--test-tmpfile
- '(change) 'file-notify--test-event-handler))
- (should file-notify--test-desc)
- (file-notify--test-with-events '(created changed renamed)
- (write-region
- "any text" nil file-notify--test-tmpfile nil 'no-message)
- (rename-file file-notify--test-tmpfile file-notify--test-tmpfile1)
- ;; After the rename, we won't get events anymore.
- (delete-file file-notify--test-tmpfile1))
- ;; `file-notify-rm-watch' fires the `stopped' event. Suppress it.
- (let (file-notify--test-events)
- (file-notify-rm-watch file-notify--test-desc))
-
- ;; Check attribute change. It doesn't work for w32notify.
- (unless (eq file-notify--library 'w32notify)
- (setq file-notify--test-desc
- (file-notify-add-watch
- file-notify--test-tmpfile
- '(attribute-change) 'file-notify--test-event-handler))
- (file-notify--test-with-events
- (if (file-remote-p temporary-file-directory)
- ;; In the remote case, `write-region' raises also an
- ;; `attribute-changed' event.
- '(attribute-changed attribute-changed attribute-changed)
- '(attribute-changed attribute-changed))
- ;; We must use short delays between the operations.
- ;; Otherwise, not all events arrive us in the remote case.
- (write-region
- "any text" nil file-notify--test-tmpfile nil 'no-message)
- (read-event nil nil 0.1)
- (set-file-modes file-notify--test-tmpfile 000)
- (read-event nil nil 0.1)
- (set-file-times file-notify--test-tmpfile '(0 0))
- (read-event nil nil 0.1)
- (delete-file file-notify--test-tmpfile))
- ;; `file-notify-rm-watch' fires the `stopped' event. Suppress it.
- (let (file-notify--test-events)
- (file-notify-rm-watch file-notify--test-desc)))
-
- ;; Check the global sequence again just to make sure that
- ;; `file-notify--test-events' has been set correctly.
- (should (equal (mapcar #'cadr file-notify--test-events)
- file-notify--test-expected-events))
- (should file-notify--test-results)
- (dolist (result file-notify--test-results)
- (when (ert-test-failed-p result)
- (ert-fail
- (cadr (ert-test-result-with-condition-condition result))))))
-
- ;; Cleanup.
- (file-notify--test-cleanup)))
-
-(file-notify--deftest-remote file-notify-test02-events
- "Check file creation/change/removal notifications for remote files.")
-
-(require 'autorevert)
-(setq auto-revert-notify-exclude-dir-regexp "nothing-to-be-excluded"
- auto-revert-remote-files t
- auto-revert-stop-on-user-input nil)
-
-(ert-deftest file-notify-test03-autorevert ()
- "Check autorevert via file notification."
- (skip-unless (file-notify--test-local-enabled))
- ;; `auto-revert-buffers' runs every 5". And we must wait, until the
- ;; file has been reverted.
- (let ((timeout (if (file-remote-p temporary-file-directory) 60 10))
- buf)
- (unwind-protect
- (progn
- (setq file-notify--test-tmpfile (file-notify--test-make-temp-name))
-
- (write-region
- "any text" nil file-notify--test-tmpfile nil 'no-message)
- (setq buf (find-file-noselect file-notify--test-tmpfile))
- (with-current-buffer buf
- (should (string-equal (buffer-string) "any text"))
- ;; `buffer-stale--default-function' checks for
- ;; `verify-visited-file-modtime'. We must ensure that it
- ;; returns nil.
- (sleep-for 1)
- (auto-revert-mode 1)
-
- ;; `auto-revert-buffers' runs every 5".
- (with-timeout (timeout (ignore))
- (while (null auto-revert-notify-watch-descriptor)
- (sleep-for 1)))
-
- ;; Check, that file notification has been used.
- (should auto-revert-mode)
- (should auto-revert-use-notify)
- (should auto-revert-notify-watch-descriptor)
-
- ;; Modify file. We wait for a second, in order to have
- ;; another timestamp.
- (with-current-buffer (get-buffer-create "*Messages*")
- (narrow-to-region (point-max) (point-max)))
- (sleep-for 1)
- (write-region
- "another text" nil file-notify--test-tmpfile nil 'no-message)
-
- ;; Check, that the buffer has been reverted.
- (with-current-buffer (get-buffer-create "*Messages*")
- (file-notify--wait-for-events
- timeout
- (string-match
- (format-message "Reverting buffer `%s'." (buffer-name buf))
- (buffer-string))))
- (should (string-match "another text" (buffer-string)))
-
- ;; Stop file notification. Autorevert shall still work via polling.
- (file-notify-rm-watch auto-revert-notify-watch-descriptor)
- (file-notify--wait-for-events
- timeout (null auto-revert-use-notify))
- (should-not auto-revert-use-notify)
- (should-not auto-revert-notify-watch-descriptor)
-
- ;; Modify file. We wait for two seconds, in order to have
- ;; another timestamp. One second seems to be too short.
- (with-current-buffer (get-buffer-create "*Messages*")
- (narrow-to-region (point-max) (point-max)))
- (sleep-for 2)
- (write-region
- "foo bla" nil file-notify--test-tmpfile nil 'no-message)
-
- ;; Check, that the buffer has been reverted.
- (with-current-buffer (get-buffer-create "*Messages*")
- (file-notify--wait-for-events
- timeout
- (string-match
- (format-message "Reverting buffer `%s'." (buffer-name buf))
- (buffer-string))))
- (should (string-match "foo bla" (buffer-string)))))
-
- ;; Cleanup.
- (with-current-buffer "*Messages*" (widen))
- (ignore-errors (kill-buffer buf))
- (file-notify--test-cleanup))))
-
-(file-notify--deftest-remote file-notify-test03-autorevert
- "Check autorevert via file notification for remote files.")
-
-(ert-deftest file-notify-test04-file-validity ()
- "Check `file-notify-valid-p' for files."
- (skip-unless (file-notify--test-local-enabled))
- ;; Under cygwin there are so bad timings that it doesn't make sense to test.
- (skip-unless (not (eq system-type 'cygwin)))
-
- (unwind-protect
- (progn
- (setq file-notify--test-tmpfile (file-notify--test-make-temp-name)
- file-notify--test-desc
- (file-notify-add-watch
- file-notify--test-tmpfile
- '(change) #'file-notify--test-event-handler))
- (file-notify--test-with-events '(created changed deleted)
- (should (file-notify-valid-p file-notify--test-desc))
- (write-region
- "any text" nil file-notify--test-tmpfile nil 'no-message)
- (delete-file file-notify--test-tmpfile))
- ;; After deleting the file, the descriptor is still valid.
- (should (file-notify-valid-p file-notify--test-desc))
- ;; After removing the watch, the descriptor must not be valid
- ;; anymore.
- (file-notify-rm-watch file-notify--test-desc)
- (should-not (file-notify-valid-p file-notify--test-desc)))
-
- ;; Cleanup.
- (file-notify--test-cleanup))
-
- (unwind-protect
- ;; The batch-mode operation of w32notify is fragile (there's no
- ;; input threads to send the message to).
- ;(unless (and noninteractive (eq file-notify--library 'w32notify))
- (unless (eq file-notify--library 'w32notify)
- (let ((temporary-file-directory
- (make-temp-file "file-notify-test-parent" t)))
- (setq file-notify--test-tmpfile (file-notify--test-make-temp-name)
- file-notify--test-desc
- (file-notify-add-watch
- file-notify--test-tmpfile
- '(change) #'file-notify--test-event-handler))
- (file-notify--test-with-events '(created changed deleted stopped)
- (should (file-notify-valid-p file-notify--test-desc))
- (write-region
- "any text" nil file-notify--test-tmpfile nil 'no-message)
- (delete-directory temporary-file-directory t))
- ;; After deleting the parent directory, the descriptor must
- ;; not be valid anymore.
- (should-not (file-notify-valid-p file-notify--test-desc))))
-
- ;; Cleanup.
- (file-notify--test-cleanup)))
-
-(file-notify--deftest-remote file-notify-test04-file-validity
- "Check `file-notify-valid-p' via file notification for remote files.")
-
-(ert-deftest file-notify-test05-dir-validity ()
- "Check `file-notify-valid-p' for directories."
- (skip-unless (file-notify--test-local-enabled))
-
- (unwind-protect
- (progn
- (setq file-notify--test-tmpfile
- (file-name-as-directory (file-notify--test-make-temp-name)))
- (make-directory file-notify--test-tmpfile)
- (setq file-notify--test-desc
- (file-notify-add-watch
- file-notify--test-tmpfile
- '(change) #'file-notify--test-event-handler))
- (should (file-notify-valid-p file-notify--test-desc))
- ;; After removing the watch, the descriptor must not be valid
- ;; anymore.
- (file-notify-rm-watch file-notify--test-desc)
- (file-notify--wait-for-events
- (file-notify--test-timeout)
- (not (file-notify-valid-p file-notify--test-desc)))
- (should-not (file-notify-valid-p file-notify--test-desc)))
-
- ;; Cleanup.
- (file-notify--test-cleanup))
-
- (unwind-protect
- ;; The batch-mode operation of w32notify is fragile (there's no
- ;; input threads to send the message to).
- (unless (and noninteractive (eq file-notify--library 'w32notify))
- (setq file-notify--test-tmpfile
- (file-name-as-directory (file-notify--test-make-temp-name)))
- (make-directory file-notify--test-tmpfile)
- (setq file-notify--test-desc
- (file-notify-add-watch
- file-notify--test-tmpfile
- '(change) #'file-notify--test-event-handler))
- (should (file-notify-valid-p file-notify--test-desc))
- ;; After deleting the directory, the descriptor must not be
- ;; valid anymore.
- (delete-directory file-notify--test-tmpfile t)
- (file-notify--wait-for-events
- (file-notify--test-timeout)
- (not (file-notify-valid-p file-notify--test-desc)))
- (should-not (file-notify-valid-p file-notify--test-desc)))
-
- ;; Cleanup.
- (file-notify--test-cleanup)))
-
-(file-notify--deftest-remote file-notify-test05-dir-validity
- "Check `file-notify-valid-p' via file notification for remote directories.")
-
-(defun file-notify-test-all (&optional interactive)
- "Run all tests for \\[file-notify]."
- (interactive "p")
- (if interactive
- (ert-run-tests-interactively "^file-notify-")
- (ert-run-tests-batch "^file-notify-")))
-
-;; TODO:
-
-;; * For w32notify, no stopped events arrive when a directory is removed.
-;; * Try to handle arriving events under cygwin reliably.
-
-(provide 'file-notify-tests)
-;;; file-notify-tests.el ends here
diff --git a/test/automated/files.el b/test/automated/files.el
deleted file mode 100644
index 0522e0c5c79..00000000000
--- a/test/automated/files.el
+++ /dev/null
@@ -1,172 +0,0 @@
-;;; files.el --- tests for file handling.
-
-;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
-
-;; 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)
-
-;; Set to t if the local variable was set, `query' if the query was
-;; triggered.
-(defvar files-test-result nil)
-
-(defvar files-test-safe-result nil)
-(put 'files-test-safe-result 'safe-local-variable 'booleanp)
-
-(defun files-test-fun1 ()
- (setq files-test-result t))
-
-;; Test combinations:
-;; `enable-local-variables' t, nil, :safe, :all, or something else.
-;; `enable-local-eval' t, nil, or something else.
-
-(defvar files-test-local-variable-data
- ;; Unsafe eval form
- '((("eval: (files-test-fun1)")
- (t t (eq files-test-result t))
- (t nil (eq files-test-result nil))
- (t maybe (eq files-test-result 'query))
- (nil t (eq files-test-result nil))
- (nil nil (eq files-test-result nil))
- (nil maybe (eq files-test-result nil))
- (:safe t (eq files-test-result nil))
- (:safe nil (eq files-test-result nil))
- (:safe maybe (eq files-test-result nil))
- (:all t (eq files-test-result t))
- (:all nil (eq files-test-result nil))
- (:all maybe (eq files-test-result t)) ; This combination is ambiguous.
- (maybe t (eq files-test-result 'query))
- (maybe nil (eq files-test-result nil))
- (maybe maybe (eq files-test-result 'query)))
- ;; Unsafe local variable value
- (("files-test-result: t")
- (t t (eq files-test-result 'query))
- (t nil (eq files-test-result 'query))
- (t maybe (eq files-test-result 'query))
- (nil t (eq files-test-result nil))
- (nil nil (eq files-test-result nil))
- (nil maybe (eq files-test-result nil))
- (:safe t (eq files-test-result nil))
- (:safe nil (eq files-test-result nil))
- (:safe maybe (eq files-test-result nil))
- (:all t (eq files-test-result t))
- (:all nil (eq files-test-result t))
- (:all maybe (eq files-test-result t))
- (maybe t (eq files-test-result 'query))
- (maybe nil (eq files-test-result 'query))
- (maybe maybe (eq files-test-result 'query)))
- ;; Safe local variable
- (("files-test-safe-result: t")
- (t t (eq files-test-safe-result t))
- (t nil (eq files-test-safe-result t))
- (t maybe (eq files-test-safe-result t))
- (nil t (eq files-test-safe-result nil))
- (nil nil (eq files-test-safe-result nil))
- (nil maybe (eq files-test-safe-result nil))
- (:safe t (eq files-test-safe-result t))
- (:safe nil (eq files-test-safe-result t))
- (:safe maybe (eq files-test-safe-result t))
- (:all t (eq files-test-safe-result t))
- (:all nil (eq files-test-safe-result t))
- (:all maybe (eq files-test-safe-result t))
- (maybe t (eq files-test-result 'query))
- (maybe nil (eq files-test-result 'query))
- (maybe maybe (eq files-test-result 'query)))
- ;; Safe local variable with unsafe value
- (("files-test-safe-result: 1")
- (t t (eq files-test-result 'query))
- (t nil (eq files-test-result 'query))
- (t maybe (eq files-test-result 'query))
- (nil t (eq files-test-safe-result nil))
- (nil nil (eq files-test-safe-result nil))
- (nil maybe (eq files-test-safe-result nil))
- (:safe t (eq files-test-safe-result nil))
- (:safe nil (eq files-test-safe-result nil))
- (:safe maybe (eq files-test-safe-result nil))
- (:all t (eq files-test-safe-result 1))
- (:all nil (eq files-test-safe-result 1))
- (:all maybe (eq files-test-safe-result 1))
- (maybe t (eq files-test-result 'query))
- (maybe nil (eq files-test-result 'query))
- (maybe maybe (eq files-test-result 'query))))
- "List of file-local variable tests.
-Each list element should have the form
-
- (LOCAL-VARS-LIST . TEST-LIST)
-
-where LOCAL-VARS-LISTS should be a list of local variable
-definitions (strings) and TEST-LIST is a list of tests to
-perform. Each entry of TEST-LIST should have the form
-
- (ENABLE-LOCAL-VARIABLES ENABLE-LOCAL-EVAL FORM)
-
-where ENABLE-LOCAL-VARIABLES is the value to assign to
-`enable-local-variables', ENABLE-LOCAL-EVAL is the value to
-assign to `enable-local-eval', and FORM is a desired `should'
-form.")
-
-(defun file-test--do-local-variables-test (str test-settings)
- (with-temp-buffer
- (insert str)
- (setq files-test-result nil
- files-test-safe-result nil)
- (let ((enable-local-variables (nth 0 test-settings))
- (enable-local-eval (nth 1 test-settings))
- ;; Prevent any dir-locals file interfering with the tests.
- (enable-dir-local-variables nil)
- (files-test-queried nil))
- (hack-local-variables)
- (eval (nth 2 test-settings)))))
-
-(ert-deftest files-test-local-variables ()
- "Test the file-local variables implementation."
- (unwind-protect
- (progn
- (defadvice hack-local-variables-confirm (around files-test activate)
- (setq files-test-result 'query)
- nil)
- (dolist (test files-test-local-variable-data)
- (let ((str (concat "text\n\n;; Local Variables:\n;; "
- (mapconcat 'identity (car test) "\n;; ")
- "\n;; End:\n")))
- (dolist (subtest (cdr test))
- (should (file-test--do-local-variables-test str subtest))))))
- (ad-disable-advice 'hack-local-variables-confirm 'around 'files-test)))
-
-(defvar files-test-bug-18141-file
- (expand-file-name "data/files-bug18141.el.gz" (getenv "EMACS_TEST_DIRECTORY"))
- "Test file for bug#18141.")
-
-(ert-deftest files-test-bug-18141 ()
- "Test for http://debbugs.gnu.org/18141 ."
- (skip-unless (executable-find "gzip"))
- (let ((tempfile (make-temp-file "files-test-bug-18141" nil ".gz")))
- (unwind-protect
- (progn
- (copy-file files-test-bug-18141-file tempfile t)
- (with-current-buffer (find-file-noselect tempfile)
- (set-buffer-modified-p t)
- (save-buffer)
- (should (eq buffer-file-coding-system 'iso-2022-7bit-unix))))
- (delete-file tempfile))))
-
-
-;; Stop the above "Local Var..." confusing Emacs.
-
-
-;;; files.el ends here
diff --git a/test/automated/finalizer-tests.el b/test/automated/finalizer-tests.el
deleted file mode 100644
index 218df05e426..00000000000
--- a/test/automated/finalizer-tests.el
+++ /dev/null
@@ -1,33 +0,0 @@
-;;; finalizer-tests.el --- Finalizer tests -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Daniel Colascione <dancol@dancol.org>
-;; Keywords:
-
-;; 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/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'ert)
-(require 'cl-lib)
-
-(ert-deftest finalizer-object-type ()
- (should (equal (type-of (make-finalizer nil)) 'finalizer)))
diff --git a/test/automated/flymake-tests.el b/test/automated/flymake-tests.el
deleted file mode 100644
index 11231bc3f7a..00000000000
--- a/test/automated/flymake-tests.el
+++ /dev/null
@@ -1,80 +0,0 @@
-;;; flymake-tests.el --- Test suite for flymake
-
-;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
-
-;; Author: Eduard Wiebe <usenet@pusto.de>
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-(require 'ert)
-(require 'flymake)
-
-(defvar flymake-tests-data-directory
- (expand-file-name "data/flymake" (getenv "EMACS_TEST_DIRECTORY"))
- "Directory containing flymake test data.")
-
-
-;; Warning predicate
-(defun flymake-tests--current-face (file predicate)
- (let ((buffer (find-file-noselect
- (expand-file-name file flymake-tests-data-directory)))
- (process-environment (cons "LC_ALL=C" process-environment))
- (i 0))
- (unwind-protect
- (with-current-buffer buffer
- (setq-local flymake-warning-predicate predicate)
- (goto-char (point-min))
- (flymake-mode 1)
- ;; Weirdness here... http://debbugs.gnu.org/17647#25
- (while (and flymake-is-running (< (setq i (1+ i)) 10))
- (sleep-for (+ 0.5 flymake-no-changes-timeout)))
- (flymake-goto-next-error)
- (face-at-point))
- (and buffer (let (kill-buffer-query-functions) (kill-buffer buffer))))))
-
-(ert-deftest warning-predicate-rx-gcc ()
- "Test GCC warning via regexp predicate."
- (skip-unless (and (executable-find "gcc") (executable-find "make")))
- (should (eq 'flymake-warnline
- (flymake-tests--current-face "test.c" "^[Ww]arning"))))
-
-(ert-deftest warning-predicate-function-gcc ()
- "Test GCC warning via function predicate."
- (skip-unless (and (executable-find "gcc") (executable-find "make")))
- (should (eq 'flymake-warnline
- (flymake-tests--current-face "test.c"
- (lambda (msg) (string-match "^[Ww]arning" msg))))))
-
-(ert-deftest warning-predicate-rx-perl ()
- "Test perl warning via regular expression predicate."
- (skip-unless (executable-find "perl"))
- (should (eq 'flymake-warnline
- (flymake-tests--current-face "test.pl" "^Scalar value"))))
-
-(ert-deftest warning-predicate-function-perl ()
- "Test perl warning via function predicate."
- (skip-unless (executable-find "perl"))
- (should (eq 'flymake-warnline
- (flymake-tests--current-face
- "test.pl"
- (lambda (msg) (string-match "^Scalar value" msg))))))
-
-(provide 'flymake-tests)
-
-;;; flymake.el ends here
diff --git a/test/automated/fns-tests.el b/test/automated/fns-tests.el
deleted file mode 100644
index b5222db3ca1..00000000000
--- a/test/automated/fns-tests.el
+++ /dev/null
@@ -1,193 +0,0 @@
-;;; fns-tests.el --- tests for src/fns.c
-
-;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
-
-;; This file is part of GNU Emacs.
-
-;; This program 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.
-;;
-;; This program 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 this program. If not, see `http://www.gnu.org/licenses/'.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'cl-lib)
-(eval-when-compile (require 'cl))
-
-(ert-deftest fns-tests-reverse ()
- (should-error (reverse))
- (should-error (reverse 1))
- (should-error (reverse (make-char-table 'foo)))
- (should (equal [] (reverse [])))
- (should (equal [0] (reverse [0])))
- (should (equal [1 2 3 4] (reverse (reverse [1 2 3 4]))))
- (should (equal '(a b c d) (reverse (reverse '(a b c d)))))
- (should (equal "xyzzy" (reverse (reverse "xyzzy"))))
- (should (equal "こんにちは / コンニチハ" (reverse (reverse "こんにちは / コンニチハ")))))
-
-(ert-deftest fns-tests-nreverse ()
- (should-error (nreverse))
- (should-error (nreverse 1))
- (should-error (nreverse (make-char-table 'foo)))
- (should (equal (nreverse "xyzzy") "yzzyx"))
- (let ((A []))
- (nreverse A)
- (should (equal A [])))
- (let ((A [0]))
- (nreverse A)
- (should (equal A [0])))
- (let ((A [1 2 3 4]))
- (nreverse A)
- (should (equal A [4 3 2 1])))
- (let ((A [1 2 3 4]))
- (nreverse A)
- (nreverse A)
- (should (equal A [1 2 3 4])))
- (let* ((A [1 2 3 4])
- (B (nreverse (nreverse A))))
- (should (equal A B))))
-
-(ert-deftest fns-tests-reverse-bool-vector ()
- (let ((A (make-bool-vector 10 nil)))
- (dotimes (i 5) (aset A i t))
- (should (equal [nil nil nil nil nil t t t t t] (vconcat (reverse A))))
- (should (equal A (reverse (reverse A))))))
-
-(ert-deftest fns-tests-nreverse-bool-vector ()
- (let ((A (make-bool-vector 10 nil)))
- (dotimes (i 5) (aset A i t))
- (nreverse A)
- (should (equal [nil nil nil nil nil t t t t t] (vconcat A)))
- (should (equal [t t t t t nil nil nil nil nil] (vconcat (nreverse A))))))
-
-(ert-deftest fns-tests-compare-strings ()
- (should-error (compare-strings))
- (should-error (compare-strings "xyzzy" "xyzzy"))
- (should (= (compare-strings "xyzzy" 0 10 "zyxxy" 0 5) -1))
- (should-error (compare-strings "xyzzy" 0 5 "zyxxy" -1 2))
- (should-error (compare-strings "xyzzy" 'foo nil "zyxxy" 0 1))
- (should-error (compare-strings "xyzzy" 0 'foo "zyxxy" 2 3))
- (should-error (compare-strings "xyzzy" 0 2 "zyxxy" 'foo 3))
- (should-error (compare-strings "xyzzy" nil 3 "zyxxy" 4 'foo))
- (should (eq (compare-strings "" nil nil "" nil nil) t))
- (should (eq (compare-strings "" 0 0 "" 0 0) t))
- (should (eq (compare-strings "test" nil nil "test" nil nil) t))
- (should (eq (compare-strings "test" nil nil "test" nil nil t) t))
- (should (eq (compare-strings "test" nil nil "test" nil nil nil) t))
- (should (eq (compare-strings "Test" nil nil "test" nil nil t) t))
- (should (= (compare-strings "Test" nil nil "test" nil nil) -1))
- (should (= (compare-strings "Test" nil nil "test" nil nil) -1))
- (should (= (compare-strings "test" nil nil "Test" nil nil) 1))
- (should (= (compare-strings "foobaz" nil nil "barbaz" nil nil) 1))
- (should (= (compare-strings "barbaz" nil nil "foobar" nil nil) -1))
- (should (= (compare-strings "foobaz" nil nil "farbaz" nil nil) 2))
- (should (= (compare-strings "farbaz" nil nil "foobar" nil nil) -2))
- (should (eq (compare-strings "abcxyz" 0 2 "abcprq" 0 2) t))
- (should (eq (compare-strings "abcxyz" 0 -3 "abcprq" 0 -3) t))
- (should (= (compare-strings "abcxyz" 0 6 "abcprq" 0 6) 4))
- (should (= (compare-strings "abcprq" 0 6 "abcxyz" 0 6) -4))
- (should (eq (compare-strings "xyzzy" -3 4 "azza" -3 3) t))
- (should (eq (compare-strings "こんにちはコンニチハ" nil nil "こんにちはコンニチハ" nil nil) t))
- (should (= (compare-strings "んにちはコンニチハこ" nil nil "こんにちはコンニチハ" nil nil) 1))
- (should (= (compare-strings "こんにちはコンニチハ" nil nil "んにちはコンニチハこ" nil nil) -1)))
-
-(defun fns-tests--collate-enabled-p ()
- "Check whether collation functions are enabled."
- (and
- ;; When there is no collation library, collation functions fall back
- ;; to their lexicographic counterparts. We don't need to test then.
- (not (ignore-errors (string-collate-equalp "" "" t)))
- ;; We use a locale, which might not be installed. Check it.
- (ignore-errors
- (string-collate-equalp
- "" "" (if (eq system-type 'windows-nt) "enu_USA" "en_US.UTF-8")))))
-
-(ert-deftest fns-tests-collate-strings ()
- (skip-unless (fns-tests--collate-enabled-p))
-
- (should (string-collate-equalp "xyzzy" "xyzzy"))
- (should-not (string-collate-equalp "xyzzy" "XYZZY"))
-
- ;; In POSIX or C locales, collation order is lexicographic.
- (should (string-collate-lessp "XYZZY" "xyzzy" "POSIX"))
- ;; In a language specific locale, collation order is different.
- (should (string-collate-lessp
- "xyzzy" "XYZZY"
- (if (eq system-type 'windows-nt) "enu_USA" "en_US.UTF-8")))
-
- ;; Ignore case.
- (should (string-collate-equalp "xyzzy" "XYZZY" nil t))
-
- ;; Locale must be valid.
- (should-error (string-collate-equalp "xyzzy" "xyzzy" "en_DE.UTF-8")))
-
-;; There must be a check for valid codepoints. (Check not implemented yet)
-; (should-error
-; (string-collate-equalp (string ?\x00110000) (string ?\x00110000)))
-;; Invalid UTF-8 sequences shall be indicated. How to create such strings?
-
-(ert-deftest fns-tests-sort ()
- (should (equal (sort '(9 5 2 -1 5 3 8 7 4) (lambda (x y) (< x y)))
- '(-1 2 3 4 5 5 7 8 9)))
- (should (equal (sort '(9 5 2 -1 5 3 8 7 4) (lambda (x y) (> x y)))
- '(9 8 7 5 5 4 3 2 -1)))
- (should (equal (sort '[9 5 2 -1 5 3 8 7 4] (lambda (x y) (< x y)))
- [-1 2 3 4 5 5 7 8 9]))
- (should (equal (sort '[9 5 2 -1 5 3 8 7 4] (lambda (x y) (> x y)))
- [9 8 7 5 5 4 3 2 -1]))
- (should (equal
- (sort
- (vector
- '(8 . "xxx") '(9 . "aaa") '(8 . "bbb") '(9 . "zzz")
- '(9 . "ppp") '(8 . "ttt") '(8 . "eee") '(9 . "fff"))
- (lambda (x y) (< (car x) (car y))))
- [(8 . "xxx") (8 . "bbb") (8 . "ttt") (8 . "eee")
- (9 . "aaa") (9 . "zzz") (9 . "ppp") (9 . "fff")])))
-
-(ert-deftest fns-tests-collate-sort ()
- ;; See https://lists.gnu.org/archive/html/emacs-devel/2015-10/msg02505.html.
- :expected-result (if (eq system-type 'cygwin) :failed :passed)
- (skip-unless (fns-tests--collate-enabled-p))
-
- ;; Punctuation and whitespace characters are relevant for POSIX.
- (should
- (equal
- (sort '("11" "12" "1 1" "1 2" "1.1" "1.2")
- (lambda (a b) (string-collate-lessp a b "POSIX")))
- '("1 1" "1 2" "1.1" "1.2" "11" "12")))
- ;; Punctuation and whitespace characters are not taken into account
- ;; for collation in other locales.
- (should
- (equal
- (sort '("11" "12" "1 1" "1 2" "1.1" "1.2")
- (lambda (a b)
- (let ((w32-collate-ignore-punctuation t))
- (string-collate-lessp
- a b (if (eq system-type 'windows-nt) "enu_USA" "en_US.UTF-8")))))
- '("11" "1 1" "1.1" "12" "1 2" "1.2")))
-
- ;; Diacritics are different letters for POSIX, they sort lexicographical.
- (should
- (equal
- (sort '("Ævar" "Agustín" "Adrian" "Eli")
- (lambda (a b) (string-collate-lessp a b "POSIX")))
- '("Adrian" "Agustín" "Eli" "Ævar")))
- ;; Diacritics are sorted between similar letters for other locales.
- (should
- (equal
- (sort '("Ævar" "Agustín" "Adrian" "Eli")
- (lambda (a b)
- (let ((w32-collate-ignore-punctuation t))
- (string-collate-lessp
- a b (if (eq system-type 'windows-nt) "enu_USA" "en_US.UTF-8")))))
- '("Adrian" "Ævar" "Agustín" "Eli"))))
diff --git a/test/automated/font-parse-tests.el b/test/automated/font-parse-tests.el
deleted file mode 100644
index e2c51e6bfde..00000000000
--- a/test/automated/font-parse-tests.el
+++ /dev/null
@@ -1,165 +0,0 @@
-;;; font-parse-tests.el --- Test suite for font parsing.
-
-;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
-
-;; Author: Chong Yidong <cyd@stupidchicken.com>
-;; Keywords: internal
-;; Human-Keywords: 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/>.
-
-;;; Commentary:
-
-;; Type M-x test-font-parse RET to generate the test buffer.
-
-;;; Code:
-
-(require 'ert)
-
-(defvar font-parse-tests--data
- `((" " ,(intern " ") nil nil nil nil)
- ("Monospace" Monospace nil nil nil nil)
- ("Foo1" Foo1 nil nil nil nil)
- ("12" nil 12.0 nil nil nil)
- ("12 " ,(intern "12 ") nil nil nil nil)
- ;; Fontconfig format
- ("Foo:" Foo nil nil nil nil)
- ("Foo-8" Foo 8.0 nil nil nil)
- ("Foo-18:" Foo 18.0 nil nil nil)
- ("Foo-18:light" Foo 18.0 light nil nil)
- ("Foo 10:weight=bold" ,(intern "Foo 10") nil bold nil nil)
- ("Foo-12:weight=bold" Foo 12.0 bold nil nil)
- ("Foo 8-20:slant=oblique" ,(intern "Foo 8") 20.0 nil oblique nil)
- ("Foo:light:roman" Foo nil light roman nil)
- ("Foo:italic:roman" Foo nil nil roman nil)
- ("Foo 12:light:oblique" ,(intern "Foo 12") nil light oblique nil)
- ("Foo-12:demibold:oblique" Foo 12.0 demibold oblique nil)
- ("Foo:black:proportional" Foo nil black nil 0)
- ("Foo-10:black:proportional" Foo 10.0 black nil 0)
- ("Foo:weight=normal" Foo nil normal nil nil)
- ("Foo:weight=bold" Foo nil bold nil nil)
- ("Foo:weight=bold:slant=italic" Foo nil bold italic)
- ("Foo:weight=bold:slant=italic:mono" Foo nil bold italic 100)
- ("Foo-10:demibold:slant=normal" Foo 10.0 demibold normal nil)
- ("Foo 11-16:oblique:weight=bold" ,(intern "Foo 11") 16.0 bold oblique nil)
- ("Foo:oblique:randomprop=randomtag:weight=bold" Foo nil bold oblique nil)
- ("Foo:randomprop=randomtag:bar=baz" Foo nil nil nil nil)
- ("Foo Book Light:bar=baz" ,(intern "Foo Book Light") nil nil nil nil)
- ("Foo Book Light 10:bar=baz" ,(intern "Foo Book Light 10") nil nil nil nil)
- ("Foo Book Light-10:bar=baz" ,(intern "Foo Book Light") 10.0 nil nil nil)
- ;; GTK format
- ("Oblique" nil nil nil oblique nil)
- ("Bold 17" nil 17.0 bold nil nil)
- ("17 Bold" ,(intern "17") nil bold nil nil)
- ("Book Oblique 2" nil 2.0 book oblique nil)
- ("Bar 7" Bar 7.0 nil nil nil)
- ("Bar Ultra-Light" Bar nil ultra-light nil nil)
- ("Bar Light 8" Bar 8.0 light nil nil)
- ("Bar Book Medium 9" Bar 9.0 medium nil nil)
- ("Bar Semi-Bold Italic 10" Bar 10.0 semi-bold italic nil)
- ("Bar Semi-Condensed Bold Italic 11" Bar 11.0 bold italic nil)
- ("Foo 10 11" ,(intern "Foo 10") 11.0 nil nil nil)
- ("Foo 1985 Book" ,(intern "Foo 1985") nil book nil nil)
- ("Foo 1985 A Book" ,(intern "Foo 1985 A") nil book nil nil)
- ("Foo 1 Book 12" ,(intern "Foo 1") 12.0 book nil nil)
- ("Foo A Book 12 A" ,(intern "Foo A Book 12 A") nil nil nil nil)
- ("Foo 1985 Book 12 Oblique" ,(intern "Foo 1985 Book 12") nil nil oblique nil)
- ("Foo 1985 Book 12 Italic 10" ,(intern "Foo 1985 Book 12") 10.0 nil italic nil)
- ("Foo Book Bar 6 Italic" ,(intern "Foo Book Bar 6") nil nil italic nil)
- ("Foo Book Bar Bold" ,(intern "Foo Book Bar") nil bold nil nil))
- "List of font names parse data.
-Each element should have the form
- (NAME FAMILY SIZE WEIGHT SLANT SPACING)
-where NAME is the name to parse, and the remainder are the
-expected font properties from parsing NAME.")
-
-(defun font-parse-check (name prop expected)
- (let ((result (font-get (font-spec :name name) prop)))
- (if (and (symbolp result) (symbolp expected))
- (eq result expected)
- (equal result expected))))
-
-(put 'font-parse-check 'ert-explainer 'font-parse-explain)
-
-(defun font-parse-explain (name prop expected)
- (let ((result (font-get (font-spec :name name) prop))
- (propname (symbol-name prop)))
- (format "Parsing `%s': expected %s `%s', got `%s'."
- name (substring propname 1) expected
- (font-get (font-spec :name name) prop))))
-
-(ert-deftest font-parse-tests ()
- "Test parsing of Fontconfig-style and GTK-style font names."
- (dolist (test font-parse-tests--data)
- (let* ((name (nth 0 test)))
- (should (font-parse-check name :family (nth 1 test)))
- (should (font-parse-check name :size (nth 2 test)))
- (should (font-parse-check name :weight (nth 3 test)))
- (should (font-parse-check name :slant (nth 4 test)))
- (should (font-parse-check name :spacing (nth 5 test))))))
-
-
-(defun test-font-parse ()
- "Test font name parsing."
- (interactive)
- (switch-to-buffer (generate-new-buffer "*Font Pase Test*"))
- (setq show-trailing-whitespace nil)
- (let ((pass-face '((t :foreground "green")))
- (fail-face '((t :foreground "red"))))
- (dolist (test font-parse-tests--data)
- (let* ((name (nth 0 test))
- (fs (font-spec :name name))
- (family (font-get fs :family))
- (size (font-get fs :size))
- (weight (font-get fs :weight))
- (slant (font-get fs :slant))
- (spacing (font-get fs :spacing)))
- (insert name)
- (if (> (current-column) 20)
- (insert "\n"))
- (indent-to-column 21)
- (insert (propertize (symbol-name family)
- 'face (if (eq family (nth 1 test))
- pass-face
- fail-face)))
- (indent-to-column 40)
- (insert (propertize (format "%s" size)
- 'face (if (equal size (nth 2 test))
- pass-face
- fail-face)))
- (indent-to-column 48)
- (insert (propertize (format "%s" weight)
- 'face (if (eq weight (nth 3 test))
- pass-face
- fail-face)))
- (indent-to-column 60)
- (insert (propertize (format "%s" slant)
- 'face (if (eq slant (nth 4 test))
- pass-face
- fail-face)))
- (indent-to-column 69)
- (insert (propertize (format "%s" spacing)
- 'face (if (eq spacing (nth 5 test))
- pass-face
- fail-face)))
- (insert "\n"))))
- (goto-char (point-min)))
-
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
-
-;;; font-parse-tests.el ends here.
diff --git a/test/automated/generator-tests.el b/test/automated/generator-tests.el
deleted file mode 100644
index 96a68d1b9c1..00000000000
--- a/test/automated/generator-tests.el
+++ /dev/null
@@ -1,284 +0,0 @@
-;;; generator-tests.el --- Testing generators -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Daniel Colascione <dancol@dancol.org>
-;; Keywords:
-
-;; 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/>.
-
-;;; Commentary:
-
-(require 'generator)
-(require 'ert)
-(require 'cl-lib)
-
-(defun generator-list-subrs ()
- (cl-loop for x being the symbols
- when (and (fboundp x)
- (cps--special-form-p (symbol-function x)))
- collect x))
-
-(defmacro cps-testcase (name &rest body)
- "Perform a simple test of the continuation-transforming code.
-
-`cps-testcase' defines an ERT testcase called NAME that evaluates
-BODY twice: once using ordinary `eval' and once using
-lambda-generators. The test ensures that the two forms produce
-identical output.
-"
- `(progn
- (ert-deftest ,name ()
- (should
- (equal
- (funcall (lambda () ,@body))
- (iter-next
- (funcall
- (iter-lambda () (iter-yield (progn ,@body))))))))
- (ert-deftest ,(intern (format "%s-noopt" name)) ()
- (should
- (equal
- (funcall (lambda () ,@body))
- (iter-next
- (funcall
- (let ((cps-inhibit-atomic-optimization t))
- (iter-lambda () (iter-yield (progn ,@body)))))))))))
-
-(put 'cps-testcase 'lisp-indent-function 1)
-
-(defvar *cps-test-i* nil)
-(defun cps-get-test-i ()
- *cps-test-i*)
-
-(cps-testcase cps-simple-1 (progn 1 2 3))
-(cps-testcase cps-empty-progn (progn))
-(cps-testcase cps-inline-not-progn (inline 1 2 3))
-(cps-testcase cps-prog1-a (prog1 1 2 3))
-(cps-testcase cps-prog1-b (prog1 1))
-(cps-testcase cps-prog1-c (prog2 1 2 3))
-(cps-testcase cps-quote (progn 'hello))
-(cps-testcase cps-function (progn #'hello))
-
-(cps-testcase cps-and-fail (and 1 nil 2))
-(cps-testcase cps-and-succeed (and 1 2 3))
-(cps-testcase cps-and-empty (and))
-
-(cps-testcase cps-or-fallthrough (or nil 1 2))
-(cps-testcase cps-or-alltrue (or 1 2 3))
-(cps-testcase cps-or-empty (or))
-
-(cps-testcase cps-let* (let* ((i 10)) i))
-(cps-testcase cps-let*-shadow-empty (let* ((i 10)) (let (i) i)))
-(cps-testcase cps-let (let ((i 10)) i))
-(cps-testcase cps-let-shadow-empty (let ((i 10)) (let (i) i)))
-(cps-testcase cps-let-novars (let nil 42))
-(cps-testcase cps-let*-novars (let* nil 42))
-
-(cps-testcase cps-let-parallel
- (let ((a 5) (b 6)) (let ((a b) (b a)) (list a b))))
-
-(cps-testcase cps-let*-parallel
- (let* ((a 5) (b 6)) (let* ((a b) (b a)) (list a b))))
-
-(cps-testcase cps-while-dynamic
- (setq *cps-test-i* 0)
- (while (< *cps-test-i* 10)
- (setf *cps-test-i* (+ *cps-test-i* 1)))
- *cps-test-i*)
-
-(cps-testcase cps-while-lexical
- (let* ((i 0) (j 10))
- (while (< i 10)
- (setf i (+ i 1))
- (setf j (+ j (* i 10))))
- j))
-
-(cps-testcase cps-while-incf
- (let* ((i 0) (j 10))
- (while (< i 10)
- (cl-incf i)
- (setf j (+ j (* i 10))))
- j))
-
-(cps-testcase cps-dynbind
- (setf *cps-test-i* 0)
- (let* ((*cps-test-i* 5))
- (cps-get-test-i)))
-
-(cps-testcase cps-nested-application
- (+ (+ 3 5) 1))
-
-(cps-testcase cps-unwind-protect
- (setf *cps-test-i* 0)
- (unwind-protect
- (setf *cps-test-i* 1)
- (setf *cps-test-i* 2))
- *cps-test-i*)
-
-(cps-testcase cps-catch-unused
- (catch 'mytag 42))
-
-(cps-testcase cps-catch-thrown
- (1+ (catch 'mytag
- (throw 'mytag (+ 2 2)))))
-
-(cps-testcase cps-loop
- (cl-loop for x from 1 to 10 collect x))
-
-(cps-testcase cps-loop-backquote
- `(a b ,(cl-loop for x from 1 to 10 collect x) -1))
-
-(cps-testcase cps-if-branch-a
- (if t 'abc))
-
-(cps-testcase cps-if-branch-b
- (if t 'abc 'def))
-
-(cps-testcase cps-if-condition-fail
- (if nil 'abc 'def))
-
-(cps-testcase cps-cond-empty
- (cond))
-
-(cps-testcase cps-cond-atomi
- (cond (42)))
-
-(cps-testcase cps-cond-complex
- (cond (nil 22) ((1+ 1) 42) (t 'bad)))
-
-(put 'cps-test-error 'error-conditions '(cps-test-condition))
-
-(cps-testcase cps-condition-case
- (condition-case
- condvar
- (signal 'cps-test-error 'test-data)
- (cps-test-condition condvar)))
-
-(cps-testcase cps-condition-case-no-error
- (condition-case
- condvar
- 42
- (cps-test-condition condvar)))
-
-(ert-deftest cps-generator-basic ()
- (let* ((gen (iter-lambda ()
- (iter-yield 1)
- (iter-yield 2)
- (iter-yield 3)
- 4))
- (gen-inst (funcall gen)))
- (should (eql (iter-next gen-inst) 1))
- (should (eql (iter-next gen-inst) 2))
- (should (eql (iter-next gen-inst) 3))
-
- ;; should-error doesn't catch the generator-end condition (which
- ;; isn't an error), so we write our own.
- (let (errored)
- (condition-case x
- (iter-next gen-inst)
- (iter-end-of-sequence
- (setf errored (cdr x))))
- (should (eql errored 4)))))
-
-(iter-defun mygenerator (i)
- (iter-yield 1)
- (iter-yield i)
- (iter-yield 2))
-
-(ert-deftest cps-test-iter-do ()
- (let (mylist)
- (iter-do (x (mygenerator 4))
- (push x mylist))
- (should (equal mylist '(2 4 1)))))
-
-(iter-defun gen-using-yield-value ()
- (let (f)
- (setf f (iter-yield 42))
- (iter-yield f)
- -8))
-
-(ert-deftest cps-yield-value ()
- (let ((it (gen-using-yield-value)))
- (should (eql (iter-next it -1) 42))
- (should (eql (iter-next it -1) -1))))
-
-(ert-deftest cps-loop ()
- (should
- (equal (cl-loop for x iter-by (mygenerator 42)
- collect x)
- '(1 42 2))))
-
-(iter-defun gen-using-yield-from ()
- (let ((sub-iter (gen-using-yield-value)))
- (iter-yield (1+ (iter-yield-from sub-iter)))))
-
-(ert-deftest cps-test-yield-from-works ()
- (let ((it (gen-using-yield-from)))
- (should (eql (iter-next it -1) 42))
- (should (eql (iter-next it -1) -1))
- (should (eql (iter-next it -1) -7))))
-
-(defvar cps-test-closed-flag nil)
-
-(ert-deftest cps-test-iter-close ()
- (garbage-collect)
- (let ((cps-test-closed-flag nil))
- (let ((iter (funcall
- (iter-lambda ()
- (unwind-protect (iter-yield 1)
- (setf cps-test-closed-flag t))))))
- (should (equal (iter-next iter) 1))
- (should (not cps-test-closed-flag))
- (iter-close iter)
- (should cps-test-closed-flag))))
-
-(ert-deftest cps-test-iter-close-idempotent ()
- (garbage-collect)
- (let ((cps-test-closed-flag nil))
- (let ((iter (funcall
- (iter-lambda ()
- (unwind-protect (iter-yield 1)
- (setf cps-test-closed-flag t))))))
- (should (equal (iter-next iter) 1))
- (should (not cps-test-closed-flag))
- (iter-close iter)
- (should cps-test-closed-flag)
- (setf cps-test-closed-flag nil)
- (iter-close iter)
- (should (not cps-test-closed-flag)))))
-
-(ert-deftest cps-test-iter-cleanup-once-only ()
- (let* ((nr-unwound 0)
- (iter
- (funcall (iter-lambda ()
- (unwind-protect
- (progn
- (iter-yield 1)
- (error "test")
- (iter-yield 2))
- (cl-incf nr-unwound))))))
- (should (equal (iter-next iter) 1))
- (should-error (iter-next iter))
- (should (equal nr-unwound 1))))
-
-(iter-defun generator-with-docstring ()
- "Documentation!"
- (declare (indent 5))
- nil)
-
-(ert-deftest cps-test-declarations-preserved ()
- (should (equal (documentation 'generator-with-docstring) "Documentation!"))
- (should (equal (get 'generator-with-docstring 'lisp-indent-function) 5)))
diff --git a/test/automated/gnus-tests.el b/test/automated/gnus-tests.el
deleted file mode 100644
index ef785ec9a0b..00000000000
--- a/test/automated/gnus-tests.el
+++ /dev/null
@@ -1,35 +0,0 @@
-;;; gnus-tests.el --- Wrapper for the Gnus tests
-
-;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
-
-;; Author: Teodor Zlatanov <tzz@lifelogs.com>
-
-;; 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/>.
-
-;;; Commentary:
-
-;; This file should contain nothing but requires for all the Gnus
-;; tests that are not standalone.
-
-;;; Code:
-;; registry.el is required by gnus-registry.el but this way we're explicit.
-(eval-when-compile (require 'cl))
-
-(require 'registry)
-(require 'gnus-registry)
-
-(provide 'gnus-tests)
-;;; gnus-tests.el ends here
diff --git a/test/automated/help-fns.el b/test/automated/help-fns.el
deleted file mode 100644
index b8772eb84d6..00000000000
--- a/test/automated/help-fns.el
+++ /dev/null
@@ -1,60 +0,0 @@
-;;; help-fns.el --- tests for help-fns.el
-
-;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
-
-;; Maintainer: emacs-devel@gnu.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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'ert)
-
-(autoload 'help-fns-test--macro "help-fns" nil nil t)
-
-(ert-deftest help-fns-test-bug17410 ()
- "Test for http://debbugs.gnu.org/17410 ."
- (describe-function 'help-fns-test--macro)
- (with-current-buffer "*Help*"
- (goto-char (point-min))
- (should (search-forward "autoloaded Lisp macro" (line-end-position)))))
-
-(defun abc\\\[universal-argument\]b\`c\'d\\e\"f (x)
- "A function with a funny name.
-
-\(fn XYZZY)"
- x)
-
-(defun defgh\\\[universal-argument\]b\`c\'d\\e\"f (x)
- "Another function with a funny name."
- x)
-
-(ert-deftest help-fns-test-funny-names ()
- "Test for help with functions with funny names."
- (describe-function 'abc\\\[universal-argument\]b\`c\'d\\e\"f)
- (with-current-buffer "*Help*"
- (goto-char (point-min))
- (should (search-forward
- "(abc\\\\\\[universal-argument\\]b\\`c\\'d\\\\e\\\"f XYZZY)")))
- (describe-function 'defgh\\\[universal-argument\]b\`c\'d\\e\"f)
- (with-current-buffer "*Help*"
- (goto-char (point-min))
- (should (search-forward
- "(defgh\\\\\\[universal-argument\\]b\\`c\\'d\\\\e\\\"f X)"))))
-
-;;; help-fns.el ends here
diff --git a/test/automated/icalendar-tests.el b/test/automated/icalendar-tests.el
deleted file mode 100644
index 7e05d49883e..00000000000
--- a/test/automated/icalendar-tests.el
+++ /dev/null
@@ -1,2237 +0,0 @@
-;; icalendar-tests.el --- Test suite for icalendar.el
-
-;; Copyright (C) 2005, 2008-2015 Free Software Foundation, Inc.
-
-;; Author: Ulf Jasper <ulf.jasper@web.de>
-;; Created: March 2005
-;; Keywords: calendar
-;; Human-Keywords: calendar, diary, iCalendar, vCalendar
-
-;; 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/>.
-
-;;; Commentary:
-
-;; TODO:
-;; - Add more unit tests for functions, timezone etc.
-
-;; Note: Watch the trailing blank that is added on import.
-
-;;; Code:
-
-(require 'ert)
-(require 'icalendar)
-
-;; ======================================================================
-;; Helpers
-;; ======================================================================
-
-(defun icalendar-tests--get-ical-event (ical-string)
- "Return iCalendar event for ICAL-STRING."
- (save-excursion
- (with-temp-buffer
- (insert ical-string)
- (goto-char (point-min))
- (car (icalendar--read-element nil nil)))))
-
-(defun icalendar-tests--trim (string)
- "Remove leading and trailing whitespace from STRING."
- (replace-regexp-in-string "[ \t\n]+\\'" ""
- (replace-regexp-in-string "\\`[ \t\n]+" "" string)))
-
-;; ======================================================================
-;; Tests of functions
-;; ======================================================================
-
-(ert-deftest icalendar--create-uid ()
- "Test for `icalendar--create-uid'."
- (let* ((icalendar-uid-format "xxx-%t-%c-%h-%u-%s")
- t-ct
- (icalendar--uid-count 77)
- (entry-full "30.06.1964 07:01 blahblah")
- (hash (format "%d" (abs (sxhash entry-full))))
- (contents "DTSTART:19640630T070100\nblahblah")
- (username (or user-login-name "UNKNOWN_USER"))
- )
- (fset 't-ct (symbol-function 'current-time))
- (unwind-protect
- (progn
- (fset 'current-time (lambda () '(1 2 3)))
- (should (= 77 icalendar--uid-count))
- (should (string= (concat "xxx-123-77-" hash "-" username "-19640630")
- (icalendar--create-uid entry-full contents)))
- (should (= 78 icalendar--uid-count)))
- ;; restore 'current-time
- (fset 'current-time (symbol-function 't-ct)))
- (setq contents "blahblah")
- (setq icalendar-uid-format "yyy%syyy")
- (should (string= (concat "yyyDTSTARTyyy")
- (icalendar--create-uid entry-full contents)))))
-
-(ert-deftest icalendar-convert-anniversary-to-ical ()
- "Test method for `icalendar--convert-anniversary-to-ical'."
- (let* ((calendar-date-style 'iso)
- result)
- (setq result (icalendar--convert-anniversary-to-ical
- "" "%%(diary-anniversary 1964 6 30) g"))
- (should (consp result))
- (should (string= (concat
- "\nDTSTART;VALUE=DATE:19640630"
- "\nDTEND;VALUE=DATE:19640701"
- "\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=06;BYMONTHDAY=30")
- (car result)))
- (should (string= "g" (cdr result)))))
-
-(ert-deftest icalendar--convert-cyclic-to-ical ()
- "Test method for `icalendar--convert-cyclic-to-ical'."
- (let* ((calendar-date-style 'iso)
- result)
- (setq result (icalendar--convert-block-to-ical
- "" "%%(diary-block 2004 7 19 2004 8 27) Sommerferien"))
- (should (consp result))
- (should (string= (concat
- "\nDTSTART;VALUE=DATE:20040719"
- "\nDTEND;VALUE=DATE:20040828")
- (car result)))
- (should (string= "Sommerferien" (cdr result)))))
-
-(ert-deftest icalendar--convert-block-to-ical ()
- "Test method for `icalendar--convert-block-to-ical'."
- (let* ((calendar-date-style 'iso)
- result)
- (setq result (icalendar--convert-block-to-ical
- "" "%%(diary-block 2004 7 19 2004 8 27) Sommerferien"))
- (should (consp result))
- (should (string= (concat
- "\nDTSTART;VALUE=DATE:20040719"
- "\nDTEND;VALUE=DATE:20040828")
- (car result)))
- (should (string= "Sommerferien" (cdr result)))))
-
-(ert-deftest icalendar--convert-yearly-to-ical ()
- "Test method for `icalendar--convert-yearly-to-ical'."
- (let* ((calendar-date-style 'iso)
- result
- (calendar-month-name-array
- ["January" "February" "March" "April" "May" "June" "July" "August"
- "September" "October" "November" "December"]))
- (setq result (icalendar--convert-yearly-to-ical "" "May 1 Tag der Arbeit"))
- (should (consp result))
- (should (string= (concat
- "\nDTSTART;VALUE=DATE:19000501"
- "\nDTEND;VALUE=DATE:19000502"
- "\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYMONTHDAY=1")
- (car result)))
- (should (string= "Tag der Arbeit" (cdr result)))))
-
-(ert-deftest icalendar--convert-weekly-to-ical ()
- "Test method for `icalendar--convert-weekly-to-ical'."
- (let* ((calendar-date-style 'iso)
- result
- (calendar-day-name-array
- ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday"
- "Saturday"]))
- (setq result (icalendar--convert-weekly-to-ical "" "Monday 8:30 subject"))
- (should (consp result))
- (should (string= (concat "\nDTSTART;VALUE=DATE-TIME:20050103T083000"
- "\nDTEND;VALUE=DATE-TIME:20050103T093000"
- "\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO")
- (car result)))
- (should (string= "subject" (cdr result)))))
-
-(ert-deftest icalendar--convert-sexp-to-ical ()
- "Test method for `icalendar--convert-sexp-to-ical'."
- (let* (result
- (icalendar-export-sexp-enumeration-days 3))
- ;; test case %%(diary-hebrew-date)
- (setq result (icalendar--convert-sexp-to-ical "" "%%(diary-hebrew-date)"))
- (should (consp result))
- (should (eq icalendar-export-sexp-enumeration-days (length result)))
- (mapc (lambda (i)
- (should (consp i))
- (should (string-match "Hebrew date (until sunset): .*" (cdr i))))
- result)))
-
-(ert-deftest icalendar--convert-to-ical ()
- "Test method for `icalendar--convert-to-ical'."
- (let* (result
- (icalendar-export-sexp-enumerate-all t)
- (icalendar-export-sexp-enumeration-days 3)
- (calendar-date-style 'iso))
- ;; test case: %%(diary-anniversary 1642 12 25) Newton
- ;; forced enumeration not matching the actual day --> empty
- (setq result (icalendar--convert-sexp-to-ical
- "" "%%(diary-anniversary 1642 12 25) Newton's birthday"
- (encode-time 1 1 1 6 12 2014)))
- (should (null result))
- ;; test case: %%(diary-anniversary 1642 12 25) Newton
- ;; enumeration does match the actual day -->
- (setq result (icalendar--convert-sexp-to-ical
- "" "%%(diary-anniversary 1642 12 25) Newton's birthday"
- (encode-time 1 1 1 24 12 2014)))
- (should (= 1 (length result)))
- (should (consp (car result)))
- (should (string-match
- "\nDTSTART;VALUE=DATE:20141225\nDTEND;VALUE=DATE:20141226"
- (car (car result))))
- (should (string-match "Newton's birthday" (cdr (car result))))))
-
-(ert-deftest icalendar--parse-vtimezone ()
- "Test method for `icalendar--parse-vtimezone'."
- (let (vtimezone result)
- (setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
-TZID:thename
-BEGIN:STANDARD
-DTSTART:16010101T040000
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:16010101T030000
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
-END:DAYLIGHT
-END:VTIMEZONE
-"))
- (setq result (icalendar--parse-vtimezone vtimezone))
- (should (string= "thename" (car result)))
- (message (cdr result))
- (should (string= "STD-02:00DST-03:00,M3.5.0/03:00:00,M10.5.0/04:00:00"
- (cdr result)))
- (setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
-TZID:anothername, with a comma
-BEGIN:STANDARD
-DTSTART:16010101T040000
-TZOFFSETFROM:+0300
-TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2MO;BYMONTH=10
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:16010101T030000
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0300
-RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2MO;BYMONTH=3
-END:DAYLIGHT
-END:VTIMEZONE
-"))
- (setq result (icalendar--parse-vtimezone vtimezone))
- (should (string= "anothername, with a comma" (car result)))
- (message (cdr result))
- (should (string= "STD-02:00DST-03:00,M3.2.1/03:00:00,M10.2.1/04:00:00"
- (cdr result)))
- ;; offsetfrom = offsetto
- (setq vtimezone (icalendar-tests--get-ical-event "BEGIN:VTIMEZONE
-TZID:Kolkata, Chennai, Mumbai, New Delhi
-X-MICROSOFT-CDO-TZID:23
-BEGIN:STANDARD
-DTSTART:16010101T000000
-TZOFFSETFROM:+0530
-TZOFFSETTO:+0530
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:16010101T000000
-TZOFFSETFROM:+0530
-TZOFFSETTO:+0530
-END:DAYLIGHT
-END:VTIMEZONE
-"))
- (setq result (icalendar--parse-vtimezone vtimezone))
- (should (string= "Kolkata, Chennai, Mumbai, New Delhi" (car result)))
- (message (cdr result))
- (should (string= "STD-05:30DST-05:30,M1.1.1/00:00:00,M1.1.1/00:00:00"
- (cdr result)))))
-
-(ert-deftest icalendar--convert-ordinary-to-ical ()
- "Test method for `icalendar--convert-ordinary-to-ical'."
- (let* ((calendar-date-style 'iso)
- result)
- ;; without time
- (setq result (icalendar--convert-ordinary-to-ical "&?" "2010 2 15 subject"))
- (should (consp result))
- (should (string= "\nDTSTART;VALUE=DATE:20100215\nDTEND;VALUE=DATE:20100216"
- (car result)))
- (should (string= "subject" (cdr result)))
-
- ;; with start time
- (setq result (icalendar--convert-ordinary-to-ical
- "&?" "&2010 2 15 12:34 s"))
- (should (consp result))
- (should (string= (concat "\nDTSTART;VALUE=DATE-TIME:20100215T123400"
- "\nDTEND;VALUE=DATE-TIME:20100215T133400")
- (car result)))
- (should (string= "s" (cdr result)))
-
- ;; with time
- (setq result (icalendar--convert-ordinary-to-ical
- "&?" "&2010 2 15 12:34-23:45 s"))
- (should (consp result))
- (should (string= (concat "\nDTSTART;VALUE=DATE-TIME:20100215T123400"
- "\nDTEND;VALUE=DATE-TIME:20100215T234500")
- (car result)))
- (should (string= "s" (cdr result)))
-
- ;; with time, again -- test bug#5549
- (setq result (icalendar--convert-ordinary-to-ical
- "x?" "x2010 2 15 0:34-1:45 s"))
- (should (consp result))
- (should (string= (concat "\nDTSTART;VALUE=DATE-TIME:20100215T003400"
- "\nDTEND;VALUE=DATE-TIME:20100215T014500")
- (car result)))
- (should (string= "s" (cdr result)))))
-
-(ert-deftest icalendar--diarytime-to-isotime ()
- "Test method for `icalendar--diarytime-to-isotime'."
- (should (string= "T011500"
- (icalendar--diarytime-to-isotime "01:15" "")))
- (should (string= "T011500"
- (icalendar--diarytime-to-isotime "1:15" "")))
- (should (string= "T000100"
- (icalendar--diarytime-to-isotime "0:01" "")))
- (should (string= "T010000"
- (icalendar--diarytime-to-isotime "0100" "")))
- (should (string= "T010000"
- (icalendar--diarytime-to-isotime "0100" "am")))
- (should (string= "T130000"
- (icalendar--diarytime-to-isotime "0100" "pm")))
- (should (string= "T120000"
- (icalendar--diarytime-to-isotime "1200" "")))
- (should (string= "T171700"
- (icalendar--diarytime-to-isotime "17:17" "")))
- (should (string= "T000000"
- (icalendar--diarytime-to-isotime "1200" "am")))
- (should (string= "T000100"
- (icalendar--diarytime-to-isotime "1201" "am")))
- (should (string= "T005900"
- (icalendar--diarytime-to-isotime "1259" "am")))
- (should (string= "T120000"
- (icalendar--diarytime-to-isotime "1200" "pm")))
- (should (string= "T120100"
- (icalendar--diarytime-to-isotime "1201" "pm")))
- (should (string= "T125900"
- (icalendar--diarytime-to-isotime "1259" "pm")))
- (should (string= "T150000"
- (icalendar--diarytime-to-isotime "3" "pm"))))
-
-(ert-deftest icalendar--datetime-to-diary-date ()
- "Test method for `icalendar--datetime-to-diary-date'."
- (let* ((datetime '(59 59 23 31 12 2008))
- (calendar-date-style 'iso))
- (should (string= "2008 12 31"
- (icalendar--datetime-to-diary-date datetime)))
- (setq calendar-date-style 'european)
- (should (string= "31 12 2008"
- (icalendar--datetime-to-diary-date datetime)))
- (setq calendar-date-style 'american)
- (should (string= "12 31 2008"
- (icalendar--datetime-to-diary-date datetime)))))
-
-(ert-deftest icalendar--datestring-to-isodate ()
- "Test method for `icalendar--datestring-to-isodate'."
- (let ((calendar-date-style 'iso))
- ;; numeric iso
- (should (string= "20080511"
- (icalendar--datestring-to-isodate "2008 05 11")))
- (should (string= "20080531"
- (icalendar--datestring-to-isodate "2008 05 31")))
- (should (string= "20080602"
- (icalendar--datestring-to-isodate "2008 05 31" 2)))
-
- ;; numeric european
- (setq calendar-date-style 'european)
- (should (string= "20080511"
- (icalendar--datestring-to-isodate "11 05 2008")))
- (should (string= "20080531"
- (icalendar--datestring-to-isodate "31 05 2008")))
- (should (string= "20080602"
- (icalendar--datestring-to-isodate "31 05 2008" 2)))
-
- ;; numeric american
- (setq calendar-date-style 'american)
- (should (string= "20081105"
- (icalendar--datestring-to-isodate "11 05 2008")))
- (should (string= "20081230"
- (icalendar--datestring-to-isodate "12 30 2008")))
- (should (string= "20090101"
- (icalendar--datestring-to-isodate "12 30 2008" 2)))
-
- ;; non-numeric
- (setq calendar-date-style nil) ;not necessary for conversion
- (should (string= "20081105"
- (icalendar--datestring-to-isodate "Nov 05 2008")))
- (should (string= "20081105"
- (icalendar--datestring-to-isodate "05 Nov 2008")))
- (should (string= "20081105"
- (icalendar--datestring-to-isodate "2008 Nov 05")))))
-
-(ert-deftest icalendar--first-weekday-of-year ()
- "Test method for `icalendar-first-weekday-of-year'."
- (should (eq 1 (icalendar-first-weekday-of-year "TU" 2008)))
- (should (eq 3 (icalendar-first-weekday-of-year "WE" 2007)))
- (should (eq 5 (icalendar-first-weekday-of-year "TH" 2006)))
- (should (eq 7 (icalendar-first-weekday-of-year "FR" 2005)))
- (should (eq 3 (icalendar-first-weekday-of-year "SA" 2004)))
- (should (eq 5 (icalendar-first-weekday-of-year "SU" 2003)))
- (should (eq 7 (icalendar-first-weekday-of-year "MO" 2002)))
- (should (eq 3 (icalendar-first-weekday-of-year "MO" 2000)))
- (should (eq 1 (icalendar-first-weekday-of-year "TH" 1970))))
-
-(ert-deftest icalendar--import-format-sample ()
- "Test method for `icalendar-import-format-sample'."
- (should (string= (concat "SUMMARY='a' DESCRIPTION='b' LOCATION='c' "
- "ORGANIZER='d' STATUS='' URL='' CLASS=''")
- (icalendar-import-format-sample
- (icalendar-tests--get-ical-event "BEGIN:VEVENT
-DTSTAMP:20030509T043439Z
-DTSTART:20030509T103000
-SUMMARY:a
-ORGANIZER:d
-LOCATION:c
-DTEND:20030509T153000
-DESCRIPTION:b
-END:VEVENT
-")))))
-
-(ert-deftest icalendar--format-ical-event ()
- "Test `icalendar--format-ical-event'."
- (let ((icalendar-import-format "%s%d%l%o%t%u%c")
- (icalendar-import-format-summary "SUM %s")
- (icalendar-import-format-location " LOC %s")
- (icalendar-import-format-description " DES %s")
- (icalendar-import-format-organizer " ORG %s")
- (icalendar-import-format-status " STA %s")
- (icalendar-import-format-url " URL %s")
- (icalendar-import-format-class " CLA %s")
- (event (icalendar-tests--get-ical-event "BEGIN:VEVENT
-DTSTAMP:20030509T043439Z
-DTSTART:20030509T103000
-SUMMARY:sum
-ORGANIZER:org
-LOCATION:loc
-DTEND:20030509T153000
-DESCRIPTION:des
-END:VEVENT
-")))
- (should (string= "SUM sum DES des LOC loc ORG org"
- (icalendar--format-ical-event event)))
- (setq icalendar-import-format (lambda (&rest ignore)
- "helloworld"))
- (should (string= "helloworld" (icalendar--format-ical-event event)))
- (setq icalendar-import-format
- (lambda (e)
- (format "-%s-%s-%s-%s-%s-%s-%s-"
- (icalendar--get-event-property event 'SUMMARY)
- (icalendar--get-event-property event 'DESCRIPTION)
- (icalendar--get-event-property event 'LOCATION)
- (icalendar--get-event-property event 'ORGANIZER)
- (icalendar--get-event-property event 'STATUS)
- (icalendar--get-event-property event 'URL)
- (icalendar--get-event-property event 'CLASS))))
- (should (string= "-sum-des-loc-org-nil-nil-nil-"
- (icalendar--format-ical-event event)))))
-
-(ert-deftest icalendar--parse-summary-and-rest ()
- "Test `icalendar--parse-summary-and-rest'."
- (let ((icalendar-import-format "%s%d%l%o%t%u%c")
- (icalendar-import-format-summary "SUM %s")
- (icalendar-import-format-location " LOC %s")
- (icalendar-import-format-description " DES %s")
- (icalendar-import-format-organizer " ORG %s")
- (icalendar-import-format-status " STA %s")
- (icalendar-import-format-url " URL %s")
- (icalendar-import-format-class " CLA %s")
- (result))
- (setq result (icalendar--parse-summary-and-rest "SUM sum ORG org"))
- (should (string= "org" (cdr (assoc 'org result))))
-
- (setq result (icalendar--parse-summary-and-rest
- "SUM sum DES des LOC loc ORG org STA sta URL url CLA cla"))
- (should (string= "des" (cdr (assoc 'des result))))
- (should (string= "loc" (cdr (assoc 'loc result))))
- (should (string= "org" (cdr (assoc 'org result))))
- (should (string= "sta" (cdr (assoc 'sta result))))
- (should (string= "cla" (cdr (assoc 'cla result))))
-
- (setq icalendar-import-format (lambda () "Hello world"))
- (setq result (icalendar--parse-summary-and-rest
- "blah blah "))
- (should (not result))
- ))
-
-(ert-deftest icalendar--decode-isodatetime ()
- "Test `icalendar--decode-isodatetime'."
- (let ((tz (getenv "TZ"))
- result)
- (unwind-protect
- (progn
- ;; Use Eastern European Time (UTC+2, UTC+3 daylight saving)
- (setenv "TZ" "EET-2EEST,M3.5.0/3,M10.5.0/4")
-
- (message "%s" (current-time-zone (encode-time 0 0 10 1 1 2013 0)))
- (message "%s" (current-time-zone (encode-time 0 0 10 1 8 2013 0)))
-
- ;; testcase: no time zone in input -> keep time as is
- ;; 1 Jan 2013 10:00
- (should (equal '(0 0 10 1 1 2013 2 nil 7200)
- (icalendar--decode-isodatetime "20130101T100000")))
- ;; 1 Aug 2013 10:00 (DST)
- (should (equal '(0 0 10 1 8 2013 4 t 10800)
- (icalendar--decode-isodatetime "20130801T100000")))
-
- ;; testcase: UTC time zone specifier in input -> convert to local time
- ;; 31 Dec 2013 23:00 UTC -> 1 Jan 2013 01:00 EET
- (should (equal '(0 0 1 1 1 2014 3 nil 7200)
- (icalendar--decode-isodatetime "20131231T230000Z")))
- ;; 1 Aug 2013 10:00 UTC -> 1 Aug 2013 13:00 EEST
- (should (equal '(0 0 13 1 8 2013 4 t 10800)
- (icalendar--decode-isodatetime "20130801T100000Z")))
-
- )
- ;; restore time-zone even if something went terribly wrong
- (setenv "TZ" tz))) )
-
-;; ======================================================================
-;; Export tests
-;; ======================================================================
-
-(defun icalendar-tests--test-export (input-iso input-european input-american
- expected-output &optional alarms)
- "Perform an export test.
-Argument INPUT-ISO iso style diary string.
-Argument INPUT-EUROPEAN european style diary string.
-Argument INPUT-AMERICAN american style diary string.
-Argument EXPECTED-OUTPUT expected iCalendar result string.
-Optional argument ALARMS the value of `icalendar-export-alarms' for this test.
-
-European style input data must use german month names. American
-and ISO style input data must use english month names."
- (let ((tz (getenv "TZ"))
- (calendar-date-style 'iso)
- (icalendar-recurring-start-year 2000)
- (icalendar-export-alarms alarms))
- (unwind-protect
- (progn
-;;; (message "Current time zone: %s" (current-time-zone))
- ;; Use this form so as not to rely on system tz database.
- ;; Eg hydra.nixos.org.
- (setenv "TZ" "CET-1CEST,M3.5.0/2,M10.5.0/3")
-;;; (message "Current time zone: %s" (current-time-zone))
- (when input-iso
- (let ((calendar-month-name-array
- ["January" "February" "March" "April" "May" "June" "July" "August"
- "September" "October" "November" "December"])
- (calendar-day-name-array
- ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday"
- "Saturday"]))
- (setq calendar-date-style 'iso)
- (icalendar-tests--do-test-export input-iso expected-output)))
- (when input-european
- (let ((calendar-month-name-array
- ["Januar" "Februar" "März" "April" "Mai" "Juni" "Juli" "August"
- "September" "Oktober" "November" "Dezember"])
- (calendar-day-name-array
- ["Sonntag" "Montag" "Dienstag" "Mittwoch" "Donnerstag" "Freitag"
- "Samstag"]))
- (setq calendar-date-style 'european)
- (icalendar-tests--do-test-export input-european expected-output)))
- (when input-american
- (let ((calendar-month-name-array
- ["January" "February" "March" "April" "May" "June" "July" "August"
- "September" "October" "November" "December"])
- (calendar-day-name-array
- ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday"
- "Saturday"]))
- (setq calendar-date-style 'american)
- (icalendar-tests--do-test-export input-american expected-output))))
- ;; restore time-zone even if something went terribly wrong
- (setenv "TZ" tz))))
-
-(defun icalendar-tests--do-test-export (input expected-output)
- "Actually perform export test.
-Argument INPUT input diary string.
-Argument EXPECTED-OUTPUT expected iCalendar result string."
- (let ((temp-file (make-temp-file "icalendar-tests-ics")))
- (unwind-protect
- (progn
- (with-temp-buffer
- (insert input)
- (icalendar-export-region (point-min) (point-max) temp-file))
- (save-excursion
- (find-file temp-file)
- (goto-char (point-min))
- (cond (expected-output
- (should (re-search-forward "^\\s-*BEGIN:VCALENDAR
-PRODID:-//Emacs//NONSGML icalendar.el//EN
-VERSION:2.0
-BEGIN:VEVENT
-UID:emacs[0-9]+
-\\(\\(.\\|\n\\)+\\)
-END:VEVENT
-END:VCALENDAR
-\\s-*$"
- nil t))
- (should (string-match
- (concat "^\\s-*"
- (regexp-quote (buffer-substring-no-properties
- (match-beginning 1) (match-end 1)))
- "\\s-*$")
- expected-output)))
- (t
- (should (re-search-forward "^\\s-*BEGIN:VCALENDAR
-PRODID:-//Emacs//NONSGML icalendar.el//EN
-VERSION:2.0
-END:VCALENDAR
-\\s-*$"
- nil t))))))
- ;; cleanup!!
- (kill-buffer (find-buffer-visiting temp-file))
- (delete-file temp-file))))
-
-(ert-deftest icalendar-export-ordinary-no-time ()
- "Perform export test."
-
- (let ((icalendar-export-hidden-diary-entries nil))
- (icalendar-tests--test-export
- "&2000 Oct 3 ordinary no time "
- "&3 Okt 2000 ordinary no time "
- "&Oct 3 2000 ordinary no time "
- nil))
-
- (icalendar-tests--test-export
- "2000 Oct 3 ordinary no time "
- "3 Okt 2000 ordinary no time "
- "Oct 3 2000 ordinary no time "
- "DTSTART;VALUE=DATE:20001003
-DTEND;VALUE=DATE:20001004
-SUMMARY:ordinary no time
-"))
-
-(ert-deftest icalendar-export-ordinary ()
- "Perform export test."
-
- (icalendar-tests--test-export
- "2000 Oct 3 16:30 ordinary with time"
- "3 Okt 2000 16:30 ordinary with time"
- "Oct 3 2000 16:30 ordinary with time"
- "DTSTART;VALUE=DATE-TIME:20001003T163000
-DTEND;VALUE=DATE-TIME:20001003T173000
-SUMMARY:ordinary with time
-")
- (icalendar-tests--test-export
- "2000 10 3 16:30 ordinary with time 2"
- "3 10 2000 16:30 ordinary with time 2"
- "10 3 2000 16:30 ordinary with time 2"
- "DTSTART;VALUE=DATE-TIME:20001003T163000
-DTEND;VALUE=DATE-TIME:20001003T173000
-SUMMARY:ordinary with time 2
-")
-
- (icalendar-tests--test-export
- "2000/10/3 16:30 ordinary with time 3"
- "3/10/2000 16:30 ordinary with time 3"
- "10/3/2000 16:30 ordinary with time 3"
- "DTSTART;VALUE=DATE-TIME:20001003T163000
-DTEND;VALUE=DATE-TIME:20001003T173000
-SUMMARY:ordinary with time 3
-"))
-
-(ert-deftest icalendar-export-multiline ()
- "Perform export test."
-
- ;; multiline -- FIXME!!!
- (icalendar-tests--test-export
- "2000 October 3 16:30 multiline
- 17:30 multiline continued FIXME"
- "3 Oktober 2000 16:30 multiline
- 17:30 multiline continued FIXME"
- "October 3 2000 16:30 multiline
- 17:30 multiline continued FIXME"
- "DTSTART;VALUE=DATE-TIME:20001003T163000
-DTEND;VALUE=DATE-TIME:20001003T173000
-SUMMARY:multiline
-DESCRIPTION:
- 17:30 multiline continued FIXME
-"))
-
-(ert-deftest icalendar-export-weekly-by-day ()
- "Perform export test."
-
- ;; weekly by day
- (icalendar-tests--test-export
- "Monday 1:30pm weekly by day with start time"
- "Montag 13:30 weekly by day with start time"
- "Monday 1:30pm weekly by day with start time"
- "DTSTART;VALUE=DATE-TIME:20000103T133000
-DTEND;VALUE=DATE-TIME:20000103T143000
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
-SUMMARY:weekly by day with start time
-")
-
- (icalendar-tests--test-export
- "Monday 13:30-15:00 weekly by day with start and end time"
- "Montag 13:30-15:00 weekly by day with start and end time"
- "Monday 01:30pm-03:00pm weekly by day with start and end time"
- "DTSTART;VALUE=DATE-TIME:20000103T133000
-DTEND;VALUE=DATE-TIME:20000103T150000
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
-SUMMARY:weekly by day with start and end time
-"))
-
-(ert-deftest icalendar-export-yearly ()
- "Perform export test."
- ;; yearly
- (icalendar-tests--test-export
- "may 1 yearly no time"
- "1 Mai yearly no time"
- "may 1 yearly no time"
- "DTSTART;VALUE=DATE:19000501
-DTEND;VALUE=DATE:19000502
-RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=5;BYMONTHDAY=1
-SUMMARY:yearly no time
-"))
-
-(ert-deftest icalendar-export-anniversary ()
- "Perform export test."
- ;; anniversaries
- (icalendar-tests--test-export
- "%%(diary-anniversary 1989 10 3) anniversary no time"
- "%%(diary-anniversary 3 10 1989) anniversary no time"
- "%%(diary-anniversary 10 3 1989) anniversary no time"
- "DTSTART;VALUE=DATE:19891003
-DTEND;VALUE=DATE:19891004
-RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=10;BYMONTHDAY=03
-SUMMARY:anniversary no time
-")
- (icalendar-tests--test-export
- "%%(diary-anniversary 1989 10 3) 19:00-20:00 anniversary with time"
- "%%(diary-anniversary 3 10 1989) 19:00-20:00 anniversary with time"
- "%%(diary-anniversary 10 3 1989) 19:00-20:00 anniversary with time"
- "DTSTART;VALUE=DATE-TIME:19891003T190000
-DTEND;VALUE=DATE-TIME:19891004T200000
-RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=10;BYMONTHDAY=03
-SUMMARY:anniversary with time
-"))
-
-(ert-deftest icalendar-export-block ()
- "Perform export test."
- ;; block
- (icalendar-tests--test-export
- "%%(diary-block 2001 6 18 2001 7 6) block no time"
- "%%(diary-block 18 6 2001 6 7 2001) block no time"
- "%%(diary-block 6 18 2001 7 6 2001) block no time"
- "DTSTART;VALUE=DATE:20010618
-DTEND;VALUE=DATE:20010707
-SUMMARY:block no time
-")
- (icalendar-tests--test-export
- "%%(diary-block 2001 6 18 2001 7 6) 13:00-17:00 block with time"
- "%%(diary-block 18 6 2001 6 7 2001) 13:00-17:00 block with time"
- "%%(diary-block 6 18 2001 7 6 2001) 13:00-17:00 block with time"
- "DTSTART;VALUE=DATE-TIME:20010618T130000
-DTEND;VALUE=DATE-TIME:20010618T170000
-RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20010706
-SUMMARY:block with time
-")
- (icalendar-tests--test-export
- "%%(diary-block 2001 6 18 2001 7 6) 13:00 block no end time"
- "%%(diary-block 18 6 2001 6 7 2001) 13:00 block no end time"
- "%%(diary-block 6 18 2001 7 6 2001) 13:00 block no end time"
- "DTSTART;VALUE=DATE-TIME:20010618T130000
-DTEND;VALUE=DATE-TIME:20010618T140000
-RRULE:FREQ=DAILY;INTERVAL=1;UNTIL=20010706
-SUMMARY:block no end time
-"))
-
-(ert-deftest icalendar-export-alarms ()
- "Perform export test with different settings for exporting alarms."
- ;; no alarm
- (icalendar-tests--test-export
- "2014 Nov 17 19:30 no alarm"
- "17 Nov 2014 19:30 no alarm"
- "Nov 17 2014 19:30 no alarm"
- "DTSTART;VALUE=DATE-TIME:20141117T193000
-DTEND;VALUE=DATE-TIME:20141117T203000
-SUMMARY:no alarm
-"
- nil)
-
- ;; 10 minutes in advance, audio
- (icalendar-tests--test-export
- "2014 Nov 17 19:30 audio alarm"
- "17 Nov 2014 19:30 audio alarm"
- "Nov 17 2014 19:30 audio alarm"
- "DTSTART;VALUE=DATE-TIME:20141117T193000
-DTEND;VALUE=DATE-TIME:20141117T203000
-SUMMARY:audio alarm
-BEGIN:VALARM
-ACTION:AUDIO
-TRIGGER:-PT10M
-END:VALARM
-"
- '(10 ((audio))))
-
- ;; 20 minutes in advance, display
- (icalendar-tests--test-export
- "2014 Nov 17 19:30 display alarm"
- "17 Nov 2014 19:30 display alarm"
- "Nov 17 2014 19:30 display alarm"
- "DTSTART;VALUE=DATE-TIME:20141117T193000
-DTEND;VALUE=DATE-TIME:20141117T203000
-SUMMARY:display alarm
-BEGIN:VALARM
-ACTION:DISPLAY
-TRIGGER:-PT20M
-DESCRIPTION:display alarm
-END:VALARM
-"
- '(20 ((display))))
-
- ;; 66 minutes in advance, email
- (icalendar-tests--test-export
- "2014 Nov 17 19:30 email alarm"
- "17 Nov 2014 19:30 email alarm"
- "Nov 17 2014 19:30 email alarm"
- "DTSTART;VALUE=DATE-TIME:20141117T193000
-DTEND;VALUE=DATE-TIME:20141117T203000
-SUMMARY:email alarm
-BEGIN:VALARM
-ACTION:EMAIL
-TRIGGER:-PT66M
-DESCRIPTION:email alarm
-SUMMARY:email alarm
-ATTENDEE:MAILTO:att.one@email.com
-ATTENDEE:MAILTO:att.two@email.com
-END:VALARM
-"
- '(66 ((email ("att.one@email.com" "att.two@email.com")))))
-
- ;; 2 minutes in advance, all alarms
- (icalendar-tests--test-export
- "2014 Nov 17 19:30 all alarms"
- "17 Nov 2014 19:30 all alarms"
- "Nov 17 2014 19:30 all alarms"
- "DTSTART;VALUE=DATE-TIME:20141117T193000
-DTEND;VALUE=DATE-TIME:20141117T203000
-SUMMARY:all alarms
-BEGIN:VALARM
-ACTION:EMAIL
-TRIGGER:-PT2M
-DESCRIPTION:all alarms
-SUMMARY:all alarms
-ATTENDEE:MAILTO:att.one@email.com
-ATTENDEE:MAILTO:att.two@email.com
-END:VALARM
-BEGIN:VALARM
-ACTION:AUDIO
-TRIGGER:-PT2M
-END:VALARM
-BEGIN:VALARM
-ACTION:DISPLAY
-TRIGGER:-PT2M
-DESCRIPTION:all alarms
-END:VALARM
-"
- '(2 ((email ("att.one@email.com" "att.two@email.com")) (audio) (display)))))
-
-;; ======================================================================
-;; Import tests
-;; ======================================================================
-
-(defun icalendar-tests--test-import (input expected-iso expected-european
- expected-american)
- "Perform import test.
-Argument INPUT icalendar event string.
-Argument EXPECTED-ISO expected iso style diary string.
-Argument EXPECTED-EUROPEAN expected european style diary string.
-Argument EXPECTED-AMERICAN expected american style diary string.
-During import test the timezone is set to Central European Time."
- (let ((timezone (getenv "TZ")))
- (unwind-protect
- (progn
- ;; Use this form so as not to rely on system tz database.
- ;; Eg hydra.nixos.org.
- (setenv "TZ" "CET-1CEST,M3.5.0/2,M10.5.0/3")
- (with-temp-buffer
- (if (string-match "^BEGIN:VCALENDAR" input)
- (insert input)
- (insert "BEGIN:VCALENDAR\nPRODID:-//Emacs//NONSGML icalendar.el//EN\n")
- (insert "VERSION:2.0\nBEGIN:VEVENT\n")
- (insert input)
- (unless (eq (char-before) ?\n)
- (insert "\n"))
- (insert "END:VEVENT\nEND:VCALENDAR\n"))
- (let ((icalendar-import-format "%s%d%l%o%t%u%c%U")
- (icalendar-import-format-summary "%s")
- (icalendar-import-format-location "\n Location: %s")
- (icalendar-import-format-description "\n Desc: %s")
- (icalendar-import-format-organizer "\n Organizer: %s")
- (icalendar-import-format-status "\n Status: %s")
- (icalendar-import-format-url "\n URL: %s")
- (icalendar-import-format-class "\n Class: %s")
- (icalendar-import-format-uid "\n UID: %s")
- calendar-date-style)
- (when expected-iso
- (setq calendar-date-style 'iso)
- (icalendar-tests--do-test-import input expected-iso))
- (when expected-european
- (setq calendar-date-style 'european)
- (icalendar-tests--do-test-import input expected-european))
- (when expected-american
- (setq calendar-date-style 'american)
- (icalendar-tests--do-test-import input expected-american)))))
- (setenv "TZ" timezone))))
-
-(defun icalendar-tests--do-test-import (input expected-output)
- "Actually perform import test.
-Argument INPUT input icalendar string.
-Argument EXPECTED-OUTPUT expected diary string."
- (let ((temp-file (make-temp-file "icalendar-test-diary")))
- ;; Test the Catch-the-mysterious-coding-header logic below.
- ;; Ruby-mode adds an after-save-hook which inserts the header!
- ;; (save-excursion
- ;; (find-file temp-file)
- ;; (ruby-mode))
- (icalendar-import-buffer temp-file t t)
- (save-excursion
- (find-file temp-file)
- ;; Check for the mysterious "# coding: ..." header, remove it
- ;; and give a shout
- (goto-char (point-min))
- (when (re-search-forward "# coding: .*?\n" nil t)
- (message (concat "%s\n"
- "Found mysterious \"# coding ...\" header! Removing it.\n"
- "Current Modes: %s, %s\n"
- "Current test: %s\n"
- "%s")
- (make-string 70 ?*)
- major-mode
- minor-mode-list
- (ert-running-test)
- (make-string 70 ?*))
- (buffer-disable-undo)
- (replace-match "")
- (set-buffer-modified-p nil))
-
- (let ((result (buffer-substring-no-properties (point-min) (point-max))))
- (should (string= expected-output result)))
- (kill-buffer (find-buffer-visiting temp-file))
- (delete-file temp-file))))
-
-(ert-deftest icalendar-import-non-recurring ()
- "Perform standard import tests."
- (icalendar-tests--test-import
- "SUMMARY:non-recurring
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000"
- "&2003/9/19 09:00-11:30 non-recurring\n"
- "&19/9/2003 09:00-11:30 non-recurring\n"
- "&9/19/2003 09:00-11:30 non-recurring\n")
- (icalendar-tests--test-import
- "SUMMARY:non-recurring allday
-DTSTART;VALUE=DATE-TIME:20030919"
- "&2003/9/19 non-recurring allday\n"
- "&19/9/2003 non-recurring allday\n"
- "&9/19/2003 non-recurring allday\n")
- (icalendar-tests--test-import
- ;; Checkdoc removes trailing blanks. Therefore: format!
- (format "%s\n%s\n%s" "SUMMARY:long " " summary"
- "DTSTART;VALUE=DATE:20030919")
- "&2003/9/19 long summary\n"
- "&19/9/2003 long summary\n"
- "&9/19/2003 long summary\n")
- (icalendar-tests--test-import
- "UID:748f2da0-0d9b-11d8-97af-b4ec8686ea61
-SUMMARY:Sommerferien
-STATUS:TENTATIVE
-CLASS:PRIVATE
-X-MOZILLA-ALARM-DEFAULT-UNITS:Minuten
-X-MOZILLA-RECUR-DEFAULT-INTERVAL:0
-DTSTART;VALUE=DATE:20040719
-DTEND;VALUE=DATE:20040828
-DTSTAMP:20031103T011641Z
-"
- "&%%(and (diary-block 2004 7 19 2004 8 27)) Sommerferien
- Status: TENTATIVE
- Class: PRIVATE
- UID: 748f2da0-0d9b-11d8-97af-b4ec8686ea61
-"
- "&%%(and (diary-block 19 7 2004 27 8 2004)) Sommerferien
- Status: TENTATIVE
- Class: PRIVATE
- UID: 748f2da0-0d9b-11d8-97af-b4ec8686ea61
-"
- "&%%(and (diary-block 7 19 2004 8 27 2004)) Sommerferien
- Status: TENTATIVE
- Class: PRIVATE
- UID: 748f2da0-0d9b-11d8-97af-b4ec8686ea61
-")
- (icalendar-tests--test-import
- "UID
- :04979712-3902-11d9-93dd-8f9f4afe08da
-SUMMARY
- :folded summary
-STATUS
- :TENTATIVE
-CLASS
- :PRIVATE
-X-MOZILLA-ALARM-DEFAULT-LENGTH
- :0
-DTSTART
- :20041123T140000
-DTEND
- :20041123T143000
-DTSTAMP
- :20041118T013430Z
-LAST-MODIFIED
- :20041118T013640Z
-"
- "&2004/11/23 14:00-14:30 folded summary
- Status: TENTATIVE
- Class: PRIVATE
- UID: 04979712-3902-11d9-93dd-8f9f4afe08da\n"
- "&23/11/2004 14:00-14:30 folded summary
- Status: TENTATIVE
- Class: PRIVATE
- UID: 04979712-3902-11d9-93dd-8f9f4afe08da\n"
- "&11/23/2004 14:00-14:30 folded summary
- Status: TENTATIVE
- Class: PRIVATE
- UID: 04979712-3902-11d9-93dd-8f9f4afe08da\n")
-
- (icalendar-tests--test-import
- "UID
- :6161a312-3902-11d9-b512-f764153bb28b
-SUMMARY
- :another example
-STATUS
- :TENTATIVE
-CLASS
- :PRIVATE
-X-MOZILLA-ALARM-DEFAULT-LENGTH
- :0
-DTSTART
- :20041123T144500
-DTEND
- :20041123T154500
-DTSTAMP
- :20041118T013641Z
-"
- "&2004/11/23 14:45-15:45 another example
- Status: TENTATIVE
- Class: PRIVATE
- UID: 6161a312-3902-11d9-b512-f764153bb28b\n"
- "&23/11/2004 14:45-15:45 another example
- Status: TENTATIVE
- Class: PRIVATE
- UID: 6161a312-3902-11d9-b512-f764153bb28b\n"
- "&11/23/2004 14:45-15:45 another example
- Status: TENTATIVE
- Class: PRIVATE
- UID: 6161a312-3902-11d9-b512-f764153bb28b\n"))
-
-(ert-deftest icalendar-import-rrule ()
- (icalendar-tests--test-import
- "SUMMARY:rrule daily
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=DAILY;
-"
- "&%%(and (diary-cyclic 1 2003 9 19)) 09:00-11:30 rrule daily\n"
- "&%%(and (diary-cyclic 1 19 9 2003)) 09:00-11:30 rrule daily\n"
- "&%%(and (diary-cyclic 1 9 19 2003)) 09:00-11:30 rrule daily\n")
- ;; RRULE examples
- (icalendar-tests--test-import
- "SUMMARY:rrule daily
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=DAILY;INTERVAL=2
-"
- "&%%(and (diary-cyclic 2 2003 9 19)) 09:00-11:30 rrule daily\n"
- "&%%(and (diary-cyclic 2 19 9 2003)) 09:00-11:30 rrule daily\n"
- "&%%(and (diary-cyclic 2 9 19 2003)) 09:00-11:30 rrule daily\n")
- (icalendar-tests--test-import
- "SUMMARY:rrule daily with exceptions
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=DAILY;INTERVAL=2
-EXDATE:20030921,20030925
-"
- "&%%(and (not (diary-date 2003 9 25)) (not (diary-date 2003 9 21)) (diary-cyclic 2 2003 9 19)) 09:00-11:30 rrule daily with exceptions\n"
- "&%%(and (not (diary-date 25 9 2003)) (not (diary-date 21 9 2003)) (diary-cyclic 2 19 9 2003)) 09:00-11:30 rrule daily with exceptions\n"
- "&%%(and (not (diary-date 9 25 2003)) (not (diary-date 9 21 2003)) (diary-cyclic 2 9 19 2003)) 09:00-11:30 rrule daily with exceptions\n")
- (icalendar-tests--test-import
- "SUMMARY:rrule weekly
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=WEEKLY;
-"
- "&%%(and (diary-cyclic 7 2003 9 19)) 09:00-11:30 rrule weekly\n"
- "&%%(and (diary-cyclic 7 19 9 2003)) 09:00-11:30 rrule weekly\n"
- "&%%(and (diary-cyclic 7 9 19 2003)) 09:00-11:30 rrule weekly\n")
- (icalendar-tests--test-import
- "SUMMARY:rrule monthly no end
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=MONTHLY;
-"
- "&%%(and (diary-date t t 19) (diary-block 2003 9 19 9999 1 1)) 09:00-11:30 rrule monthly no end\n"
- "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 1 1 9999)) 09:00-11:30 rrule monthly no end\n"
- "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 1 9999)) 09:00-11:30 rrule monthly no end\n")
- (icalendar-tests--test-import
- "SUMMARY:rrule monthly with end
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=MONTHLY;UNTIL=20050819;
-"
- "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2005 8 19)) 09:00-11:30 rrule monthly with end\n"
- "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 8 2005)) 09:00-11:30 rrule monthly with end\n"
- "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 8 19 2005)) 09:00-11:30 rrule monthly with end\n")
- (icalendar-tests--test-import
- "DTSTART;VALUE=DATE:20040815
-DTEND;VALUE=DATE:20040816
-SUMMARY:Maria Himmelfahrt
-RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=8
-"
- "&%%(and (diary-anniversary 2004 8 15)) Maria Himmelfahrt\n"
- "&%%(and (diary-anniversary 15 8 2004)) Maria Himmelfahrt\n"
- "&%%(and (diary-anniversary 8 15 2004)) Maria Himmelfahrt\n")
- (icalendar-tests--test-import
- "SUMMARY:rrule yearly
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=YEARLY;INTERVAL=2
-"
- "&%%(and (diary-anniversary 2003 9 19)) 09:00-11:30 rrule yearly\n" ;FIXME
- "&%%(and (diary-anniversary 19 9 2003)) 09:00-11:30 rrule yearly\n" ;FIXME
- "&%%(and (diary-anniversary 9 19 2003)) 09:00-11:30 rrule yearly\n") ;FIXME
- (icalendar-tests--test-import
- "SUMMARY:rrule count daily short
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=DAILY;COUNT=1;INTERVAL=1
-"
- "&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 9 19)) 09:00-11:30 rrule count daily short\n"
- "&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 19 9 2003)) 09:00-11:30 rrule count daily short\n"
- "&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 9 19 2003)) 09:00-11:30 rrule count daily short\n")
- (icalendar-tests--test-import
- "SUMMARY:rrule count daily long
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=DAILY;COUNT=14;INTERVAL=1
-"
- "&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 10 2)) 09:00-11:30 rrule count daily long\n"
- "&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 2 10 2003)) 09:00-11:30 rrule count daily long\n"
- "&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 10 2 2003)) 09:00-11:30 rrule count daily long\n")
- (icalendar-tests--test-import
- "SUMMARY:rrule count bi-weekly 3 times
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=WEEKLY;COUNT=3;INTERVAL=2
-"
- "&%%(and (diary-cyclic 14 2003 9 19) (diary-block 2003 9 19 2003 10 31)) 09:00-11:30 rrule count bi-weekly 3 times\n"
- "&%%(and (diary-cyclic 14 19 9 2003) (diary-block 19 9 2003 31 10 2003)) 09:00-11:30 rrule count bi-weekly 3 times\n"
- "&%%(and (diary-cyclic 14 9 19 2003) (diary-block 9 19 2003 10 31 2003)) 09:00-11:30 rrule count bi-weekly 3 times\n")
- (icalendar-tests--test-import
- "SUMMARY:rrule count monthly
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=MONTHLY;INTERVAL=1;COUNT=5
-"
- "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 1 19)) 09:00-11:30 rrule count monthly\n"
- "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 1 2004)) 09:00-11:30 rrule count monthly\n"
- "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 19 2004)) 09:00-11:30 rrule count monthly\n")
- (icalendar-tests--test-import
- "SUMMARY:rrule count every second month
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=5
-"
- "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 5 19)) 09:00-11:30 rrule count every second month\n" ;FIXME
- "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 5 2004)) 09:00-11:30 rrule count every second month\n" ;FIXME
- "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 5 19 2004)) 09:00-11:30 rrule count every second month\n") ;FIXME
- (icalendar-tests--test-import
- "SUMMARY:rrule count yearly
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=YEARLY;INTERVAL=1;COUNT=5
-"
- "&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2007 9 19)) 09:00-11:30 rrule count yearly\n"
- "&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2007)) 09:00-11:30 rrule count yearly\n"
- "&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2007)) 09:00-11:30 rrule count yearly\n")
- (icalendar-tests--test-import
- "SUMMARY:rrule count every second year
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=5
-"
- "&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2011 9 19)) 09:00-11:30 rrule count every second year\n" ;FIXME!!!
- "&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2011)) 09:00-11:30 rrule count every second year\n" ;FIXME!!!
- "&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2011)) 09:00-11:30 rrule count every second year\n") ;FIXME!!!
-)
-
-(ert-deftest icalendar-import-duration ()
- ;; duration
- (icalendar-tests--test-import
- "DTSTART;VALUE=DATE:20050217
-SUMMARY:duration
-DURATION:P7D
-"
- "&%%(and (diary-block 2005 2 17 2005 2 23)) duration\n"
- "&%%(and (diary-block 17 2 2005 23 2 2005)) duration\n"
- "&%%(and (diary-block 2 17 2005 2 23 2005)) duration\n")
- (icalendar-tests--test-import
- "UID:20041127T183329Z-18215-1001-4536-49109@andromeda
-DTSTAMP:20041127T183315Z
-LAST-MODIFIED:20041127T183329
-SUMMARY:Urlaub
-DTSTART;VALUE=DATE:20011221
-DTEND;VALUE=DATE:20011221
-RRULE:FREQ=DAILY;UNTIL=20011229;INTERVAL=1;WKST=SU
-CLASS:PUBLIC
-SEQUENCE:1
-CREATED:20041127T183329
-"
- "&%%(and (diary-cyclic 1 2001 12 21) (diary-block 2001 12 21 2001 12 29)) Urlaub
- Class: PUBLIC
- UID: 20041127T183329Z-18215-1001-4536-49109@andromeda\n"
- "&%%(and (diary-cyclic 1 21 12 2001) (diary-block 21 12 2001 29 12 2001)) Urlaub
- Class: PUBLIC
- UID: 20041127T183329Z-18215-1001-4536-49109@andromeda\n"
- "&%%(and (diary-cyclic 1 12 21 2001) (diary-block 12 21 2001 12 29 2001)) Urlaub
- Class: PUBLIC
- UID: 20041127T183329Z-18215-1001-4536-49109@andromeda\n"))
-
-(ert-deftest icalendar-import-bug-6766 ()
- ;;bug#6766 -- multiple byday values in a weekly rrule
- (icalendar-tests--test-import
-"CLASS:PUBLIC
-DTEND;TZID=America/New_York:20100421T120000
-DTSTAMP:20100525T141214Z
-DTSTART;TZID=America/New_York:20100421T113000
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,TH,FR
-SEQUENCE:1
-STATUS:CONFIRMED
-SUMMARY:Scrum
-TRANSP:OPAQUE
-UID:8814e3f9-7482-408f-996c-3bfe486a1262
-END:VEVENT
-BEGIN:VEVENT
-CLASS:PUBLIC
-DTSTAMP:20100525T141214Z
-DTSTART;VALUE=DATE:20100422
-DTEND;VALUE=DATE:20100423
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH
-SEQUENCE:1
-SUMMARY:Tues + Thurs thinking
-TRANSP:OPAQUE
-UID:8814e3f9-7482-408f-996c-3bfe486a1263
-"
-"&%%(and (memq (calendar-day-of-week date) '(1 3 4 5)) (diary-cyclic 1 2010 4 21)) 11:30-12:00 Scrum
- Status: CONFIRMED
- Class: PUBLIC
- UID: 8814e3f9-7482-408f-996c-3bfe486a1262
-&%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 2010 4 22)) Tues + Thurs thinking
- Class: PUBLIC
- UID: 8814e3f9-7482-408f-996c-3bfe486a1263
-"
-"&%%(and (memq (calendar-day-of-week date) '(1 3 4 5)) (diary-cyclic 1 21 4 2010)) 11:30-12:00 Scrum
- Status: CONFIRMED
- Class: PUBLIC
- UID: 8814e3f9-7482-408f-996c-3bfe486a1262
-&%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 22 4 2010)) Tues + Thurs thinking
- Class: PUBLIC
- UID: 8814e3f9-7482-408f-996c-3bfe486a1263
-"
-"&%%(and (memq (calendar-day-of-week date) '(1 3 4 5)) (diary-cyclic 1 4 21 2010)) 11:30-12:00 Scrum
- Status: CONFIRMED
- Class: PUBLIC
- UID: 8814e3f9-7482-408f-996c-3bfe486a1262
-&%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 4 22 2010)) Tues + Thurs thinking
- Class: PUBLIC
- UID: 8814e3f9-7482-408f-996c-3bfe486a1263
-"))
-
-(ert-deftest icalendar-import-multiple-vcalendars ()
- (icalendar-tests--test-import
- "DTSTART;VALUE=DATE:20110723
-SUMMARY:event-1
-"
- "&2011/7/23 event-1\n"
- "&23/7/2011 event-1\n"
- "&7/23/2011 event-1\n")
-
- (icalendar-tests--test-import
- "BEGIN:VCALENDAR
-PRODID:-//Emacs//NONSGML icalendar.el//EN
-VERSION:2.0\nBEGIN:VEVENT
-DTSTART;VALUE=DATE:20110723
-SUMMARY:event-1
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-PRODID:-//Emacs//NONSGML icalendar.el//EN
-VERSION:2.0
-BEGIN:VEVENT
-DTSTART;VALUE=DATE:20110724
-SUMMARY:event-2
-END:VEVENT
-END:VCALENDAR
-BEGIN:VCALENDAR
-PRODID:-//Emacs//NONSGML icalendar.el//EN
-VERSION:2.0
-BEGIN:VEVENT
-DTSTART;VALUE=DATE:20110725
-SUMMARY:event-3a
-END:VEVENT
-BEGIN:VEVENT
-DTSTART;VALUE=DATE:20110725
-SUMMARY:event-3b
-END:VEVENT
-END:VCALENDAR
-"
- "&2011/7/23 event-1\n&2011/7/24 event-2\n&2011/7/25 event-3a\n&2011/7/25 event-3b\n"
- "&23/7/2011 event-1\n&24/7/2011 event-2\n&25/7/2011 event-3a\n&25/7/2011 event-3b\n"
- "&7/23/2011 event-1\n&7/24/2011 event-2\n&7/25/2011 event-3a\n&7/25/2011 event-3b\n"))
-
-(ert-deftest icalendar-import-with-uid ()
- "Perform import test with uid."
- (icalendar-tests--test-import
- "UID:1234567890uid
-SUMMARY:non-recurring
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000"
- "&2003/9/19 09:00-11:30 non-recurring\n UID: 1234567890uid\n"
- "&19/9/2003 09:00-11:30 non-recurring\n UID: 1234567890uid\n"
- "&9/19/2003 09:00-11:30 non-recurring\n UID: 1234567890uid\n"))
-
-(ert-deftest icalendar-import-with-timezone ()
- ;; This is known to fail on MS-Windows, because the test assumes
- ;; Posix features of specifying DST rules.
- :expected-result (if (memq system-type '(windows-nt ms-dos))
- :failed
- :passed)
- ;; bug#11473
- (icalendar-tests--test-import
- "BEGIN:VCALENDAR
-BEGIN:VTIMEZONE
-TZID:fictional, nonexistent, arbitrary
-BEGIN:STANDARD
-DTSTART:20100101T000000
-TZOFFSETFROM:+0200
-TZOFFSETTO:-0200
-RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=01
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:20101201T000000
-TZOFFSETFROM:-0200
-TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
-END:DAYLIGHT
-END:VTIMEZONE
-BEGIN:VEVENT
-SUMMARY:standardtime
-DTSTART;TZID=\"fictional, nonexistent, arbitrary\":20120115T120000
-DTEND;TZID=\"fictional, nonexistent, arbitrary\":20120115T123000
-END:VEVENT
-BEGIN:VEVENT
-SUMMARY:daylightsavingtime
-DTSTART;TZID=\"fictional, nonexistent, arbitrary\":20121215T120000
-DTEND;TZID=\"fictional, nonexistent, arbitrary\":20121215T123000
-END:VEVENT
-END:VCALENDAR"
- ;; "standardtime" begins first sunday in january and is 4 hours behind CET
- ;; "daylightsavingtime" begins first sunday in november and is 1 hour before CET
- "&2012/1/15 15:00-15:30 standardtime
-&2012/12/15 11:00-11:30 daylightsavingtime
-"
- nil
- nil)
- )
-;; ======================================================================
-;; Cycle
-;; ======================================================================
-(defun icalendar-tests--test-cycle (input)
- "Perform cycle test.
-Argument INPUT icalendar event string."
- (with-temp-buffer
- (if (string-match "^BEGIN:VCALENDAR" input)
- (insert input)
- (insert "BEGIN:VCALENDAR\nPRODID:-//Emacs//NONSGML icalendar.el//EN\n")
- (insert "VERSION:2.0\nBEGIN:VEVENT\n")
- (insert input)
- (unless (eq (char-before) ?\n)
- (insert "\n"))
- (insert "END:VEVENT\nEND:VCALENDAR\n"))
- (let ((icalendar-import-format "%s%d%l%o%t%u%c%U")
- (icalendar-import-format-summary "%s")
- (icalendar-import-format-location "\n Location: %s")
- (icalendar-import-format-description "\n Desc: %s")
- (icalendar-import-format-organizer "\n Organizer: %s")
- (icalendar-import-format-status "\n Status: %s")
- (icalendar-import-format-url "\n URL: %s")
- (icalendar-import-format-class "\n Class: %s")
- (icalendar-import-format-class "\n UID: %s")
- (icalendar-export-alarms nil))
- (dolist (calendar-date-style '(iso european american))
- (icalendar-tests--do-test-cycle)))))
-
-(defun icalendar-tests--do-test-cycle ()
- "Actually perform import/export cycle test."
- (let ((temp-diary (make-temp-file "icalendar-test-diary"))
- (temp-ics (make-temp-file "icalendar-test-ics"))
- (org-input (buffer-substring-no-properties (point-min) (point-max))))
-
- (unwind-protect
- (progn
- ;; step 1: import
- (icalendar-import-buffer temp-diary t t)
-
- ;; step 2: export what was just imported
- (save-excursion
- (find-file temp-diary)
- (icalendar-export-region (point-min) (point-max) temp-ics))
-
- ;; compare the output of step 2 with the input of step 1
- (save-excursion
- (find-file temp-ics)
- (goto-char (point-min))
- ;;(when (re-search-forward "\nUID:.*\n" nil t)
- ;;(replace-match "\n"))
- (let ((cycled (buffer-substring-no-properties (point-min) (point-max))))
- (should (string= org-input cycled)))))
- ;; clean up
- (kill-buffer (find-buffer-visiting temp-diary))
- (with-current-buffer (find-buffer-visiting temp-ics)
- (set-buffer-modified-p nil)
- (kill-buffer (current-buffer)))
- (delete-file temp-diary)
- (delete-file temp-ics))))
-
-(ert-deftest icalendar-cycle ()
- "Perform cycling tests.
-Take care to avoid auto-generated UIDs here."
- (icalendar-tests--test-cycle
- "UID:dummyuid
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-SUMMARY:Cycletest
-")
- (icalendar-tests--test-cycle
- "UID:blah
-DTSTART;VALUE=DATE-TIME:20030919T090000
-DTEND;VALUE=DATE-TIME:20030919T113000
-SUMMARY:Cycletest
-DESCRIPTION:beschreibung!
-LOCATION:nowhere
-ORGANIZER:ulf
-")
- (icalendar-tests--test-cycle
- "UID:4711
-DTSTART;VALUE=DATE:19190909
-DTEND;VALUE=DATE:19190910
-RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=09;BYMONTHDAY=09
-SUMMARY:and diary-anniversary
-"))
-
-;; ======================================================================
-;; Real world
-;; ======================================================================
-(ert-deftest icalendar-real-world ()
- "Perform real-world tests, as gathered from problem reports."
- ;; This is known to fail on MS-Windows, since it doesn't support DST
- ;; specification with month and day.
- :expected-result (if (memq system-type '(windows-nt ms-dos))
- :failed
- :passed)
- ;; 2003-05-29
- (icalendar-tests--test-import
- "BEGIN:VCALENDAR
-METHOD:REQUEST
-PRODID:Microsoft CDO for Microsoft Exchange
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Kolkata, Chennai, Mumbai, New Delhi
-X-MICROSOFT-CDO-TZID:23
-BEGIN:STANDARD
-DTSTART:16010101T000000
-TZOFFSETFROM:+0530
-TZOFFSETTO:+0530
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:16010101T000000
-TZOFFSETFROM:+0530
-TZOFFSETTO:+0530
-END:DAYLIGHT
-END:VTIMEZONE
-BEGIN:VEVENT
-DTSTAMP:20030509T043439Z
-DTSTART;TZID=\"Kolkata, Chennai, Mumbai, New Delhi\":20030509T103000
-SUMMARY:On-Site Interview
-UID:040000008200E00074C5B7101A82E0080000000080B6DE661216C301000000000000000
- 010000000DB823520692542408ED02D7023F9DFF9
-ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=\"Xxxxx
- xxx Xxxxxxxxxxxx\":MAILTO:xxxxxxxx@xxxxxxx.com
-ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=\"Yyyyyyy Y
- yyyy\":MAILTO:yyyyyyy@yyyyyyy.com
-ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=\"Zzzz Zzzz
- zz\":MAILTO:zzzzzz@zzzzzzz.com
-ORGANIZER;CN=\"Aaaaaa Aaaaa\":MAILTO:aaaaaaa@aaaaaaa.com
-LOCATION:Cccc
-DTEND;TZID=\"Kolkata, Chennai, Mumbai, New Delhi\":20030509T153000
-DESCRIPTION:10:30am - Blah
-SEQUENCE:0
-PRIORITY:5
-CLASS:
-CREATED:20030509T043439Z
-LAST-MODIFIED:20030509T043459Z
-STATUS:CONFIRMED
-TRANSP:OPAQUE
-X-MICROSOFT-CDO-BUSYSTATUS:BUSY
-X-MICROSOFT-CDO-INSTTYPE:0
-X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
-X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
-X-MICROSOFT-CDO-IMPORTANCE:1
-X-MICROSOFT-CDO-OWNERAPPTID:126441427
-BEGIN:VALARM
-ACTION:DISPLAY
-DESCRIPTION:REMINDER
-TRIGGER;RELATED=START:-PT00H15M00S
-END:VALARM
-END:VEVENT
-END:VCALENDAR"
- nil
- "&9/5/2003 07:00-12:00 On-Site Interview
- Desc: 10:30am - Blah
- Location: Cccc
- Organizer: MAILTO:aaaaaaa@aaaaaaa.com
- Status: CONFIRMED
- UID: 040000008200E00074C5B7101A82E0080000000080B6DE661216C301000000000000000010000000DB823520692542408ED02D7023F9DFF9
-"
- "&5/9/2003 07:00-12:00 On-Site Interview
- Desc: 10:30am - Blah
- Location: Cccc
- Organizer: MAILTO:aaaaaaa@aaaaaaa.com
- Status: CONFIRMED
- UID: 040000008200E00074C5B7101A82E0080000000080B6DE661216C301000000000000000010000000DB823520692542408ED02D7023F9DFF9
-")
-
- ;; created with http://apps.marudot.com/ical/
- (icalendar-tests--test-import
- "BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:-//www.marudot.com//iCal Event Maker
-X-WR-CALNAME:Test
-CALSCALE:GREGORIAN
-BEGIN:VTIMEZONE
-TZID:Asia/Tehran
-TZURL:http://tzurl.org/zoneinfo-outlook/Asia/Tehran
-X-LIC-LOCATION:Asia/Tehran
-BEGIN:STANDARD
-TZOFFSETFROM:+0330
-TZOFFSETTO:+0330
-TZNAME:IRST
-DTSTART:19700101T000000
-END:STANDARD
-END:VTIMEZONE
-BEGIN:VEVENT
-DTSTAMP:20141116T171439Z
-UID:20141116T171439Z-678877132@marudot.com
-DTSTART;TZID=\"Asia/Tehran\":20141116T070000
-DTEND;TZID=\"Asia/Tehran\":20141116T080000
-SUMMARY:NoDST
-DESCRIPTION:Test event from timezone without DST
-LOCATION:Everywhere
-END:VEVENT
-END:VCALENDAR"
- nil
- "&16/11/2014 04:30-05:30 NoDST
- Desc: Test event from timezone without DST
- Location: Everywhere
- UID: 20141116T171439Z-678877132@marudot.com
-"
- "&11/16/2014 04:30-05:30 NoDST
- Desc: Test event from timezone without DST
- Location: Everywhere
- UID: 20141116T171439Z-678877132@marudot.com
-")
-
-
- ;; 2003-06-18 a
- (icalendar-tests--test-import
- "DTSTAMP:20030618T195512Z
-DTSTART;TZID=\"Mountain Time (US & Canada)\":20030623T110000
-SUMMARY:Dress Rehearsal for XXXX-XXXX
-UID:040000008200E00074C5B7101A82E00800000000608AA7DA9835C301000000000000000
- 0100000007C3A6D65EE726E40B7F3D69A23BD567E
-ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=\"AAAAA,AAA
- AA (A-AAAAAAA,ex1)\":MAILTO:aaaaa_aaaaa@aaaaa.com
-ORGANIZER;CN=\"ABCD,TECHTRAINING
- (A-Americas,exgen1)\":MAILTO:xxx@xxxxx.com
-LOCATION:555 or TN 555-5555 ID 5555 & NochWas (see below)
-DTEND;TZID=\"Mountain Time (US & Canada)\":20030623T120000
-DESCRIPTION:753 Zeichen hier radiert
-SEQUENCE:0
-PRIORITY:5
-CLASS:
-CREATED:20030618T195518Z
-LAST-MODIFIED:20030618T195527Z
-STATUS:CONFIRMED
-TRANSP:OPAQUE
-X-MICROSOFT-CDO-BUSYSTATUS:BUSY
-X-MICROSOFT-CDO-INSTTYPE:0
-X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
-X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
-X-MICROSOFT-CDO-IMPORTANCE:1
-X-MICROSOFT-CDO-OWNERAPPTID:1022519251
-BEGIN:VALARM
-ACTION:DISPLAY
-DESCRIPTION:REMINDER
-TRIGGER;RELATED=START:-PT00H15M00S
-END:VALARM"
- nil
- "&23/6/2003 11:00-12:00 Dress Rehearsal for XXXX-XXXX
- Desc: 753 Zeichen hier radiert
- Location: 555 or TN 555-5555 ID 5555 & NochWas (see below)
- Organizer: MAILTO:xxx@xxxxx.com
- Status: CONFIRMED
- UID: 040000008200E00074C5B7101A82E00800000000608AA7DA9835C3010000000000000000100000007C3A6D65EE726E40B7F3D69A23BD567E
-"
- "&6/23/2003 11:00-12:00 Dress Rehearsal for XXXX-XXXX
- Desc: 753 Zeichen hier radiert
- Location: 555 or TN 555-5555 ID 5555 & NochWas (see below)
- Organizer: MAILTO:xxx@xxxxx.com
- Status: CONFIRMED
- UID: 040000008200E00074C5B7101A82E00800000000608AA7DA9835C3010000000000000000100000007C3A6D65EE726E40B7F3D69A23BD567E
-")
- ;; 2003-06-18 b -- uses timezone
- (icalendar-tests--test-import
- "BEGIN:VCALENDAR
-METHOD:REQUEST
-PRODID:Microsoft CDO for Microsoft Exchange
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Mountain Time (US & Canada)
-X-MICROSOFT-CDO-TZID:12
-BEGIN:STANDARD
-DTSTART:16010101T020000
-TZOFFSETFROM:-0600
-TZOFFSETTO:-0700
-RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:16010101T020000
-TZOFFSETFROM:-0700
-TZOFFSETTO:-0600
-RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=4;BYDAY=1SU
-END:DAYLIGHT
-END:VTIMEZONE
-BEGIN:VEVENT
-DTSTAMP:20030618T230323Z
-DTSTART;TZID=\"Mountain Time (US & Canada)\":20030623T090000
-SUMMARY:Updated: Dress Rehearsal for ABC01-15
-UID:040000008200E00074C5B7101A82E00800000000608AA7DA9835C301000000000000000
- 0100000007C3A6D65EE726E40B7F3D69A23BD567E
-ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;X-REPLYTIME=20030618T20
- 0700Z;RSVP=TRUE;CN=\"AAAAA,AAAAAA
-\(A-AAAAAAA,ex1)\":MAILTO:aaaaaa_aaaaa@aaaaa
- .com
-ORGANIZER;CN=\"ABCD,TECHTRAINING
-\(A-Americas,exgen1)\":MAILTO:bbb@bbbbb.com
-LOCATION:123 or TN 123-1234 ID abcd & SonstWo (see below)
-DTEND;TZID=\"Mountain Time (US & Canada)\":20030623T100000
-DESCRIPTION:Viele Zeichen standen hier früher
-SEQUENCE:0
-PRIORITY:5
-CLASS:
-CREATED:20030618T230326Z
-LAST-MODIFIED:20030618T230335Z
-STATUS:CONFIRMED
-TRANSP:OPAQUE
-X-MICROSOFT-CDO-BUSYSTATUS:BUSY
-X-MICROSOFT-CDO-INSTTYPE:0
-X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
-X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
-X-MICROSOFT-CDO-IMPORTANCE:1
-X-MICROSOFT-CDO-OWNERAPPTID:1022519251
-BEGIN:VALARM
-ACTION:DISPLAY
-DESCRIPTION:REMINDER
-TRIGGER;RELATED=START:-PT00H15M00S
-END:VALARM
-END:VEVENT
-END:VCALENDAR"
- nil
- "&23/6/2003 17:00-18:00 Updated: Dress Rehearsal for ABC01-15
- Desc: Viele Zeichen standen hier früher
- Location: 123 or TN 123-1234 ID abcd & SonstWo (see below)
- Organizer: MAILTO:bbb@bbbbb.com
- Status: CONFIRMED
- UID: 040000008200E00074C5B7101A82E00800000000608AA7DA9835C3010000000000000000100000007C3A6D65EE726E40B7F3D69A23BD567E
-"
- "&6/23/2003 17:00-18:00 Updated: Dress Rehearsal for ABC01-15
- Desc: Viele Zeichen standen hier früher
- Location: 123 or TN 123-1234 ID abcd & SonstWo (see below)
- Organizer: MAILTO:bbb@bbbbb.com
- Status: CONFIRMED
- UID: 040000008200E00074C5B7101A82E00800000000608AA7DA9835C3010000000000000000100000007C3A6D65EE726E40B7F3D69A23BD567E
-")
- ;; export 2004-10-28 block entries
- (icalendar-tests--test-export
- nil
- nil
- "-*- mode: text; fill-column: 256;-*-
-
->>> block entries:
-
-%%(diary-block 11 8 2004 11 10 2004) Nov 8-10 aa
-"
- "DTSTART;VALUE=DATE:20041108
-DTEND;VALUE=DATE:20041111
-SUMMARY:Nov 8-10 aa")
-
- (icalendar-tests--test-export
- nil
- nil
- "%%(diary-block 12 13 2004 12 17 2004) Dec 13-17 bb"
- "DTSTART;VALUE=DATE:20041213
-DTEND;VALUE=DATE:20041218
-SUMMARY:Dec 13-17 bb")
-
- (icalendar-tests--test-export
- nil
- nil
- "%%(diary-block 2 3 2005 2 4 2005) Feb 3-4 cc"
- "DTSTART;VALUE=DATE:20050203
-DTEND;VALUE=DATE:20050205
-SUMMARY:Feb 3-4 cc")
-
- (icalendar-tests--test-export
- nil
- nil
- "%%(diary-block 4 24 2005 4 29 2005) April 24-29 dd"
- "DTSTART;VALUE=DATE:20050424
-DTEND;VALUE=DATE:20050430
-SUMMARY:April 24-29 dd
-")
- (icalendar-tests--test-export
- nil
- nil
- "%%(diary-block 5 30 2005 6 1 2005) may 30 - June 1: ee"
- "DTSTART;VALUE=DATE:20050530
-DTEND;VALUE=DATE:20050602
-SUMMARY:may 30 - June 1: ee")
-
- (icalendar-tests--test-export
- nil
- nil
- "%%(diary-block 6 6 2005 6 8 2005) ff"
- "DTSTART;VALUE=DATE:20050606
-DTEND;VALUE=DATE:20050609
-SUMMARY:ff")
-
- ;; export 2004-10-28 anniversary entries
- (icalendar-tests--test-export
- nil
- nil
- "
->>> anniversaries:
-
-%%(diary-anniversary 3 28 1991) aa birthday (%d years old)"
- "DTSTART;VALUE=DATE:19910328
-DTEND;VALUE=DATE:19910329
-RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=03;BYMONTHDAY=28
-SUMMARY:aa birthday (%d years old)
-")
-
- (icalendar-tests--test-export
- nil
- nil
- "%%(diary-anniversary 5 17 1957) bb birthday (%d years old)"
- "DTSTART;VALUE=DATE:19570517
-DTEND;VALUE=DATE:19570518
-RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=05;BYMONTHDAY=17
-SUMMARY:bb birthday (%d years old)")
-
- (icalendar-tests--test-export
- nil
- nil
- "%%(diary-anniversary 6 8 1997) cc birthday (%d years old)"
- "DTSTART;VALUE=DATE:19970608
-DTEND;VALUE=DATE:19970609
-RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=06;BYMONTHDAY=08
-SUMMARY:cc birthday (%d years old)")
-
- (icalendar-tests--test-export
- nil
- nil
- "%%(diary-anniversary 7 22 1983) dd (%d years ago...!)"
- "DTSTART;VALUE=DATE:19830722
-DTEND;VALUE=DATE:19830723
-RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=07;BYMONTHDAY=22
-SUMMARY:dd (%d years ago...!)")
-
- (icalendar-tests--test-export
- nil
- nil
- "%%(diary-anniversary 8 1 1988) ee birthday (%d years old)"
- "DTSTART;VALUE=DATE:19880801
-DTEND;VALUE=DATE:19880802
-RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=08;BYMONTHDAY=01
-SUMMARY:ee birthday (%d years old)")
-
- (icalendar-tests--test-export
- nil
- nil
- "%%(diary-anniversary 9 21 1957) ff birthday (%d years old)"
- "DTSTART;VALUE=DATE:19570921
-DTEND;VALUE=DATE:19570922
-RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=09;BYMONTHDAY=21
-SUMMARY:ff birthday (%d years old)")
-
-
- ;; FIXME!
-
- ;; export 2004-10-28 monthly, weekly entries
-
- ;; (icalendar-tests--test-export
- ;; nil
- ;; "
- ;; >>> ------------ monthly:
-
- ;; */27/* 10:00 blah blah"
- ;; "xxx")
-
- (icalendar-tests--test-export
- nil
- nil
- ">>> ------------ my week:
-
-Monday 13:00 MAC"
- "DTSTART;VALUE=DATE-TIME:20000103T130000
-DTEND;VALUE=DATE-TIME:20000103T140000
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
-SUMMARY:MAC")
-
- (icalendar-tests--test-export
- nil
- nil
- "Monday 15:00 a1"
- "DTSTART;VALUE=DATE-TIME:20000103T150000
-DTEND;VALUE=DATE-TIME:20000103T160000
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
-SUMMARY:a1")
-
-
- (icalendar-tests--test-export
- nil
- nil
- "Monday 16:00-17:00 a2"
- "DTSTART;VALUE=DATE-TIME:20000103T160000
-DTEND;VALUE=DATE-TIME:20000103T170000
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
-SUMMARY:a2")
-
- (icalendar-tests--test-export
- nil
- nil
- "Tuesday 11:30-13:00 a3"
- "DTSTART;VALUE=DATE-TIME:20000104T113000
-DTEND;VALUE=DATE-TIME:20000104T130000
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU
-SUMMARY:a3")
-
- (icalendar-tests--test-export
- nil
- nil
- "Tuesday 15:00 a4"
- "DTSTART;VALUE=DATE-TIME:20000104T150000
-DTEND;VALUE=DATE-TIME:20000104T160000
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU
-SUMMARY:a4")
-
- (icalendar-tests--test-export
- nil
- nil
- "Wednesday 13:00 a5"
- "DTSTART;VALUE=DATE-TIME:20000105T130000
-DTEND;VALUE=DATE-TIME:20000105T140000
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE
-SUMMARY:a5")
-
- (icalendar-tests--test-export
- nil
- nil
- "Wednesday 11:30-13:30 a6"
- "DTSTART;VALUE=DATE-TIME:20000105T113000
-DTEND;VALUE=DATE-TIME:20000105T133000
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE
-SUMMARY:a6")
-
- (icalendar-tests--test-export
- nil
- nil
- "Wednesday 15:00 s1"
- "DTSTART;VALUE=DATE-TIME:20000105T150000
-DTEND;VALUE=DATE-TIME:20000105T160000
-RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE
-SUMMARY:s1")
-
-
- ;; export 2004-10-28 regular entries
- (icalendar-tests--test-export
- nil
- nil
- "
->>> regular diary entries:
-
-Oct 12 2004, 14:00 Tue: [2004-10-12] q1"
- "DTSTART;VALUE=DATE-TIME:20041012T140000
-DTEND;VALUE=DATE-TIME:20041012T150000
-SUMMARY:Tue: [2004-10-12] q1")
-
- ;; 2004-11-19
- (icalendar-tests--test-import
- "BEGIN:VCALENDAR
-VERSION
- :2.0
-PRODID
- :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
-BEGIN:VEVENT
-SUMMARY
- :Jjjjj & Wwwww
-STATUS
- :TENTATIVE
-CLASS
- :PRIVATE
-X-MOZILLA-ALARM-DEFAULT-LENGTH
- :0
-DTSTART
- :20041123T140000
-DTEND
- :20041123T143000
-DTSTAMP
- :20041118T013430Z
-LAST-MODIFIED
- :20041118T013640Z
-END:VEVENT
-BEGIN:VEVENT
-SUMMARY
- :BB Aaaaaaaa Bbbbb
-STATUS
- :TENTATIVE
-CLASS
- :PRIVATE
-X-MOZILLA-ALARM-DEFAULT-LENGTH
- :0
-DTSTART
- :20041123T144500
-DTEND
- :20041123T154500
-DTSTAMP
- :20041118T013641Z
-END:VEVENT
-BEGIN:VEVENT
-SUMMARY
- :Hhhhhhhh
-STATUS
- :TENTATIVE
-CLASS
- :PRIVATE
-X-MOZILLA-ALARM-DEFAULT-LENGTH
- :0
-DTSTART
- :20041123T110000
-DTEND
- :20041123T120000
-DTSTAMP
- :20041118T013831Z
-END:VEVENT
-BEGIN:VEVENT
-SUMMARY
- :MMM Aaaaaaaaa
-STATUS
- :TENTATIVE
-CLASS
- :PRIVATE
-X-MOZILLA-ALARM-DEFAULT-LENGTH
- :0
-X-MOZILLA-RECUR-DEFAULT-INTERVAL
- :2
-RRULE
- :FREQ=WEEKLY;INTERVAL=2;BYDAY=FR
-DTSTART
- :20041112T140000
-DTEND
- :20041112T183000
-DTSTAMP
- :20041118T014117Z
-END:VEVENT
-BEGIN:VEVENT
-SUMMARY
- :Rrrr/Cccccc ii Aaaaaaaa
-DESCRIPTION
- :Vvvvv Rrrr aaa Cccccc
-STATUS
- :TENTATIVE
-CLASS
- :PRIVATE
-X-MOZILLA-ALARM-DEFAULT-LENGTH
- :0
-DTSTART
- ;VALUE=DATE
- :20041119
-DTEND
- ;VALUE=DATE
- :20041120
-DTSTAMP
- :20041118T013107Z
-LAST-MODIFIED
- :20041118T014203Z
-END:VEVENT
-BEGIN:VEVENT
-SUMMARY
- :Wwww aa hhhh
-STATUS
- :TENTATIVE
-CLASS
- :PRIVATE
-X-MOZILLA-ALARM-DEFAULT-LENGTH
- :0
-RRULE
- :FREQ=WEEKLY;INTERVAL=1;BYDAY=MO
-DTSTART
- ;VALUE=DATE
- :20041101
-DTEND
- ;VALUE=DATE
- :20041102
-DTSTAMP
- :20041118T014045Z
-LAST-MODIFIED
- :20041118T023846Z
-END:VEVENT
-END:VCALENDAR
-"
- nil
- "&23/11/2004 14:00-14:30 Jjjjj & Wwwww
- Status: TENTATIVE
- Class: PRIVATE
-&23/11/2004 14:45-15:45 BB Aaaaaaaa Bbbbb
- Status: TENTATIVE
- Class: PRIVATE
-&23/11/2004 11:00-12:00 Hhhhhhhh
- Status: TENTATIVE
- Class: PRIVATE
-&%%(and (diary-cyclic 14 12 11 2004)) 14:00-18:30 MMM Aaaaaaaaa
- Status: TENTATIVE
- Class: PRIVATE
-&%%(and (diary-block 19 11 2004 19 11 2004)) Rrrr/Cccccc ii Aaaaaaaa
- Desc: Vvvvv Rrrr aaa Cccccc
- Status: TENTATIVE
- Class: PRIVATE
-&%%(and (diary-cyclic 7 1 11 2004)) Wwww aa hhhh
- Status: TENTATIVE
- Class: PRIVATE
-"
- "&11/23/2004 14:00-14:30 Jjjjj & Wwwww
- Status: TENTATIVE
- Class: PRIVATE
-&11/23/2004 14:45-15:45 BB Aaaaaaaa Bbbbb
- Status: TENTATIVE
- Class: PRIVATE
-&11/23/2004 11:00-12:00 Hhhhhhhh
- Status: TENTATIVE
- Class: PRIVATE
-&%%(and (diary-cyclic 14 11 12 2004)) 14:00-18:30 MMM Aaaaaaaaa
- Status: TENTATIVE
- Class: PRIVATE
-&%%(and (diary-block 11 19 2004 11 19 2004)) Rrrr/Cccccc ii Aaaaaaaa
- Desc: Vvvvv Rrrr aaa Cccccc
- Status: TENTATIVE
- Class: PRIVATE
-&%%(and (diary-cyclic 7 11 1 2004)) Wwww aa hhhh
- Status: TENTATIVE
- Class: PRIVATE
-")
-
- ;; 2004-09-09 pg
- (icalendar-tests--test-export
- "%%(diary-block 1 1 2004 4 1 2004) Urlaub"
- nil
- nil
- "DTSTART;VALUE=DATE:20040101
-DTEND;VALUE=DATE:20040105
-SUMMARY:Urlaub")
-
- ;; 2004-10-25 pg
- (icalendar-tests--test-export
- nil
- "5 11 2004 Bla Fasel"
- nil
- "DTSTART;VALUE=DATE:20041105
-DTEND;VALUE=DATE:20041106
-SUMMARY:Bla Fasel")
-
- ;; 2004-10-30 pg
- (icalendar-tests--test-export
- nil
- "2 Nov 2004 15:00-16:30 Zahnarzt"
- nil
- "DTSTART;VALUE=DATE-TIME:20041102T150000
-DTEND;VALUE=DATE-TIME:20041102T163000
-SUMMARY:Zahnarzt")
-
- ;; 2005-02-07 lt
- (icalendar-tests--test-import
- "UID
- :b60d398e-1dd1-11b2-a159-cf8cb05139f4
-SUMMARY
- :Waitangi Day
-DESCRIPTION
- :abcdef
-CATEGORIES
- :Public Holiday
-STATUS
- :CONFIRMED
-CLASS
- :PRIVATE
-DTSTART
- ;VALUE=DATE
- :20050206
-DTEND
- ;VALUE=DATE
- :20050207
-DTSTAMP
- :20050128T011209Z"
- nil
- "&%%(and (diary-block 6 2 2005 6 2 2005)) Waitangi Day
- Desc: abcdef
- Status: CONFIRMED
- Class: PRIVATE
- UID: b60d398e-1dd1-11b2-a159-cf8cb05139f4
-"
- "&%%(and (diary-block 2 6 2005 2 6 2005)) Waitangi Day
- Desc: abcdef
- Status: CONFIRMED
- Class: PRIVATE
- UID: b60d398e-1dd1-11b2-a159-cf8cb05139f4
-")
-
- ;; 2005-03-01 lt
- (icalendar-tests--test-import
- "DTSTART;VALUE=DATE:20050217
-SUMMARY:Hhhhhh Aaaaa ii Aaaaaaaa
-UID:6AFA7558-6994-11D9-8A3A-000A95A0E830-RID
-DTSTAMP:20050118T210335Z
-DURATION:P7D"
- nil
- "&%%(and (diary-block 17 2 2005 23 2 2005)) Hhhhhh Aaaaa ii Aaaaaaaa
- UID: 6AFA7558-6994-11D9-8A3A-000A95A0E830-RID\n"
- "&%%(and (diary-block 2 17 2005 2 23 2005)) Hhhhhh Aaaaa ii Aaaaaaaa
- UID: 6AFA7558-6994-11D9-8A3A-000A95A0E830-RID\n")
-
- ;; 2005-03-23 lt
- (icalendar-tests--test-export
- nil
- "&%%(diary-cyclic 7 8 2 2005) 16:00-16:45 [WORK] Pppp"
- nil
- "DTSTART;VALUE=DATE-TIME:20050208T160000
-DTEND;VALUE=DATE-TIME:20050208T164500
-RRULE:FREQ=DAILY;INTERVAL=7
-SUMMARY:[WORK] Pppp
-")
-
- ;; 2005-05-27 eu
- (icalendar-tests--test-export
- nil
- nil
- ;; FIXME: colon not allowed!
- ;;"Nov 1: NNN Wwwwwwww Wwwww - Aaaaaa Pppppppp rrrrrr ddd oo Nnnnnnnn 30"
- "Nov 1 NNN Wwwwwwww Wwwww - Aaaaaa Pppppppp rrrrrr ddd oo Nnnnnnnn 30"
- "DTSTART;VALUE=DATE:19001101
-DTEND;VALUE=DATE:19001102
-RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=11;BYMONTHDAY=1
-SUMMARY:NNN Wwwwwwww Wwwww - Aaaaaa Pppppppp rrrrrr ddd oo Nnnnnnnn 30
-")
-
- ;; bug#11473
- (icalendar-tests--test-import
- "BEGIN:VCALENDAR
-METHOD:REQUEST
-PRODID:Microsoft Exchange Server 2007
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
-BEGIN:STANDARD
-DTSTART:16010101T030000
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
-END:STANDARD
-BEGIN:DAYLIGHT
-DTSTART:16010101T020000
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
-END:DAYLIGHT
-END:VTIMEZONE
-BEGIN:VEVENT
-ORGANIZER;CN=\"A. Luser\":MAILTO:a.luser@foo.com
-ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=\"Luser, Oth
- er\":MAILTO:other.luser@foo.com
-DESCRIPTION;LANGUAGE=en-US:\nWhassup?\n\n
-SUMMARY;LANGUAGE=en-US:Query
-DTSTART;TZID=\"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna\"
- :20120515T150000
-DTEND;TZID=\"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna\":2
- 0120515T153000
-UID:040000008200E00074C5B7101A82E0080000000020FFAED0CFEFCC01000000000000000
- 010000000575268034ECDB649A15349B1BF240F15
-RECURRENCE-ID;TZID=\"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, V
- ienna\":20120515T170000
-CLASS:PUBLIC
-PRIORITY:5
-DTSTAMP:20120514T153645Z
-TRANSP:OPAQUE
-STATUS:CONFIRMED
-SEQUENCE:15
-LOCATION;LANGUAGE=en-US:phone
-X-MICROSOFT-CDO-APPT-SEQUENCE:15
-X-MICROSOFT-CDO-OWNERAPPTID:1907632092
-X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE
-X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
-X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
-X-MICROSOFT-CDO-IMPORTANCE:1
-X-MICROSOFT-CDO-INSTTYPE:3
-BEGIN:VALARM
-ACTION:DISPLAY
-DESCRIPTION:REMINDER
-TRIGGER;RELATED=START:-PT15M
-END:VALARM
-END:VEVENT
-END:VCALENDAR"
- nil
- "&15/5/2012 15:00-15:30 Query
- Location: phone
- Organizer: MAILTO:a.luser@foo.com
- Status: CONFIRMED
- Class: PUBLIC
- UID: 040000008200E00074C5B7101A82E0080000000020FFAED0CFEFCC01000000000000000010000000575268034ECDB649A15349B1BF240F15
-" nil)
-)
-
-(provide 'icalendar-tests)
-;;; icalendar-tests.el ends here
diff --git a/test/automated/imenu-test.el b/test/automated/imenu-test.el
deleted file mode 100644
index 984e620bb18..00000000000
--- a/test/automated/imenu-test.el
+++ /dev/null
@@ -1,88 +0,0 @@
-;;; imenu-tests.el --- Test suite for imenu.
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Masatake YAMATO <yamato@redhat.com>
-;; Keywords: tools convenience
-
-;; 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)
-(require 'imenu)
-
-;; (imenu-simple-scan-deftest-gather-strings-from-list
-;; '(nil t 'a (0 . "x") ("c" . "d") ("a" 0 "b") ))
-;; => ("b" "a" "d" "c" "x")
-(defun imenu-simple-scan-deftest-gather-strings-from-list(input)
- "Gather strings from INPUT, a list."
- (let ((result ()))
- (while input
- (cond
- ((stringp input)
- (setq result (cons input result)
- input nil))
- ((atom input)
- (setq input nil))
- ((listp (car input))
- (setq result (append
- (imenu-simple-scan-deftest-gather-strings-from-list (car input))
- result)
- input (cdr input)))
- ((stringp (car input))
- (setq result (cons (car input) result)
- input (cdr input)))
- (t
- (setq input (cdr input)))))
- result))
-
-(defmacro imenu-simple-scan-deftest (name doc major-mode content expected-items)
- "Generate an ert test for mode-own imenu expression.
-Run `imenu-create-index-function' at the buffer which content is
-CONTENT with MAJOR-MODE. A generated test runs `imenu-create-index-function'
-at the buffer which content is CONTENT with MAJOR-MODE. Then it compares a list
-of strings which are picked up from the result with EXPECTED-ITEMS."
- (let ((xname (intern (concat "imenu-simple-scan-deftest-" (symbol-name name)))))
- `(ert-deftest ,xname ()
- ,doc
- (with-temp-buffer
- (insert ,content)
- (funcall ',major-mode)
- (let ((result-items (sort (imenu-simple-scan-deftest-gather-strings-from-list
- (funcall imenu-create-index-function))
- #'string-lessp))
- (expected-items (sort (copy-sequence ,expected-items) #'string-lessp)))
- (should (equal result-items expected-items))
- )))))
-
-(imenu-simple-scan-deftest sh "Test imenu expression for sh-mode." sh-mode "a()
-{
-}
-function b
-{
-}
-function c()
-{
-}
-function ABC_D()
-{
-}
-" '("a" "b" "c" "ABC_D"))
-
-(provide 'imenu-tests)
-
-;;; imenu-tests.el ends here
diff --git a/test/automated/info-xref.el b/test/automated/info-xref.el
deleted file mode 100644
index 67f963beb00..00000000000
--- a/test/automated/info-xref.el
+++ /dev/null
@@ -1,147 +0,0 @@
-;;; info-xref.el --- tests for info-xref.el
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'ert)
-(require 'info-xref)
-
-(defun info-xref-test-internal (body result)
- "Body of a basic info-xref ert test.
-BODY is a string from an info buffer.
-RESULT is a list (NBAD NGOOD NUNAVAIL)."
- (get-buffer-create info-xref-output-buffer)
- (setq info-xref-xfile-alist nil)
- (require 'info)
- (let ((Info-directory-list '("."))
- Info-additional-directory-list)
- (info-xref-with-output
- (with-temp-buffer
- (insert body)
- (info-xref-check-buffer))))
- (should (equal result (list info-xref-bad info-xref-good info-xref-unavail)))
- ;; If there was an error, we can leave this around.
- (kill-buffer info-xref-output-buffer))
-
-(ert-deftest info-xref-test-node-crossref ()
- "Test parsing of @xref{node,crossref,,manual} with Texinfo 4/5."
- (info-xref-test-internal "
-*Note crossref: (manual-foo)node. Texinfo 4/5 format with crossref.
-" '(0 0 1)))
-
-(ert-deftest info-xref-test-node-4 ()
- "Test parsing of @xref{node,,,manual} with Texinfo 4."
- (info-xref-test-internal "
-*Note node: (manual-foo)node. Texinfo 4 format with no crossref.
-" '(0 0 1)))
-
-(ert-deftest info-xref-test-node-5 ()
- "Test parsing of @xref{node,,,manual} with Texinfo 5."
- (info-xref-test-internal "
-*Note (manual-foo)node::. Texinfo 5 format with no crossref.
-" '(0 0 1)))
-
-;; TODO Easier to have static data files in the repo?
-(defun info-xref-test-write-file (file body)
- "Write BODY to texi FILE."
- (with-temp-buffer
- (insert "\
-\\input texinfo
-@setfilename "
- (format "%s.info\n" (file-name-sans-extension file))
- "\
-@settitle test
-
-@ifnottex
-@node Top
-@top test
-@end ifnottex
-
-@menu
-* Chapter One::
-@end menu
-
-@node Chapter One
-@chapter Chapter One
-
-text.
-
-"
- body
- "\
-@bye
-"
- )
- (write-region nil nil file nil 'silent))
- (should (equal 0 (call-process "makeinfo" file))))
-
-(ert-deftest info-xref-test-makeinfo ()
- "Test that info-xref can parse basic makeinfo output."
- (skip-unless (executable-find "makeinfo"))
- (let ((tempfile (make-temp-file "info-xref-test" nil ".texi"))
- (tempfile2 (make-temp-file "info-xref-test2" nil ".texi"))
- (errflag t))
- (unwind-protect
- (progn
- ;; tempfile contains xrefs to various things, including tempfile2.
- (info-xref-test-write-file
- tempfile
- (concat "\
-@xref{nodename,,,missing,Missing Manual}.
-
-@xref{nodename,crossref,title,missing,Missing Manual}.
-
-@xref{Chapter One}.
-
-@xref{Chapter One,Something}.
-
-"
- (format "@xref{Chapter One,,,%s,Present Manual}.\n"
- (file-name-sans-extension (file-name-nondirectory
- tempfile2)))))
- ;; Something for tempfile to xref to.
- (info-xref-test-write-file tempfile2 "")
- (require 'info)
- (save-window-excursion
- (let ((Info-directory-list
- (list
- (or (file-name-directory tempfile) ".")))
- Info-additional-directory-list)
- (info-xref-check (format "%s.info" (file-name-sans-extension
- tempfile))))
- (should (equal (list info-xref-bad info-xref-good
- info-xref-unavail)
- '(0 1 2)))
- (setq errflag nil)
- ;; If there was an error, we can leave this around.
- (kill-buffer info-xref-output-buffer)))
- ;; Useful diagnostic in case of problems.
- (if errflag
- (with-temp-buffer
- (call-process "makeinfo" nil t nil "--version")
- (message "%s" (buffer-string))))
- (mapc 'delete-file (list tempfile tempfile2
- (format "%s.info" (file-name-sans-extension
- tempfile))
- (format "%s.info" (file-name-sans-extension
- tempfile2)))))))
-
-;;; info-xref.el ends here
diff --git a/test/automated/inotify-test.el b/test/automated/inotify-test.el
deleted file mode 100644
index 187b59054cd..00000000000
--- a/test/automated/inotify-test.el
+++ /dev/null
@@ -1,64 +0,0 @@
-;;; inotify-tests.el --- Test suite for inotify. -*- lexical-binding: t -*-
-
-;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
-
-;; Author: Rüdiger Sonderfeld <ruediger@c-plusplus.de>
-;; Keywords: internal
-;; Human-Keywords: 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)
-
-(declare-function inotify-add-watch "inotify.c" (file-name aspect callback))
-(declare-function inotify-rm-watch "inotify.c" (watch-descriptor))
-
-;; (ert-deftest filewatch-file-watch-aspects-check ()
-;; "Test whether `file-watch' properly checks the aspects."
-;; (let ((temp-file (make-temp-file "filewatch-aspects")))
-;; (should (stringp temp-file))
-;; (should-error (file-watch temp-file 'wrong nil)
-;; :type 'error)
-;; (should-error (file-watch temp-file '(modify t) nil)
-;; :type 'error)
-;; (should-error (file-watch temp-file '(modify all-modify) nil)
-;; :type 'error)
-;; (should-error (file-watch temp-file '(access wrong modify) nil)
-;; :type 'error)))
-
-(ert-deftest inotify-file-watch-simple ()
- "Test if watching a normal file works."
-
- (skip-unless (featurep 'inotify))
- (let ((temp-file (make-temp-file "inotify-simple"))
- (events 0))
- (let ((wd
- (inotify-add-watch temp-file t (lambda (_ev)
- (setq events (1+ events))))))
- (unwind-protect
- (progn
- (with-temp-file temp-file
- (insert "Foo\n"))
- (read-event nil nil 5)
- (should (> events 0)))
- (inotify-rm-watch wd)
- (delete-file temp-file)))))
-
-(provide 'inotify-tests)
-
-;;; inotify-tests.el ends here.
diff --git a/test/automated/isearch-tests.el b/test/automated/isearch-tests.el
deleted file mode 100644
index d60c229c8f7..00000000000
--- a/test/automated/isearch-tests.el
+++ /dev/null
@@ -1,32 +0,0 @@
-;;; isearch-tests.el --- Tests for isearch.el -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(require 'ert)
-
-(ert-deftest isearch--test-update ()
- (with-temp-buffer
- (setq isearch--current-buffer (current-buffer)))
- (with-temp-buffer
- (isearch-update)
- (should (equal isearch--current-buffer (current-buffer)))))
-
-(provide 'isearch-tests)
-;;; isearch-tests.el ends here
diff --git a/test/automated/json-tests.el b/test/automated/json-tests.el
deleted file mode 100644
index 8f0cd6f0857..00000000000
--- a/test/automated/json-tests.el
+++ /dev/null
@@ -1,101 +0,0 @@
-;;; json-tests.el --- Test suite for json.el
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov <dgutov@yandex.ru>
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(require 'ert)
-(require 'json)
-
-(ert-deftest test-json-plist-reverse ()
- (should (equal (json--plist-reverse '()) '()))
- (should (equal (json--plist-reverse '(:a 1)) '(:a 1)))
- (should (equal (json--plist-reverse '(:a 1 :b 2 :c 3))
- '(:c 3 :b 2 :a 1))))
-
-(ert-deftest test-json-plist-to-alist ()
- (should (equal (json--plist-to-alist '()) '()))
- (should (equal (json--plist-to-alist '(:a 1)) '((:a . 1))))
- (should (equal (json--plist-to-alist '(:a 1 :b 2 :c 3))
- '((:a . 1) (:b . 2) (:c . 3)))))
-
-(ert-deftest test-json-encode-plist ()
- (let ((plist '(:a 1 :b 2)))
- (should (equal (json-encode plist) "{\"a\":1,\"b\":2}"))))
-
-(ert-deftest json-encode-simple-alist ()
- (should (equal (json-encode '((a . 1)
- (b . 2)))
- "{\"a\":1,\"b\":2}")))
-
-(ert-deftest test-json-encode-hash-table ()
- (let ((hash-table (make-hash-table))
- (json-encoding-object-sort-predicate 'string<))
- (puthash :a 1 hash-table)
- (puthash :b 2 hash-table)
- (puthash :c 3 hash-table)
- (should (equal (json-encode hash-table)
- "{\"a\":1,\"b\":2,\"c\":3}"))))
-
-(ert-deftest test-json-encode-alist-with-sort-predicate ()
- (let ((alist '((:c . 3) (:a . 1) (:b . 2)))
- (json-encoding-object-sort-predicate 'string<))
- (should (equal (json-encode alist) "{\"a\":1,\"b\":2,\"c\":3}"))))
-
-(ert-deftest test-json-encode-plist-with-sort-predicate ()
- (let ((plist '(:c 3 :a 1 :b 2))
- (json-encoding-object-sort-predicate 'string<))
- (should (equal (json-encode plist) "{\"a\":1,\"b\":2,\"c\":3}"))))
-
-(ert-deftest json-read-simple-alist ()
- (let ((json-object-type 'alist))
- (should (equal (json-read-from-string "{\"a\": 1, \"b\": 2}")
- '((a . 1)
- (b . 2))))))
-
-(ert-deftest json-encode-string-with-special-chars ()
- (should (equal (json-encode-string "a\n\fb")
- "\"a\\n\\fb\""))
- (should (equal (json-encode-string "\nasdфыв\u001f\u007ffgh\t")
- "\"\\nasdфыв\\u001f\u007ffgh\\t\"")))
-
-(ert-deftest json-read-string-with-special-chars ()
- (should (equal (json-read-from-string "\"\\nasd\\u0444\\u044b\\u0432fgh\\t\"")
- "\nasdфывfgh\t")))
-
-(ert-deftest test-json-path-to-position-with-objects ()
- (let* ((json-string "{\"foo\": {\"bar\": {\"baz\": \"value\"}}}")
- (matched-path (json-path-to-position 32 json-string)))
- (should (equal (plist-get matched-path :path) '("foo" "bar" "baz")))
- (should (equal (plist-get matched-path :match-start) 25))
- (should (equal (plist-get matched-path :match-end) 32))))
-
-(ert-deftest test-json-path-to-position-with-arrays ()
- (let* ((json-string "{\"foo\": [\"bar\", [\"baz\"]]}")
- (matched-path (json-path-to-position 20 json-string)))
- (should (equal (plist-get matched-path :path) '("foo" 1 0)))
- (should (equal (plist-get matched-path :match-start) 18))
- (should (equal (plist-get matched-path :match-end) 23))))
-
-(ert-deftest test-json-path-to-position-no-match ()
- (let* ((json-string "{\"foo\": {\"bar\": \"baz\"}}")
- (matched-path (json-path-to-position 5 json-string)))
- (should (null matched-path))))
-
-(provide 'json-tests)
-;;; json-tests.el ends here
diff --git a/test/automated/keymap-tests.el b/test/automated/keymap-tests.el
deleted file mode 100644
index 973b2407391..00000000000
--- a/test/automated/keymap-tests.el
+++ /dev/null
@@ -1,43 +0,0 @@
-;;; keymap-tests.el --- Test suite for src/keymap.c
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Juanma Barranquero <lekktu@gmail.com>
-
-;; 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 keymap-store_in_keymap-FASTINT-on-nonchars ()
- "Check for bug fixed in \"Fix assertion violation in define-key\",
-commit 86c19714b097aa477d339ed99ffb5136c755a046."
- (let ((def (lookup-key Buffer-menu-mode-map [32])))
- (unwind-protect
- (progn
- (should-not (eq def 'undefined))
- ;; This will cause an assertion violation if the bug is present.
- ;; We could run an inferior Emacs process and check for the return
- ;; status, but in some environments an assertion failure triggers
- ;; an abort dialog that requires user intervention anyway.
- (define-key Buffer-menu-mode-map [(32 . 32)] 'undefined)
- (should (eq (lookup-key Buffer-menu-mode-map [32]) 'undefined)))
- (define-key Buffer-menu-mode-map [32] def))))
-
-(provide 'keymap-tests)
-
-;;; keymap-tests.el ends here
diff --git a/test/automated/let-alist.el b/test/automated/let-alist.el
deleted file mode 100644
index 65727dc3af5..00000000000
--- a/test/automated/let-alist.el
+++ /dev/null
@@ -1,91 +0,0 @@
-;;; let-alist.el --- tests for file handling. -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
-
-;; 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)
-(require 'cl-lib)
-(require 'let-alist)
-
-(ert-deftest let-alist-surface-test ()
- "Tests basic macro expansion for `let-alist'."
- (should
- (equal '(let ((symbol data))
- (let ((.test-one (cdr (assq 'test-one symbol)))
- (.test-two (cdr (assq 'test-two symbol))))
- (list .test-one .test-two
- .test-two .test-two)))
- (cl-letf (((symbol-function #'make-symbol) (lambda (x) 'symbol)))
- (macroexpand
- '(let-alist data (list .test-one .test-two
- .test-two .test-two))))))
- (should
- (equal
- (let ((.external "ext")
- (.external.too "et"))
- (let-alist '((test-two . 0)
- (test-three . 1)
- (sublist . ((foo . 2)
- (bar . 3))))
- (list .test-one .test-two .test-three
- .sublist.foo .sublist.bar
- ..external ..external.too)))
- (list nil 0 1 2 3 "ext" "et"))))
-
-(ert-deftest let-alist-cons ()
- (should
- (equal
- (let ((.external "ext")
- (.external.too "et"))
- (let-alist '((test-two . 0)
- (test-three . 1)
- (sublist . ((foo . 2)
- (bar . 3))))
- (list `(, .test-one . , .test-two)
- .sublist.bar ..external)))
- (list '(nil . 0) 3 "ext"))))
-
-(defvar let-alist--test-counter 0
- "Used to count number of times a function is called.")
-
-(ert-deftest let-alist-evaluate-once ()
- "Check that the alist argument is only evaluated once."
- (let ((let-alist--test-counter 0))
- (should
- (equal
- (let-alist (list
- (cons 'test-two (cl-incf let-alist--test-counter))
- (cons 'test-three (cl-incf let-alist--test-counter)))
- (list .test-one .test-two .test-two .test-three .cl-incf))
- '(nil 1 1 2 nil)))))
-
-(ert-deftest let-alist-remove-dot ()
- "Remove first dot from symbol."
- (should (equal (let-alist--remove-dot 'hi) 'hi))
- (should (equal (let-alist--remove-dot '.hi) 'hi))
- (should (equal (let-alist--remove-dot '..hi) '.hi)))
-
-(ert-deftest let-alist-list-to-sexp ()
- "Check that multiple dots are handled correctly."
- (should (= 1 (eval (let-alist--list-to-sexp '(a b c d) ''((d (c (b (a . 1)))))))))
- (should (equal (let-alist--access-sexp '.foo.bar.baz 'var)
- '(cdr (assq 'baz (cdr (assq 'bar (cdr (assq 'foo var))))))))
- (should (equal (let-alist--access-sexp '..foo.bar.baz 'var) '.foo.bar.baz)))
-
-;;; let-alist.el ends here
diff --git a/test/automated/lexbind-tests.el b/test/automated/lexbind-tests.el
deleted file mode 100644
index dd60cd6db41..00000000000
--- a/test/automated/lexbind-tests.el
+++ /dev/null
@@ -1,75 +0,0 @@
-;;; lexbind-tests.el --- Testing the lexbind byte-compiler
-
-;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
-
-;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
-;; Keywords:
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'ert)
-
-(defconst lexbind-tests
- `(
- (let ((f #'car))
- (let ((f (lambda (x) (cons (funcall f x) (cdr x)))))
- (funcall f '(1 . 2))))
- )
- "List of expression for test.
-Each element will be executed by interpreter and with
-bytecompiled code, and their results compared.")
-
-
-
-(defun lexbind-check-1 (pat)
- "Return non-nil if PAT is the same whether directly evalled or compiled."
- (let ((warning-minimum-log-level :emergency)
- (byte-compile-warnings nil)
- (v0 (condition-case nil
- (eval pat t)
- (error nil)))
- (v1 (condition-case nil
- (funcall (let ((lexical-binding t))
- (byte-compile `(lambda nil ,pat))))
- (error nil))))
- (equal v0 v1)))
-
-(put 'lexbind-check-1 'ert-explainer 'lexbind-explain-1)
-
-(defun lexbind-explain-1 (pat)
- (let ((v0 (condition-case nil
- (eval pat t)
- (error nil)))
- (v1 (condition-case nil
- (funcall (let ((lexical-binding t))
- (byte-compile (list 'lambda nil pat))))
- (error nil))))
- (format "Expression `%s' gives `%s' if directly evalled, `%s' if compiled."
- pat v0 v1)))
-
-(ert-deftest lexbind-tests ()
- "Test the Emacs byte compiler lexbind handling."
- (dolist (pat lexbind-tests)
- (should (lexbind-check-1 pat))))
-
-
-
-(provide 'lexbind-tests)
-;;; lexbind-tests.el ends here
diff --git a/test/automated/libxml-tests.el b/test/automated/libxml-tests.el
deleted file mode 100644
index aa97b30f73c..00000000000
--- a/test/automated/libxml-tests.el
+++ /dev/null
@@ -1,74 +0,0 @@
-;;; libxml-parse-tests.el --- Test suite for libxml parsing.
-
-;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
-
-;; Author: Ulf Jasper <ulf.jasper@web.de>
-;; Keywords: internal
-;; Human-Keywords: 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'ert)
-
-(defvar libxml-tests--data-comments-preserved
- `(;; simple case
- ("<?xml version=\"1.0\"?><foo baz=\"true\">bar</foo>"
- . (foo ((baz . "true")) "bar"))
- ;; toplevel comments -- first document child must not get lost
- (,(concat "<?xml version=\"1.0\"?><foo>bar</foo><!--comment-1-->"
- "<!--comment-2-->")
- . (top nil (foo nil "bar") (comment nil "comment-1")
- (comment nil "comment-2")))
- (,(concat "<?xml version=\"1.0\"?><!--comment-a--><foo a=\"b\">"
- "<bar>blub</bar></foo><!--comment-b--><!--comment-c-->")
- . (top nil (comment nil "comment-a") (foo ((a . "b")) (bar nil "blub"))
- (comment nil "comment-b") (comment nil "comment-c"))))
- "Alist of XML strings and their expected parse trees for preserved comments.")
-
-(defvar libxml-tests--data-comments-discarded
- `(;; simple case
- ("<?xml version=\"1.0\"?><foo baz=\"true\">bar</foo>"
- . (foo ((baz . "true")) "bar"))
- ;; toplevel comments -- first document child must not get lost
- (,(concat "<?xml version=\"1.0\"?><foo>bar</foo><!--comment-1-->"
- "<!--comment-2-->")
- . (foo nil "bar"))
- (,(concat "<?xml version=\"1.0\"?><!--comment-a--><foo a=\"b\">"
- "<bar>blub</bar></foo><!--comment-b--><!--comment-c-->")
- . (foo ((a . "b")) (bar nil "blub"))))
- "Alist of XML strings and their expected parse trees for discarded comments.")
-
-
-(ert-deftest libxml-tests ()
- "Test libxml."
- (when (fboundp 'libxml-parse-xml-region)
- (with-temp-buffer
- (dolist (test libxml-tests--data-comments-preserved)
- (erase-buffer)
- (insert (car test))
- (should (equal (cdr test)
- (libxml-parse-xml-region (point-min) (point-max)))))
- (dolist (test libxml-tests--data-comments-discarded)
- (erase-buffer)
- (insert (car test))
- (should (equal (cdr test)
- (libxml-parse-xml-region (point-min) (point-max) nil t)))))))
-
-;;; libxml-tests.el ends here
diff --git a/test/automated/man-tests.el b/test/automated/man-tests.el
deleted file mode 100644
index adfeff8e7e3..00000000000
--- a/test/automated/man-tests.el
+++ /dev/null
@@ -1,118 +0,0 @@
-;;; man-tests.el --- Test suite for man.
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Wolfgang Jenkner <wjenkner@inode.at>
-;; Keywords: help, internal, unix
-
-;; 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)
-(require 'man)
-
-(defconst man-tests-parse-man-k-tests
- '(;; GNU/Linux: man-db-2.6.1
- ("\
-sin (3) - sine function
-sinf (3) - sine function
-sinl (3) - sine function"
- . (#("sin(3)" 0 6 (help-echo "sine function")) #("sinf(3)" 0 7 (help-echo "sine function")) #("sinl(3)" 0 7 (help-echo "sine function"))))
- ;; GNU/Linux: man-1.6g
- ("\
-sin (3) - sine function
-sinf [sin] (3) - sine function
-sinl [sin] (3) - sine function"
- . (#("sin(3)" 0 6 (help-echo "sine function")) #("sinf(3)" 0 7 (help-echo "sine function")) #("sinl(3)" 0 7 (help-echo "sine function"))))
- ;; FreeBSD 9
- ("\
-sin(3), sinf(3), sinl(3) - sine functions"
- . (#("sin(3)" 0 6 (help-echo "sine functions")) #("sinf(3)" 0 7 (help-echo "sine functions")) #("sinl(3)" 0 7 (help-echo "sine functions"))))
- ;; SunOS, Solaris
- ;; http://docs.oracle.com/cd/E19455-01/805-6331/usradm-7/index.html
- ;; SunOS 4
- ("\
-tset, reset (1) - establish or restore terminal characteristics"
- . (#("tset(1)" 0 7 (help-echo "establish or restore terminal characteristics")) #("reset(1)" 0 8 (help-echo "establish or restore terminal characteristics"))))
- ;; SunOS 5.7, Solaris
- ("\
-reset tset (1b) - establish or restore terminal characteristics
-tset tset (1b) - establish or restore terminal characteristics"
- . (#("reset(1b)" 0 8 (help-echo "establish or restore terminal characteristics")) #("tset(1b)" 0 7 (help-echo "establish or restore terminal characteristics"))))
- ;; Minix 3
- ;; http://www.minix3.org/manpages/html5/whatis.html
- ("\
-cawf, nroff (1) - C version of the nroff-like, Amazingly Workable (text) Formatter
-whatis (5) - database of online manual pages"
- . (#("cawf(1)" 0 7 (help-echo "C version of the nroff-like, Amazingly Workable (text) Formatter")) #("nroff(1)" 0 8 (help-echo "C version of the nroff-like, Amazingly Workable (text) Formatter")) #("whatis(5)" 0 9 (help-echo "database of online manual pages"))))
- ;; HP-UX
- ;; http://docstore.mik.ua/manuals/hp-ux/en/B2355-60130/man.1.html
- ;; Assuming that the line break in the zgrep description was
- ;; introduced by the man page formatting.
- ("\
-grep, egrep, fgrep (1) - search a file for a pattern
-zgrep(1) - search possibly compressed files for a regular expression"
- . (#("grep(1)" 0 7 (help-echo "search a file for a pattern")) #("egrep(1)" 0 8 (help-echo "search a file for a pattern")) #("fgrep(1)" 0 8 (help-echo "search a file for a pattern")) #("zgrep(1)" 0 8 (help-echo "search possibly compressed files for a regular expression"))))
- ;; AIX
- ;; http://pic.dhe.ibm.com/infocenter/aix/v7r1/topic/com.ibm.aix.cmds/doc/aixcmds6/whatis.htm
- ("\
-ls(1) -Displays the contents of a directory."
- . (#("ls(1)" 0 5 (help-echo "Displays the contents of a directory."))))
- ;; https://www.ibm.com/developerworks/mydeveloperworks/blogs/cgaix/entry/catman_0703_102_usr_lbin_mkwhatis_the_error_number_is_1?lang=en
- ("\
-loopmount(1) - Associate an image file to a loopback device."
- . (#("loopmount(1)" 0 12 (help-echo "Associate an image file to a loopback device."))))
- )
- "List of tests for `Man-parse-man-k'.
-Each element is a cons cell whose car is a string containing
-man -k output. That should result in the table which is stored
-in the cdr of the element.")
-
-(defun man-tests-name-equal-p (name description string)
- (and (equal name string)
- (not (next-single-property-change 0 'help-echo string))
- (equal (get-text-property 0 'help-echo string) description)))
-
-(defun man-tests-parse-man-k-test-case (test)
- (let ((temp-buffer (get-buffer-create " *test-man*"))
- (man-k-output (car test)))
- (unwind-protect
- (save-window-excursion
- (with-current-buffer temp-buffer
- (erase-buffer)
- (insert man-k-output)
- (let ((result (Man-parse-man-k))
- (checklist (cdr test)))
- (while (and checklist result
- (man-tests-name-equal-p
- (car checklist)
- (get-text-property 0 'help-echo
- (car checklist))
- (pop result)))
- (pop checklist))
- (and (null checklist) (null result)))))
- (and (buffer-name temp-buffer)
- (kill-buffer temp-buffer)))))
-
-(ert-deftest man-tests ()
- "Test man."
- (dolist (test man-tests-parse-man-k-tests)
- (should (man-tests-parse-man-k-test-case test))))
-
-(provide 'man-tests)
-
-;;; man-tests.el ends here
diff --git a/test/automated/map-tests.el b/test/automated/map-tests.el
deleted file mode 100644
index 2a7fcc39d41..00000000000
--- a/test/automated/map-tests.el
+++ /dev/null
@@ -1,331 +0,0 @@
-;;; map-tests.el --- Tests for map.el -*- lexical-binding:t -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Nicolas Petton <nicolas@petton.fr>
-;; Maintainer: emacs-devel@gnu.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/>.
-
-;;; Commentary:
-
-;; Tests for map.el
-
-;;; Code:
-
-(require 'ert)
-(require 'map)
-
-(defmacro with-maps-do (var &rest body)
- "Successively bind VAR to an alist, vector and hash-table.
-Each map is built from the following alist data:
-'((0 . 3) (1 . 4) (2 . 5)).
-Evaluate BODY for each created map.
-
-\(fn (var map) body)"
- (declare (indent 1) (debug t))
- (let ((alist (make-symbol "alist"))
- (vec (make-symbol "vec"))
- (ht (make-symbol "ht")))
- `(let ((,alist (list (cons 0 3)
- (cons 1 4)
- (cons 2 5)))
- (,vec (vector 3 4 5))
- (,ht (make-hash-table)))
- (puthash 0 3 ,ht)
- (puthash 1 4 ,ht)
- (puthash 2 5 ,ht)
- (dolist (,var (list ,alist ,vec ,ht))
- ,@body))))
-
-(ert-deftest test-map-elt ()
- (with-maps-do map
- (should (= 3 (map-elt map 0)))
- (should (= 4 (map-elt map 1)))
- (should (= 5 (map-elt map 2)))
- (should (null (map-elt map -1)))
- (should (null (map-elt map 4)))))
-
-(ert-deftest test-map-elt-default ()
- (with-maps-do map
- (should (= 5 (map-elt map 7 5)))))
-
-(ert-deftest test-map-elt-with-nil-value ()
- (should (null (map-elt '((a . 1)
- (b))
- 'b
- '2))))
-
-(ert-deftest test-map-put ()
- (with-maps-do map
- (setf (map-elt map 2) 'hello)
- (should (eq (map-elt map 2) 'hello)))
- (with-maps-do map
- (map-put map 2 'hello)
- (should (eq (map-elt map 2) 'hello)))
- (let ((ht (make-hash-table)))
- (setf (map-elt ht 2) 'a)
- (should (eq (map-elt ht 2)
- 'a)))
- (let ((alist '((0 . a) (1 . b) (2 . c))))
- (setf (map-elt alist 2) 'a)
- (should (eq (map-elt alist 2)
- 'a)))
- (let ((vec [3 4 5]))
- (should-error (setf (map-elt vec 3) 6))))
-
-(ert-deftest test-map-put-return-value ()
- (let ((ht (make-hash-table)))
- (should (eq (map-put ht 'a 'hello) ht))))
-
-(ert-deftest test-map-delete ()
- (with-maps-do map
- (map-delete map 1)
- (should (null (map-elt map 1))))
- (with-maps-do map
- (map-delete map -2)
- (should (null (map-elt map -2)))))
-
-(ert-deftest test-map-delete-return-value ()
- (let ((ht (make-hash-table)))
- (should (eq (map-delete ht 'a) ht))))
-
-(ert-deftest test-map-nested-elt ()
- (let ((vec [a b [c d [e f]]]))
- (should (eq (map-nested-elt vec '(2 2 0)) 'e)))
- (let ((alist '((a . 1)
- (b . ((c . 2)
- (d . 3)
- (e . ((f . 4)
- (g . 5))))))))
- (should (eq (map-nested-elt alist '(b e f))
- 4)))
- (let ((ht (make-hash-table)))
- (setf (map-elt ht 'a) 1)
- (setf (map-elt ht 'b) (make-hash-table))
- (setf (map-elt (map-elt ht 'b) 'c) 2)
- (should (eq (map-nested-elt ht '(b c))
- 2))))
-
-(ert-deftest test-map-nested-elt-default ()
- (let ((vec [a b [c d]]))
- (should (null (map-nested-elt vec '(2 3))))
- (should (null (map-nested-elt vec '(2 1 1))))
- (should (= 4 (map-nested-elt vec '(2 1 1) 4)))))
-
-(ert-deftest test-mapp ()
- (should (mapp nil))
- (should (mapp '((a . b) (c . d))))
- (should (mapp '(a b c d)))
- (should (mapp []))
- (should (mapp [1 2 3]))
- (should (mapp (make-hash-table)))
- (should (mapp "hello"))
- (should (not (mapp 1)))
- (should (not (mapp 'hello))))
-
-(ert-deftest test-map-keys ()
- (with-maps-do map
- (should (equal (map-keys map) '(0 1 2))))
- (should (null (map-keys nil)))
- (should (null (map-keys []))))
-
-(ert-deftest test-map-values ()
- (with-maps-do map
- (should (equal (map-values map) '(3 4 5)))))
-
-(ert-deftest test-map-pairs ()
- (with-maps-do map
- (should (equal (map-pairs map) '((0 . 3)
- (1 . 4)
- (2 . 5))))))
-
-(ert-deftest test-map-length ()
- (let ((ht (make-hash-table)))
- (puthash 'a 1 ht)
- (puthash 'b 2 ht)
- (puthash 'c 3 ht)
- (puthash 'd 4 ht)
- (should (= 0 (map-length nil)))
- (should (= 0 (map-length [])))
- (should (= 0 (map-length (make-hash-table))))
- (should (= 5 (map-length [0 1 2 3 4])))
- (should (= 2 (map-length '((a . 1) (b . 2)))))
- (should (= 4 (map-length ht)))))
-
-(ert-deftest test-map-copy ()
- (with-maps-do map
- (let ((copy (map-copy map)))
- (should (equal (map-keys map) (map-keys copy)))
- (should (equal (map-values map) (map-values copy)))
- (should (not (eq map copy))))))
-
-(ert-deftest test-map-apply ()
- (with-maps-do map
- (should (equal (map-apply (lambda (k v) (cons (int-to-string k) v))
- map)
- '(("0" . 3) ("1" . 4) ("2" . 5)))))
- (let ((vec [a b c]))
- (should (equal (map-apply (lambda (k v) (cons (1+ k) v))
- vec)
- '((1 . a)
- (2 . b)
- (3 . c))))))
-
-(ert-deftest test-map-keys-apply ()
- (with-maps-do map
- (should (equal (map-keys-apply (lambda (k) (int-to-string k))
- map)
- '("0" "1" "2"))))
- (let ((vec [a b c]))
- (should (equal (map-keys-apply (lambda (k) (1+ k))
- vec)
- '(1 2 3)))))
-
-(ert-deftest test-map-values-apply ()
- (with-maps-do map
- (should (equal (map-values-apply (lambda (v) (1+ v))
- map)
- '(4 5 6))))
- (let ((vec [a b c]))
- (should (equal (map-values-apply (lambda (v) (symbol-name v))
- vec)
- '("a" "b" "c")))))
-
-(ert-deftest test-map-filter ()
- (with-maps-do map
- (should (equal (map-keys (map-filter (lambda (_k v)
- (<= 4 v))
- map))
- '(1 2)))
- (should (null (map-filter (lambda (k _v)
- (eq 'd k))
- map))))
- (should (null (map-filter (lambda (_k v)
- (eq 3 v))
- [1 2 4 5])))
- (should (equal (map-filter (lambda (k _v)
- (eq 3 k))
- [1 2 4 5])
- '((3 . 5)))))
-
-(ert-deftest test-map-remove ()
- (with-maps-do map
- (should (equal (map-keys (map-remove (lambda (_k v)
- (>= v 4))
- map))
- '(0)))
- (should (equal (map-keys (map-remove (lambda (k _v)
- (eq 'd k))
- map))
- (map-keys map))))
- (should (equal (map-remove (lambda (_k v)
- (eq 3 v))
- [1 2 4 5])
- '((0 . 1)
- (1 . 2)
- (2 . 4)
- (3 . 5))))
- (should (null (map-remove (lambda (k _v)
- (>= k 0))
- [1 2 4 5]))))
-
-(ert-deftest test-map-empty-p ()
- (should (map-empty-p nil))
- (should (not (map-empty-p '((a . b) (c . d)))))
- (should (map-empty-p []))
- (should (not (map-empty-p [1 2 3])))
- (should (map-empty-p (make-hash-table)))
- (should (not (map-empty-p "hello")))
- (should (map-empty-p "")))
-
-(ert-deftest test-map-contains-key ()
- (should (map-contains-key '((a . 1) (b . 2)) 'a))
- (should (not (map-contains-key '((a . 1) (b . 2)) 'c)))
- (should (map-contains-key '(("a" . 1)) "a"))
- (should (not (map-contains-key '(("a" . 1)) "a" #'eq)))
- (should (map-contains-key [a b c] 2))
- (should (not (map-contains-key [a b c] 3))))
-
-(ert-deftest test-map-some ()
- (with-maps-do map
- (should (map-some (lambda (k _v)
- (eq 1 k))
- map))
- (should-not (map-some (lambda (k _v)
- (eq 'd k))
- map)))
- (let ((vec [a b c]))
- (should (map-some (lambda (k _v)
- (> k 1))
- vec))
- (should-not (map-some (lambda (k _v)
- (> k 3))
- vec))))
-
-(ert-deftest test-map-every-p ()
- (with-maps-do map
- (should (map-every-p (lambda (k _v)
- k)
- map))
- (should (not (map-every-p (lambda (_k _v)
- nil)
- map))))
- (let ((vec [a b c]))
- (should (map-every-p (lambda (k _v)
- (>= k 0))
- vec))
- (should (not (map-every-p (lambda (k _v)
- (> k 3))
- vec)))))
-
-(ert-deftest test-map-into ()
- (let* ((alist '((a . 1) (b . 2)))
- (ht (map-into alist 'hash-table)))
- (should (hash-table-p ht))
- (should (equal (map-into (map-into alist 'hash-table) 'list)
- alist))
- (should (listp (map-into ht 'list)))
- (should (equal (map-keys (map-into (map-into ht 'list) 'hash-table))
- (map-keys ht)))
- (should (equal (map-values (map-into (map-into ht 'list) 'hash-table))
- (map-values ht)))
- (should (null (map-into nil 'list)))
- (should (map-empty-p (map-into nil 'hash-table)))
- (should-error (map-into [1 2 3] 'string))))
-
-(ert-deftest test-map-let ()
- (map-let (foo bar baz) '((foo . 1) (bar . 2))
- (should (= foo 1))
- (should (= bar 2))
- (should (null baz)))
- (map-let (('foo a)
- ('bar b)
- ('baz c))
- '((foo . 1) (bar . 2))
- (should (= a 1))
- (should (= b 2))
- (should (null c))))
-
-(ert-deftest test-map-merge-with ()
- (should (equal (map-merge-with 'list #'+
- '((1 . 2))
- '((1 . 3) (2 . 4))
- '((1 . 1) (2 . 5) (3 . 0)))
- '((3 . 0) (2 . 9) (1 . 6)))))
-
-(provide 'map-tests)
-;;; map-tests.el ends here
diff --git a/test/automated/message-mode-tests.el b/test/automated/message-mode-tests.el
deleted file mode 100644
index 49a72b0e67a..00000000000
--- a/test/automated/message-mode-tests.el
+++ /dev/null
@@ -1,60 +0,0 @@
-;;; message-mode-tests.el --- Tests for message-mode -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: João Távora <joaotavora@gmail.com>
-
-;; 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/>.
-
-;;; Commentary:
-
-;; This file contains tests for message-mode.
-
-;;; Code:
-
-(require 'message)
-(require 'ert)
-(require 'ert-x)
-
-(ert-deftest message-mode-propertize ()
- (with-temp-buffer
- (unwind-protect
- (let (message-auto-save-directory)
- (message-mode)
- (insert "here's an opener (\n"
- "here's a sad face :-(\n"
- "> here's citing someone with an opener (\n"
- "and here's a closer ")
- (let ((last-command-event ?\)))
- (ert-simulate-command '(self-insert-command 1)))
- ;; Syntax propertization doesn't kick in batch mode
- (when noninteractive
- (syntax-propertize (point-max)))
- (backward-sexp)
- (should (string= "here's an opener "
- (buffer-substring-no-properties
- (line-beginning-position)
- (point))))
- (forward-sexp)
- (should (string= "and here's a closer )"
- (buffer-substring-no-properties
- (line-beginning-position)
- (point)))))
- (set-buffer-modified-p nil))))
-
-(provide 'message-mode-tests)
-
-;;; message-mode-tests.el ends here
diff --git a/test/automated/mule-util.el b/test/automated/mule-util.el
deleted file mode 100644
index 24b56c0969b..00000000000
--- a/test/automated/mule-util.el
+++ /dev/null
@@ -1,84 +0,0 @@
-;;; mule-util --- tests for international/mule-util.el
-
-;; Copyright (C) 2002-2015 Free Software Foundation, Inc.
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'ert)
-(require 'mule-util)
-
-(defconst mule-util-test-truncate-data
- '((("" 0) . "")
- (("x" 1) . "x")
- (("xy" 1) . "x")
- (("xy" 2 1) . "y")
- (("xy" 0) . "")
- (("xy" 3) . "xy")
- (("中" 0) . "")
- (("中" 1) . "")
- (("中" 2) . "中")
- (("中" 1 nil ? ) . " ")
- (("中文" 3 1 ? ) . " ")
- (("x中x" 2) . "x")
- (("x中x" 3) . "x中")
- (("x中x" 3) . "x中")
- (("x中x" 4 1) . "中x")
- (("kor한e글an" 8 1 ? ) . "or한e글")
- (("kor한e글an" 7 2 ? ) . "r한e ")
- (("" 0 nil nil "...") . "")
- (("x" 3 nil nil "...") . "x")
- (("中" 3 nil nil "...") . "中")
- (("foo" 3 nil nil "...") . "foo")
- (("foo" 2 nil nil "...") . "fo") ;; XEmacs failure?
- (("foobar" 6 0 nil "...") . "foobar")
- (("foobarbaz" 6 nil nil "...") . "foo...")
- (("foobarbaz" 7 2 nil "...") . "ob...")
- (("foobarbaz" 9 3 nil "...") . "barbaz")
- (("こhんeにlちlはo" 15 1 ? t) . " hんeにlちlはo")
- (("こhんeにlちlはo" 14 1 ? t) . " hんeにlち...")
- (("x" 3 nil nil "粵語") . "x")
- (("中" 2 nil nil "粵語") . "中")
- (("中" 1 nil ?x "粵語") . "x") ;; XEmacs error
- (("中文" 3 nil ? "粵語") . "中 ") ;; XEmacs error
- (("foobarbaz" 4 nil nil "粵語") . "粵語")
- (("foobarbaz" 5 nil nil "粵語") . "f粵語")
- (("foobarbaz" 6 nil nil "粵語") . "fo粵語")
- (("foobarbaz" 8 3 nil "粵語") . "b粵語")
- (("こhんeにlちlはo" 14 4 ?x "日本語") . "xeに日本語")
- (("こhんeにlちlはo" 13 4 ?x "日本語") . "xex日本語")
- )
- "Test data for `truncate-string-to-width'.")
-
-(defun mule-util-test-truncate-create (n)
- "Create a test for element N of the `mule-util-test-truncate-data' constant."
- (let ((testname (intern (format "mule-util-test-truncate-%.2d" n)))
- (testdoc (format "Test element %d of `mule-util-test-truncate-data'."
- n))
- (testdata (nth n mule-util-test-truncate-data)))
- (eval
- `(ert-deftest ,testname ()
- ,testdoc
- (should (equal (apply 'truncate-string-to-width ',(car testdata))
- ,(cdr testdata)))))))
-
-(dotimes (i (length mule-util-test-truncate-data))
- (mule-util-test-truncate-create i))
-
-;;; mule-util.el ends here
diff --git a/test/automated/newsticker-tests.el b/test/automated/newsticker-tests.el
deleted file mode 100644
index 1e51b9eb693..00000000000
--- a/test/automated/newsticker-tests.el
+++ /dev/null
@@ -1,168 +0,0 @@
-;;; newsticker-testsuite.el --- Test suite for newsticker.
-
-;; Copyright (C) 2003-2015 Free Software Foundation, Inc.
-
-;; Author: Ulf Jasper <ulf.jasper@web.de>
-;; Keywords: News, RSS, Atom
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'ert)
-(require 'newsticker)
-
-;; ======================================================================
-;; Tests for newsticker-backend
-;; ======================================================================
-(ert-deftest newsticker--guid ()
- "Test for `newsticker--guid-*'.
-Signals an error if something goes wrong."
- (should (string= "blah" (newsticker--guid-to-string "blah")))
- (should (string= "myguid" (newsticker--guid '("title1" "description1" "link1"
- nil 'new 42 nil nil
- ((guid () "myguid")))))))
-
-(ert-deftest newsticker--cache-contains ()
- "Test for `newsticker--cache-contains'."
- (let ((newsticker--cache '((feed1
- ("title1" "description1" "link1" nil 'new 42
- nil nil ((guid () "myguid")))))))
- (newsticker--guid-to-string
- (assoc 'guid (newsticker--extra '("title1" "description1"
- "link1" nil 'new 42 nil nil
- ((guid "myguid"))))))
- (should (newsticker--cache-contains newsticker--cache 'feed1 "WRONGTITLE"
- "description1" "link1" 'new "myguid"))
- (should (not (newsticker--cache-contains newsticker--cache 'feed1 "title1"
- "description1" "link1" 'new
- "WRONG GUID")))
- (should (newsticker--cache-contains newsticker--cache 'feed1 "title1"
- "description1" "link1" 'new "myguid")))
- (let ((newsticker--cache '((feed1
- ("title1" "description1" "link1" nil 'new 42
- nil nil ((guid () "myguid1")))
- ("title1" "description1" "link1" nil 'new 42
- nil nil ((guid () "myguid2")))))))
- (should (not (newsticker--cache-contains newsticker--cache 'feed1 "title1"
- "description1" "link1" 'new
- "myguid")))
- (should (string= "myguid1"
- (newsticker--guid (newsticker--cache-contains
- newsticker--cache 'feed1 "title1"
- "description1" "link1" 'new
- "myguid1"))))
- (should (string= "myguid2"
- (newsticker--guid (newsticker--cache-contains
- newsticker--cache 'feed1 "title1"
- "description1" "link1" 'new
- "myguid2"))))))
-
-(defun newsticker-tests--decode-iso8601-date (input expected)
- "Actually test `newsticker--decode-iso8601-date'.
-Apply to INPUT and compare with EXPECTED."
- (let ((result (format-time-string "%Y-%m-%dT%H:%M:%S"
- (newsticker--decode-iso8601-date input)
- t)))
- (should (string= result expected))))
-
-(ert-deftest newsticker--decode-iso8601-date ()
- "Test `newsticker--decode-iso8601-date'."
- (newsticker-tests--decode-iso8601-date "2004"
- "2004-01-01T00:00:00")
- (newsticker-tests--decode-iso8601-date "2004-09"
- "2004-09-01T00:00:00")
- (newsticker-tests--decode-iso8601-date "2004-09-17"
- "2004-09-17T00:00:00")
- (newsticker-tests--decode-iso8601-date "2004-09-17T05:09"
- "2004-09-17T05:09:00")
- (newsticker-tests--decode-iso8601-date "2004-09-17T05:09:49"
- "2004-09-17T05:09:49")
- (newsticker-tests--decode-iso8601-date "2004-09-17T05:09:49.123"
- "2004-09-17T05:09:49")
- (newsticker-tests--decode-iso8601-date "2004-09-17T05:09+01:00"
- "2004-09-17T04:09:00")
- (newsticker-tests--decode-iso8601-date "2004-09-17T05:09-02:00"
- "2004-09-17T07:09:00"))
-
-(defun newsticker--do-test--decode-rfc822-date (input expected)
- "Actually test `newsticker--decode-rfc822-date'.
-Apply to INPUT and compare with EXPECTED."
- (let ((result (format-time-string "%Y-%m-%dT%H:%M:%S"
- (newsticker--decode-rfc822-date input)
- t)))
- (should (string= result expected))))
-
-(ert-deftest newsticker--decode-rfc822-date ()
- "Test `newsticker--decode-rfc822-date'."
- (newsticker--do-test--decode-rfc822-date "Mon, 10 Mar 2008 19:27:52 +0100"
- "2008-03-10T18:27:52")
- ;;(format-time-string "%d.%m.%y, %H:%M %T%z"
- ;;(newsticker--decode-rfc822-date "Mon, 10 Mar 2008 19:27:52 +0200"))
-
- (newsticker--do-test--decode-rfc822-date "Mon, 10 Mar 2008 19:27:52"
- "2008-03-10T19:27:52")
- (newsticker--do-test--decode-rfc822-date "Mon, 10 Mar 2008 19:27"
- "2008-03-10T19:27:00")
- (newsticker--do-test--decode-rfc822-date "10 Mar 2008 19:27"
- "2008-03-10T19:27:00")
- (newsticker--do-test--decode-rfc822-date "Mon, 10 Mar 2008"
- "2008-03-10T00:00:00")
- (newsticker--do-test--decode-rfc822-date "10 Mar 2008"
- "2008-03-10T00:00:00")
- (newsticker--do-test--decode-rfc822-date "Sat, 01 Dec 2007 00:05:00 +0100"
- "2007-11-30T23:05:00")
- (newsticker--do-test--decode-rfc822-date "Sun, 30 Dec 2007 18:58:13 +0100"
- "2007-12-30T17:58:13"))
-
-;; ======================================================================
-;; Tests for newsticker-treeview
-;; ======================================================================
-(ert-deftest newsticker--group-manage-orphan-feeds ()
- "Test `newsticker--group-manage-orphan-feeds'.
-Signals an error if something goes wrong."
- (let ((newsticker-groups '("Feeds"))
- (newsticker-url-list-defaults nil)
- (newsticker-url-list '(("feed1") ("feed2") ("feed3"))))
- (newsticker--group-manage-orphan-feeds)
- (should (equal '("Feeds" "feed3" "feed2" "feed1")
- newsticker-groups))))
-
-(ert-deftest newsticker--group-find-parent-group ()
- "Test `newsticker--group-find-parent-group'."
- (let ((newsticker-groups '("g1" "f1a" ("g2" "f2" ("g3" "f3a" "f3b")) "f1b")))
- ;; feeds
- (should (equal "g1" (car (newsticker--group-find-parent-group "f1a"))))
- (should (equal "g1" (car (newsticker--group-find-parent-group "f1b"))))
- (should (equal "g2" (car (newsticker--group-find-parent-group "f2"))))
- (should (equal "g3" (car (newsticker--group-find-parent-group "f3b"))))
- ;; groups
- (should (equal "g1" (car (newsticker--group-find-parent-group "g2"))))
- (should (equal "g2" (car (newsticker--group-find-parent-group "g3"))))))
-
-(ert-deftest newsticker--group-do-rename-group ()
- "Test `newsticker--group-do-rename-group'."
- (let ((newsticker-groups '("g1" "f1a" ("g2" "f2" ("g3" "f3a" "f3b")) "f1b")))
- (should (equal '("g1" "f1a" ("h2" "f2" ("g3" "f3a" "f3b")) "f1b")
- (newsticker--group-do-rename-group "g2" "h2")))
- ))
-
-
-(provide 'newsticker-tests)
-
-;;; newsticker-tests.el ends here
diff --git a/test/automated/obarray-tests.el b/test/automated/obarray-tests.el
deleted file mode 100644
index 4cc61b6903f..00000000000
--- a/test/automated/obarray-tests.el
+++ /dev/null
@@ -1,90 +0,0 @@
-;;; obarray-tests.el --- Tests for obarray -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Przemysław Wojnowski <esperanto@cumego.com>
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'obarray)
-(require 'ert)
-
-(ert-deftest obarrayp-test ()
- "Should assert that given object is an obarray."
- (should-not (obarrayp 42))
- (should-not (obarrayp "aoeu"))
- (should-not (obarrayp '()))
- (should-not (obarrayp []))
- (should (obarrayp (make-vector 7 0))))
-
-(ert-deftest obarrayp-unchecked-content-test ()
- "Should fail to check content of passed obarray."
- :expected-result :failed
- (should-not (obarrayp ["a" "b" "c"]))
- (should-not (obarrayp [1 2 3])))
-
-(ert-deftest obarray-make-default-test ()
- (let ((table (obarray-make)))
- (should (obarrayp table))
- (should (equal (make-vector 59 0) table))))
-
-(ert-deftest obarray-make-with-size-test ()
- (should-error (obarray-make -1) :type 'wrong-type-argument)
- (should-error (obarray-make 0) :type 'wrong-type-argument)
- (let ((table (obarray-make 1)))
- (should (obarrayp table))
- (should (equal (make-vector 1 0) table))))
-
-(ert-deftest obarray-get-test ()
- (let ((table (obarray-make 3)))
- (should-not (obarray-get table "aoeu"))
- (intern "aoeu" table)
- (should (string= "aoeu" (obarray-get table "aoeu")))))
-
-(ert-deftest obarray-put-test ()
- (let ((table (obarray-make 3)))
- (should-not (obarray-get table "aoeu"))
- (should (string= "aoeu" (obarray-put table "aoeu")))
- (should (string= "aoeu" (obarray-get table "aoeu")))))
-
-(ert-deftest obarray-remove-test ()
- (let ((table (obarray-make 3)))
- (should-not (obarray-get table "aoeu"))
- (should-not (obarray-remove table "aoeu"))
- (should (string= "aoeu" (obarray-put table "aoeu")))
- (should (string= "aoeu" (obarray-get table "aoeu")))
- (should (obarray-remove table "aoeu"))
- (should-not (obarray-get table "aoeu"))))
-
-(ert-deftest obarray-map-test ()
- "Should execute function on all elements of obarray."
- (let* ((table (obarray-make 3))
- (syms '())
- (collect-names (lambda (sym) (push (symbol-name sym) syms))))
- (obarray-map collect-names table)
- (should (null syms))
- (obarray-put table "a")
- (obarray-put table "b")
- (obarray-put table "c")
- (obarray-map collect-names table)
- (should (equal (sort syms #'string<) '("a" "b" "c")))))
-
-(provide 'obarray-tests)
-;;; obarray-tests.el ends here
diff --git a/test/automated/occur-tests.el b/test/automated/occur-tests.el
deleted file mode 100644
index 1699cd007e5..00000000000
--- a/test/automated/occur-tests.el
+++ /dev/null
@@ -1,352 +0,0 @@
-;;; occur-tests.el --- Test suite for occur.
-
-;; Copyright (C) 2010-2015 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
-" "\
-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 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 occur-test-create (n)
- "Create a test for element N of the `occur-tests' constant."
- (let ((testname (intern (format "occur-test-%.2d" n)))
- (testdoc (format "Test element %d of `occur-tests'." n)))
- (eval
- `(ert-deftest ,testname ()
- ,testdoc
- (let (occur-hook)
- (should (equal (occur-test-case (nth ,n occur-tests))
- (nth 3 (nth ,n occur-tests)))))))))
-
-(dotimes (i (length occur-tests))
- (occur-test-create i))
-
-(provide 'occur-tests)
-
-;;; occur-tests.el ends here
diff --git a/test/automated/package-test.el b/test/automated/package-test.el
deleted file mode 100644
index de41c3bc8e4..00000000000
--- a/test/automated/package-test.el
+++ /dev/null
@@ -1,611 +0,0 @@
-;;; package-test.el --- Tests for the Emacs package system
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Daniel Hackney <dan@haxney.org>
-;; Version: 1.0
-
-;; 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/>.
-
-;;; Commentary:
-
-;; You may want to run this from a separate Emacs instance from your
-;; main one, because a bug in the code below could mess with your
-;; installed packages.
-
-;; Run this in a clean Emacs session using:
-;;
-;; $ emacs -Q --batch -L . -l package-test.el -l ert -f ert-run-tests-batch-and-exit
-
-;;; Code:
-
-(require 'package)
-(require 'ert)
-(require 'cl-lib)
-
-(setq package-menu-async nil)
-
-(defvar package-test-user-dir nil
- "Directory to use for installing packages during testing.")
-
-(defvar package-test-file-dir (file-name-directory (or load-file-name
- buffer-file-name))
- "Directory of the actual \"package-test.el\" file.")
-
-(defvar simple-single-desc
- (package-desc-create :name 'simple-single
- :version '(1 3)
- :summary "A single-file package with no dependencies"
- :kind 'single
- :extras '((:authors ("J. R. Hacker" . "jrh@example.com"))
- (:maintainer "J. R. Hacker" . "jrh@example.com")
- (:url . "http://doodles.au")))
- "Expected `package-desc' parsed from simple-single-1.3.el.")
-
-(defvar simple-depend-desc
- (package-desc-create :name 'simple-depend
- :version '(1 0)
- :summary "A single-file package with a dependency."
- :kind 'single
- :reqs '((simple-single (1 3)))
- :extras '((:authors ("J. R. Hacker" . "jrh@example.com"))
- (:maintainer "J. R. Hacker" . "jrh@example.com")))
- "Expected `package-desc' parsed from simple-depend-1.0.el.")
-
-(defvar multi-file-desc
- (package-desc-create :name 'multi-file
- :version '(0 2 3)
- :summary "Example of a multi-file tar package"
- :kind 'tar
- :extras '((:url . "http://puddles.li")))
- "Expected `package-desc' from \"multi-file-0.2.3.tar\".")
-
-(defvar new-pkg-desc
- (package-desc-create :name 'new-pkg
- :version '(1 0)
- :kind 'single)
- "Expected `package-desc' parsed from new-pkg-1.0.el.")
-
-(defvar simple-depend-desc-1
- (package-desc-create :name 'simple-depend-1
- :version '(1 0)
- :summary "A single-file package with a dependency."
- :kind 'single
- :reqs '((simple-depend (1 0))
- (multi-file (0 1))))
- "`package-desc' used for testing dependencies.")
-
-(defvar simple-depend-desc-2
- (package-desc-create :name 'simple-depend-2
- :version '(1 0)
- :summary "A single-file package with a dependency."
- :kind 'single
- :reqs '((simple-depend-1 (1 0))
- (multi-file (0 1))))
- "`package-desc' used for testing dependencies.")
-
-(defvar package-test-data-dir (expand-file-name "data/package" package-test-file-dir)
- "Base directory of package test files.")
-
-(defvar package-test-fake-contents-file
- (expand-file-name "archive-contents" package-test-data-dir)
- "Path to a static copy of \"archive-contents\".")
-
-(cl-defmacro with-package-test ((&optional &key file
- basedir
- install
- location
- update-news
- upload-base)
- &rest body)
- "Set up temporary locations and variables for testing."
- (declare (indent 1))
- `(let* ((package-test-user-dir (make-temp-file "pkg-test-user-dir-" t))
- (process-environment (cons (format "HOME=%s" package-test-user-dir)
- process-environment))
- (package-user-dir package-test-user-dir)
- (package-archives `(("gnu" . ,(or ,location package-test-data-dir))))
- (default-directory package-test-file-dir)
- abbreviated-home-dir
- package--initialized
- package-alist
- ,@(if update-news
- '(package-update-news-on-upload t)
- (list (cl-gensym)))
- ,@(if upload-base
- '((package-test-archive-upload-base (make-temp-file "pkg-archive-base-" t))
- (package-archive-upload-base package-test-archive-upload-base))
- (list (cl-gensym)))) ;; Dummy value so `let' doesn't try to bind nil
- (let ((buf (get-buffer "*Packages*")))
- (when (buffer-live-p buf)
- (kill-buffer buf)))
- (unwind-protect
- (progn
- ,(if basedir `(cd ,basedir))
- (unless (file-directory-p package-user-dir)
- (mkdir package-user-dir))
- (cl-letf (((symbol-function 'yes-or-no-p) (lambda (&rest r) t))
- ((symbol-function 'y-or-n-p) (lambda (&rest r) t)))
- ,@(when install
- `((package-initialize)
- (package-refresh-contents)
- (mapc 'package-install ,install)))
- (with-temp-buffer
- ,(if file
- `(insert-file-contents ,file))
- ,@body)))
-
- (when (file-directory-p package-test-user-dir)
- (delete-directory package-test-user-dir t))
-
- (when (and (boundp 'package-test-archive-upload-base)
- (file-directory-p package-test-archive-upload-base))
- (delete-directory package-test-archive-upload-base t)))))
-
-(defmacro with-fake-help-buffer (&rest body)
- "Execute BODY in a temp buffer which is treated as the \"*Help*\" buffer."
- `(with-temp-buffer
- (help-mode)
- ;; Trick `help-buffer' into using the temp buffer.
- (let ((help-xref-following t))
- ,@body)))
-
-(defun package-test-strip-version (dir)
- (replace-regexp-in-string "-pkg\\.el\\'" "" (package--description-file dir)))
-
-(defun package-test-suffix-matches (base suffix-list)
- "Return file names matching BASE concatenated with each item in SUFFIX-LIST"
- (cl-mapcan
- '(lambda (item) (file-expand-wildcards (concat base item)))
- suffix-list))
-
-(defvar tar-parse-info)
-(declare-function tar-header-name "tar-mode" (cl-x) t) ; defstruct
-
-(defun package-test-search-tar-file (filename)
- "Search the current buffer's `tar-parse-info' variable for FILENAME.
-
-Must called from within a `tar-mode' buffer."
- (cl-dolist (header tar-parse-info)
- (let ((tar-name (tar-header-name header)))
- (when (string= tar-name filename)
- (cl-return t)))))
-
-(defun package-test-desc-version-string (desc)
- "Return the package version as a string."
- (package-version-join (package-desc-version desc)))
-
-(ert-deftest package-test-desc-from-buffer ()
- "Parse an elisp buffer to get a `package-desc' object."
- (with-package-test (:basedir "data/package" :file "simple-single-1.3.el")
- (should (equal (package-buffer-info) simple-single-desc)))
- (with-package-test (:basedir "data/package" :file "simple-depend-1.0.el")
- (should (equal (package-buffer-info) simple-depend-desc)))
- (with-package-test (:basedir "data/package"
- :file "multi-file-0.2.3.tar")
- (tar-mode)
- (should (equal (package-tar-file-info) multi-file-desc))))
-
-(ert-deftest package-test-install-single ()
- "Install a single file without using an archive."
- (with-package-test (:basedir "data/package" :file "simple-single-1.3.el")
- (should (package-install-from-buffer))
- (package-initialize)
- (should (package-installed-p 'simple-single))
- ;; Check if we properly report an "already installed".
- (package-install 'simple-single)
- (with-current-buffer "*Messages*"
- (should (string-match "^[`‘']simple-single[’'] is already installed\n?\\'"
- (buffer-string))))
- (should (package-installed-p 'simple-single))
- (let* ((simple-pkg-dir (file-name-as-directory
- (expand-file-name
- "simple-single-1.3"
- package-test-user-dir)))
- (autoloads-file (expand-file-name "simple-single-autoloads.el"
- simple-pkg-dir)))
- (should (file-directory-p simple-pkg-dir))
- (with-temp-buffer
- (insert-file-contents (expand-file-name "simple-single-pkg.el"
- simple-pkg-dir))
- (should (string= (buffer-string)
- (concat ";;; -*- no-byte-compile: t -*-\n"
- "(define-package \"simple-single\" \"1.3\" "
- "\"A single-file package "
- "with no dependencies\" 'nil "
- ":authors '((\"J. R. Hacker\" . \"jrh@example.com\")) "
- ":maintainer '(\"J. R. Hacker\" . \"jrh@example.com\") "
- ":url \"http://doodles.au\""
- ")\n"))))
- (should (file-exists-p autoloads-file))
- (should-not (get-file-buffer autoloads-file)))))
-
-(ert-deftest package-test-install-dependency ()
- "Install a package which includes a dependency."
- (with-package-test ()
- (package-initialize)
- (package-refresh-contents)
- (package-install 'simple-depend)
- (should (package-installed-p 'simple-single))
- (should (package-installed-p 'simple-depend))))
-
-(ert-deftest package-test-install-two-dependencies ()
- "Install a package which includes a dependency."
- (with-package-test ()
- (package-initialize)
- (package-refresh-contents)
- (package-install 'simple-two-depend)
- (should (package-installed-p 'simple-single))
- (should (package-installed-p 'simple-depend))
- (should (package-installed-p 'simple-two-depend))))
-
-(ert-deftest package-test-refresh-contents ()
- "Parse an \"archive-contents\" file."
- (with-package-test ()
- (package-initialize)
- (package-refresh-contents)
- (should (eq 4 (length package-archive-contents)))))
-
-(ert-deftest package-test-install-single-from-archive ()
- "Install a single package from a package archive."
- (with-package-test ()
- (package-initialize)
- (package-refresh-contents)
- (package-install 'simple-single)))
-
-(ert-deftest package-test-install-prioritized ()
- "Install a lower version from a higher-prioritized archive."
- (with-package-test ()
- (let* ((newer-version (expand-file-name "data/package/newer-versions"
- package-test-file-dir))
- (package-archives `(("older" . ,package-test-data-dir)
- ("newer" . ,newer-version)))
- (package-archive-priorities '(("older" . 100))))
-
- (package-initialize)
- (package-refresh-contents)
- (package-install 'simple-single)
-
- (let ((installed (cadr (assq 'simple-single package-alist))))
- (should (version-list-= '(1 3)
- (package-desc-version installed)))))))
-
-(ert-deftest package-test-install-multifile ()
- "Check properties of the installed multi-file package."
- (with-package-test (:basedir "data/package" :install '(multi-file))
- (let ((autoload-file
- (expand-file-name "multi-file-autoloads.el"
- (expand-file-name
- "multi-file-0.2.3"
- package-test-user-dir)))
- (installed-files '("dir" "multi-file.info" "multi-file-sub.elc"
- "multi-file-autoloads.el" "multi-file.elc"))
- (autoload-forms '("^(defvar multi-file-custom-var"
- "^(custom-autoload 'multi-file-custom-var"
- "^(autoload 'multi-file-mode"))
- (pkg-dir (file-name-as-directory
- (expand-file-name
- "multi-file-0.2.3"
- package-test-user-dir))))
- (package-refresh-contents)
- (should (package-installed-p 'multi-file))
- (with-temp-buffer
- (insert-file-contents-literally autoload-file)
- (dolist (fn installed-files)
- (should (file-exists-p (expand-file-name fn pkg-dir))))
- (dolist (re autoload-forms)
- (goto-char (point-min))
- (should (re-search-forward re nil t)))))))
-
-(ert-deftest package-test-update-listing ()
- "Ensure installed package status is updated."
- (with-package-test ()
- (let ((buf (package-list-packages)))
- (search-forward-regexp "^ +simple-single")
- (package-menu-mark-install)
- (package-menu-execute)
- (run-hooks 'post-command-hook)
- (should (package-installed-p 'simple-single))
- (switch-to-buffer "*Packages*")
- (goto-char (point-min))
- (should (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+installed" nil t))
- (goto-char (point-min))
- (should-not (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+\\(available\\|new\\)" nil t))
- (kill-buffer buf))))
-
-(ert-deftest package-test-update-archives ()
- "Test updating package archives."
- (with-package-test ()
- (let ((buf (package-list-packages)))
- (package-menu-refresh)
- (search-forward-regexp "^ +simple-single")
- (package-menu-mark-install)
- (package-menu-execute)
- (should (package-installed-p 'simple-single))
- (let ((package-test-data-dir
- (expand-file-name "data/package/newer-versions" package-test-file-dir)))
- (setq package-archives `(("gnu" . ,package-test-data-dir)))
- (package-menu-refresh)
-
- ;; New version should be available and old version should be installed
- (goto-char (point-min))
- (should (re-search-forward "^\\s-+simple-single\\s-+1.4\\s-+available" nil t))
- (should (re-search-forward "^\\s-+simple-single\\s-+1.3\\s-+installed" nil t))
-
- (goto-char (point-min))
- (should (re-search-forward "^\\s-+new-pkg\\s-+1.0\\s-+\\(available\\|new\\)" nil t))
-
- (package-menu-mark-upgrades)
- (package-menu-execute)
- (package-menu-refresh)
- (should (package-installed-p 'simple-single '(1 4)))))))
-
-(ert-deftest package-test-update-archives-async ()
- "Test updating package archives asynchronously."
- (skip-unless (executable-find "python2"))
- ;; For some reason this test doesn't work reliably on hydra.nixos.org.
- (skip-unless (not (getenv "NIX_STORE")))
- (with-package-test (:basedir
- package-test-data-dir
- :location "http://0.0.0.0:8000/")
- (let* ((package-menu-async t)
- (process (start-process
- "package-server" "package-server-buffer"
- (executable-find "python2")
- (expand-file-name "package-test-server.py"))))
- (unwind-protect
- (progn
- (list-packages)
- (should package--downloads-in-progress)
- (should mode-line-process)
- (should-not
- (with-timeout (10 'timeout)
- (while package--downloads-in-progress
- (accept-process-output nil 1))
- nil))
- ;; If the server process died, there's some non-Emacs problem.
- ;; Eg maybe the port was already in use.
- (skip-unless (process-live-p process))
- (goto-char (point-min))
- (should
- (search-forward-regexp "^ +simple-single" nil t)))
- (if (process-live-p process) (kill-process process))))))
-
-(ert-deftest package-test-describe-package ()
- "Test displaying help for a package."
-
- (require 'finder-inf)
- ;; Built-in
- (with-fake-help-buffer
- (describe-package '5x5)
- (goto-char (point-min))
- (should (search-forward "5x5 is a built-in package." nil t))
- ;; Don't assume the descriptions are in any particular order.
- (save-excursion (should (search-forward "Status: Built-in." nil t)))
- (save-excursion (should (search-forward "Summary: simple little puzzle game" nil t)))
- (should (search-forward "The aim of 5x5" nil t)))
-
- ;; Installed
- (with-package-test ()
- (package-initialize)
- (package-refresh-contents)
- (package-install 'simple-single)
- (with-fake-help-buffer
- (describe-package 'simple-single)
- (goto-char (point-min))
- (should (search-forward "simple-single is an installed package." nil t))
- (save-excursion (should (re-search-forward "Status: Installed in ['`‘]simple-single-1.3/['’] (unsigned)." nil t)))
- (save-excursion (should (search-forward "Version: 1.3" nil t)))
- (save-excursion (should (search-forward "Summary: A single-file package with no dependencies" nil t)))
- (save-excursion (should (search-forward "Homepage: http://doodles.au" nil t)))
- (save-excursion (should (re-search-forward "Keywords: \\[?frobnicate\\]?" nil t)))
- ;; No description, though. Because at this point we don't know
- ;; what archive the package originated from, and we don't have
- ;; its readme file saved.
- )))
-
-(ert-deftest package-test-describe-non-installed-package ()
- "Test displaying of the readme for non-installed package."
-
- (with-package-test ()
- (package-initialize)
- (package-refresh-contents)
- (with-fake-help-buffer
- (describe-package 'simple-single)
- (goto-char (point-min))
- (should (search-forward "Homepage: http://doodles.au" nil t))
- (should (search-forward "This package provides a minor mode to frobnicate"
- nil t)))))
-
-(ert-deftest package-test-describe-non-installed-multi-file-package ()
- "Test displaying of the readme for non-installed multi-file package."
-
- (with-package-test ()
- (package-initialize)
- (package-refresh-contents)
- (with-fake-help-buffer
- (describe-package 'multi-file)
- (goto-char (point-min))
- (should (search-forward "Homepage: http://puddles.li" nil t))
- (should (search-forward "This is a bare-bones readme file for the multi-file"
- nil t)))))
-
-(ert-deftest package-test-signed ()
- "Test verifying package signature."
- (skip-unless (ignore-errors
- (let ((homedir (make-temp-file "package-test" t)))
- (unwind-protect
- (let ((process-environment
- (cons (format "HOME=%s" homedir)
- process-environment)))
- (epg-check-configuration (epg-configuration))
- t)
- (delete-directory homedir t)))))
- (let* ((keyring (expand-file-name "key.pub" package-test-data-dir))
- (package-test-data-dir
- (expand-file-name "data/package/signed" package-test-file-dir)))
- (with-package-test ()
- (package-initialize)
- (package-import-keyring keyring)
- (package-refresh-contents)
- (should (package-install 'signed-good))
- (should-error (package-install 'signed-bad))
- ;; Check if the installed package status is updated.
- (let ((buf (package-list-packages)))
- (package-menu-refresh)
- (should (re-search-forward
- "^\\s-+signed-good\\s-+\\(\\S-+\\)\\s-+\\(\\S-+\\)\\s-"
- nil t))
- (should (string-equal (match-string-no-properties 1) "1.0"))
- (should (string-equal (match-string-no-properties 2) "installed")))
- ;; Check if the package description is updated.
- (with-fake-help-buffer
- (describe-package 'signed-good)
- (goto-char (point-min))
- (should (re-search-forward "signed-good is an? \\(\\S-+\\) package." nil t))
- (should (string-equal (match-string-no-properties 1) "installed"))
- (should (re-search-forward
- "Status: Installed in ['`‘]signed-good-1.0/['’]."
- nil t))))))
-
-
-
-;;; Tests for package-x features.
-
-(require 'package-x)
-
-(defvar package-x-test--single-archive-entry-1-3
- (cons 'simple-single
- (package-make-ac-desc '(1 3) nil
- "A single-file package with no dependencies"
- 'single
- '((:authors ("J. R. Hacker" . "jrh@example.com"))
- (:maintainer "J. R. Hacker" . "jrh@example.com")
- (:url . "http://doodles.au"))))
- "Expected contents of the archive entry from the \"simple-single\" package.")
-
-(defvar package-x-test--single-archive-entry-1-4
- (cons 'simple-single
- (package-make-ac-desc '(1 4) nil
- "A single-file package with no dependencies"
- 'single
- '((:authors ("J. R. Hacker" . "jrh@example.com"))
- (:maintainer "J. R. Hacker" . "jrh@example.com"))))
- "Expected contents of the archive entry from the updated \"simple-single\" package.")
-
-(ert-deftest package-x-test-upload-buffer ()
- "Test creating an \"archive-contents\" file"
- (with-package-test (:basedir "data/package"
- :file "simple-single-1.3.el"
- :upload-base t)
- (package-upload-buffer)
- (should (file-exists-p (expand-file-name "archive-contents"
- package-archive-upload-base)))
- (should (file-exists-p (expand-file-name "simple-single-1.3.el"
- package-archive-upload-base)))
- (should (file-exists-p (expand-file-name "simple-single-readme.txt"
- package-archive-upload-base)))
-
- (let (archive-contents)
- (with-temp-buffer
- (insert-file-contents
- (expand-file-name "archive-contents"
- package-archive-upload-base))
- (setq archive-contents
- (package-read-from-string
- (buffer-substring (point-min) (point-max)))))
- (should (equal archive-contents
- (list 1 package-x-test--single-archive-entry-1-3))))))
-
-(ert-deftest package-x-test-upload-new-version ()
- "Test uploading a new version of a package"
- (with-package-test (:basedir "data/package"
- :file "simple-single-1.3.el"
- :upload-base t)
- (package-upload-buffer)
- (with-temp-buffer
- (insert-file-contents "newer-versions/simple-single-1.4.el")
- (package-upload-buffer))
-
- (let (archive-contents)
- (with-temp-buffer
- (insert-file-contents
- (expand-file-name "archive-contents"
- package-archive-upload-base))
- (setq archive-contents
- (package-read-from-string
- (buffer-substring (point-min) (point-max)))))
- (should (equal archive-contents
- (list 1 package-x-test--single-archive-entry-1-4))))))
-
-(ert-deftest package-test-get-deps ()
- "Test `package--get-deps' with complex structures."
- (let ((package-alist
- (mapcar (lambda (p) (list (package-desc-name p) p))
- (list simple-single-desc
- simple-depend-desc
- multi-file-desc
- new-pkg-desc
- simple-depend-desc-1
- simple-depend-desc-2))))
- (should
- (equal (package--get-deps 'simple-depend)
- '(simple-single)))
- (should
- (equal (package--get-deps 'simple-depend 'indirect)
- nil))
- (should
- (equal (package--get-deps 'simple-depend 'direct)
- '(simple-single)))
- (should
- (equal (package--get-deps 'simple-depend-2)
- '(simple-depend-1 multi-file simple-depend simple-single)))
- (should
- (equal (package--get-deps 'simple-depend-2 'indirect)
- '(simple-depend multi-file simple-single)))
- (should
- (equal (package--get-deps 'simple-depend-2 'direct)
- '(simple-depend-1 multi-file)))))
-
-(ert-deftest package-test-sort-by-dependence ()
- "Test `package--sort-by-dependence' with complex structures."
- (let ((package-alist
- (mapcar (lambda (p) (list (package-desc-name p) p))
- (list simple-single-desc
- simple-depend-desc
- multi-file-desc
- new-pkg-desc
- simple-depend-desc-1
- simple-depend-desc-2)))
- (delete-list
- (list simple-single-desc
- simple-depend-desc
- multi-file-desc
- new-pkg-desc
- simple-depend-desc-1
- simple-depend-desc-2)))
- (should
- (equal (package--sort-by-dependence delete-list)
- (list simple-depend-desc-2 simple-depend-desc-1 new-pkg-desc
- multi-file-desc simple-depend-desc simple-single-desc)))
- (should
- (equal (package--sort-by-dependence (reverse delete-list))
- (list new-pkg-desc simple-depend-desc-2 simple-depend-desc-1
- multi-file-desc simple-depend-desc simple-single-desc)))))
-
-(provide 'package-test)
-
-;;; package-test.el ends here
diff --git a/test/automated/pcase-tests.el b/test/automated/pcase-tests.el
deleted file mode 100644
index 701bcccc0e6..00000000000
--- a/test/automated/pcase-tests.el
+++ /dev/null
@@ -1,74 +0,0 @@
-;;; pcase-tests.el --- Test suite for pcase macro.
-
-;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'ert)
-(require 'cl-lib)
-
-(ert-deftest pcase-tests-base ()
- "Test pcase code."
- (should (equal (pcase '(1 . 2) ((app car '2) 6) ((app car '1) 5)) 5)))
-
-(ert-deftest pcase-tests-bugs ()
- (should (equal (pcase '(2 . 3) ;bug#18554
- (`(,hd . ,(and (pred atom) tl)) (list hd tl))
- ((pred consp) nil))
- '(2 3))))
-
-(pcase-defmacro pcase-tests-plus (pat n)
- `(app (lambda (v) (- v ,n)) ,pat))
-
-(ert-deftest pcase-tests-macro ()
- (should (equal (pcase 5 ((pcase-tests-plus x 3) x)) 2)))
-
-(defun pcase-tests-grep (fname exp)
- (when (consp exp)
- (or (eq fname (car exp))
- (cl-some (lambda (exp) (pcase-tests-grep fname exp)) (cdr exp)))))
-
-(ert-deftest pcase-tests-tests ()
- (should (pcase-tests-grep 'memq '(or (+ 2 3) (memq x y))))
- (should-not (pcase-tests-grep 'memq '(or (+ 2 3) (- x y)))))
-
-(ert-deftest pcase-tests-member ()
- (should (pcase-tests-grep
- 'memq (macroexpand-all '(pcase x ((or 1 2 3) body)))))
- (should (pcase-tests-grep
- 'member (macroexpand-all '(pcase x ((or '"a" '2 '3) body)))))
- (should-not (pcase-tests-grep
- 'memq (macroexpand-all '(pcase x ((or "a" 2 3) body)))))
- (let ((exp (macroexpand-all
- '(pcase x
- ("a" body1)
- (2 body2)
- ((or "a" 2 3) body)))))
- (should-not (pcase-tests-grep 'memq exp))
- (should-not (pcase-tests-grep 'member exp))))
-
-(ert-deftest pcase-tests-vectors ()
- (should (equal (pcase [1 2] (`[,x] 1) (`[,x ,y] (+ x y))) 3)))
-
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
-
-;;; pcase-tests.el ends here.
diff --git a/test/automated/print-tests.el b/test/automated/print-tests.el
deleted file mode 100644
index fe8c56553a8..00000000000
--- a/test/automated/print-tests.el
+++ /dev/null
@@ -1,62 +0,0 @@
-;;; print-tests.el --- tests for src/print.c -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
-
-;; This file is part of GNU Emacs.
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(require 'ert)
-
-(ert-deftest print-hex-backslash ()
- (should (string= (let ((print-escape-multibyte t)
- (print-escape-newlines t))
- (prin1-to-string "\u00A2\ff"))
- "\"\\x00a2\\ff\"")))
-
-(ert-deftest terpri ()
- (should (string= (with-output-to-string
- (princ 'abc)
- (should (terpri nil t)))
- "abc\n"))
- (should (string= (with-output-to-string
- (should-not (terpri nil t))
- (princ 'xyz))
- "xyz"))
- (message nil)
- (if noninteractive
- (progn (should (terpri nil t))
- (should-not (terpri nil t))
- (princ 'abc)
- (should (terpri nil t))
- (should-not (terpri nil t)))
- (should (string= (progn (should-not (terpri nil t))
- (princ 'abc)
- (should (terpri nil t))
- (current-message))
- "abc\n")))
- (let ((standard-output
- (with-current-buffer (get-buffer-create "*terpri-test*")
- (insert "--------")
- (point-max-marker))))
- (should (terpri nil t))
- (should-not (terpri nil t))
- (should (string= (with-current-buffer (marker-buffer standard-output)
- (buffer-string))
- "--------\n"))))
-
-(provide 'print-tests)
-;;; print-tests.el ends here
diff --git a/test/automated/process-tests.el b/test/automated/process-tests.el
deleted file mode 100644
index ee9e4f35891..00000000000
--- a/test/automated/process-tests.el
+++ /dev/null
@@ -1,165 +0,0 @@
-;;; process-tests.el --- Testing the process facilities
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'ert)
-
-;; Timeout in seconds; the test fails if the timeout is reached.
-(defvar process-test-sentinel-wait-timeout 2.0)
-
-;; Start a process that exits immediately. Call WAIT-FUNCTION,
-;; possibly multiple times, to wait for the process to complete.
-(defun process-test-sentinel-wait-function-working-p (wait-function)
- (let ((proc (start-process "test" nil "bash" "-c" "exit 20"))
- (sentinel-called nil)
- (start-time (float-time)))
- (set-process-sentinel proc (lambda (proc msg)
- (setq sentinel-called t)))
- (while (not (or sentinel-called
- (> (- (float-time) start-time)
- process-test-sentinel-wait-timeout)))
- (funcall wait-function))
- (cl-assert (eq (process-status proc) 'exit))
- (cl-assert (= (process-exit-status proc) 20))
- sentinel-called))
-
-(ert-deftest process-test-sentinel-accept-process-output ()
- (skip-unless (executable-find "bash"))
- (should (process-test-sentinel-wait-function-working-p
- #'accept-process-output)))
-
-(ert-deftest process-test-sentinel-sit-for ()
- (skip-unless (executable-find "bash"))
- (should
- (process-test-sentinel-wait-function-working-p (lambda () (sit-for 0.01 t)))))
-
-(when (eq system-type 'windows-nt)
- (ert-deftest process-test-quoted-batfile ()
- "Check that Emacs hides CreateProcess deficiency (bug#18745)."
- (let (batfile)
- (unwind-protect
- (progn
- ;; CreateProcess will fail when both the bat file and 1st
- ;; argument are quoted, so include spaces in both of those
- ;; to force quoting.
- (setq batfile (make-temp-file "echo args" nil ".bat"))
- (with-temp-file batfile
- (insert "@echo arg1=%1, arg2=%2\n"))
- (with-temp-buffer
- (call-process batfile nil '(t t) t "x &y")
- (should (string= (buffer-string) "arg1=\"x &y\", arg2=\n")))
- (with-temp-buffer
- (call-process-shell-command
- (mapconcat #'shell-quote-argument (list batfile "x &y") " ")
- nil '(t t) t)
- (should (string= (buffer-string) "arg1=\"x &y\", arg2=\n"))))
- (when batfile (delete-file batfile))))))
-
-(ert-deftest process-test-stderr-buffer ()
- (skip-unless (executable-find "bash"))
- (let* ((stdout-buffer (generate-new-buffer "*stdout*"))
- (stderr-buffer (generate-new-buffer "*stderr*"))
- (proc (make-process :name "test"
- :command (list "bash" "-c"
- (concat "echo hello stdout!; "
- "echo hello stderr! >&2; "
- "exit 20"))
- :buffer stdout-buffer
- :stderr stderr-buffer))
- (sentinel-called nil)
- (start-time (float-time)))
- (set-process-sentinel proc (lambda (proc msg)
- (setq sentinel-called t)))
- (while (not (or sentinel-called
- (> (- (float-time) start-time)
- process-test-sentinel-wait-timeout)))
- (accept-process-output))
- (cl-assert (eq (process-status proc) 'exit))
- (cl-assert (= (process-exit-status proc) 20))
- (should (with-current-buffer stdout-buffer
- (goto-char (point-min))
- (looking-at "hello stdout!")))
- (should (with-current-buffer stderr-buffer
- (goto-char (point-min))
- (looking-at "hello stderr!")))))
-
-(ert-deftest process-test-stderr-filter ()
- (skip-unless (executable-find "bash"))
- (let* ((sentinel-called nil)
- (stderr-sentinel-called nil)
- (stdout-output nil)
- (stderr-output nil)
- (stdout-buffer (generate-new-buffer "*stdout*"))
- (stderr-buffer (generate-new-buffer "*stderr*"))
- (stderr-proc (make-pipe-process :name "stderr"
- :buffer stderr-buffer))
- (proc (make-process :name "test" :buffer stdout-buffer
- :command (list "bash" "-c"
- (concat "echo hello stdout!; "
- "echo hello stderr! >&2; "
- "exit 20"))
- :stderr stderr-proc))
- (start-time (float-time)))
- (set-process-filter proc (lambda (proc input)
- (push input stdout-output)))
- (set-process-sentinel proc (lambda (proc msg)
- (setq sentinel-called t)))
- (set-process-filter stderr-proc (lambda (proc input)
- (push input stderr-output)))
- (set-process-sentinel stderr-proc (lambda (proc input)
- (setq stderr-sentinel-called t)))
- (while (not (or sentinel-called
- (> (- (float-time) start-time)
- process-test-sentinel-wait-timeout)))
- (accept-process-output))
- (cl-assert (eq (process-status proc) 'exit))
- (cl-assert (= (process-exit-status proc) 20))
- (should sentinel-called)
- (should (equal 1 (with-current-buffer stdout-buffer
- (point-max))))
- (should (equal "hello stdout!\n"
- (mapconcat #'identity (nreverse stdout-output) "")))
- (should stderr-sentinel-called)
- (should (equal 1 (with-current-buffer stderr-buffer
- (point-max))))
- (should (equal "hello stderr!\n"
- (mapconcat #'identity (nreverse stderr-output) "")))))
-
-(ert-deftest start-process-should-not-modify-arguments ()
- "`start-process' must not modify its arguments in-place."
- ;; See bug#21831.
- (let* ((path (pcase system-type
- ((or 'windows-nt 'ms-dos)
- ;; Make sure the file name uses forward slashes.
- ;; The original bug was that 'start-process' would
- ;; convert forward slashes to backslashes.
- (expand-file-name (executable-find "attrib.exe")))
- (_ "/bin//sh")))
- (samepath (copy-sequence path)))
- ;; Make sure 'start-process' actually goes all the way and invokes
- ;; the program.
- (should (process-live-p (condition-case nil
- (start-process "" nil path)
- (error nil))))
- (should (equal path samepath))))
-
-(provide 'process-tests)
diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el
deleted file mode 100644
index 9da6807c144..00000000000
--- a/test/automated/python-tests.el
+++ /dev/null
@@ -1,5232 +0,0 @@
-;;; python-tests.el --- Test suite for python.el
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'ert)
-(require 'python)
-
-;; Dependencies for testing:
-(require 'electric)
-(require 'hideshow)
-(require 'tramp-sh)
-
-
-(defmacro python-tests-with-temp-buffer (contents &rest body)
- "Create a `python-mode' enabled temp buffer with CONTENTS.
-BODY is code to be executed within the temp buffer. Point is
-always located at the beginning of buffer."
- (declare (indent 1) (debug t))
- `(with-temp-buffer
- (let ((python-indent-guess-indent-offset nil))
- (python-mode)
- (insert ,contents)
- (goto-char (point-min))
- ,@body)))
-
-(defmacro python-tests-with-temp-file (contents &rest body)
- "Create a `python-mode' enabled file with CONTENTS.
-BODY is code to be executed within the temp buffer. Point is
-always located at the beginning of buffer."
- (declare (indent 1) (debug t))
- ;; temp-file never actually used for anything?
- `(let* ((temp-file (make-temp-file "python-tests" nil ".py"))
- (buffer (find-file-noselect temp-file))
- (python-indent-guess-indent-offset nil))
- (unwind-protect
- (with-current-buffer buffer
- (python-mode)
- (insert ,contents)
- (goto-char (point-min))
- ,@body)
- (and buffer (kill-buffer buffer))
- (delete-file temp-file))))
-
-(defun python-tests-look-at (string &optional num restore-point)
- "Move point at beginning of STRING in the current buffer.
-Optional argument NUM defaults to 1 and is an integer indicating
-how many occurrences must be found, when positive the search is
-done forwards, otherwise backwards. When RESTORE-POINT is
-non-nil the point is not moved but the position found is still
-returned. When searching forward and point is already looking at
-STRING, it is skipped so the next STRING occurrence is selected."
- (let* ((num (or num 1))
- (starting-point (point))
- (string (regexp-quote string))
- (search-fn (if (> num 0) #'re-search-forward #'re-search-backward))
- (deinc-fn (if (> num 0) #'1- #'1+))
- (found-point))
- (prog2
- (catch 'exit
- (while (not (= num 0))
- (when (and (> num 0)
- (looking-at string))
- ;; Moving forward and already looking at STRING, skip it.
- (forward-char (length (match-string-no-properties 0))))
- (and (not (funcall search-fn string nil t))
- (throw 'exit t))
- (when (> num 0)
- ;; `re-search-forward' leaves point at the end of the
- ;; occurrence, move back so point is at the beginning
- ;; instead.
- (forward-char (- (length (match-string-no-properties 0)))))
- (setq
- num (funcall deinc-fn num)
- found-point (point))))
- found-point
- (and restore-point (goto-char starting-point)))))
-
-(defun python-tests-self-insert (char-or-str)
- "Call `self-insert-command' for chars in CHAR-OR-STR."
- (let ((chars
- (cond
- ((characterp char-or-str)
- (list char-or-str))
- ((stringp char-or-str)
- (string-to-list char-or-str))
- ((not
- (cl-remove-if #'characterp char-or-str))
- char-or-str)
- (t (error "CHAR-OR-STR must be a char, string, or list of char")))))
- (mapc
- (lambda (char)
- (let ((last-command-event char))
- (call-interactively 'self-insert-command)))
- chars)))
-
-(defun python-tests-visible-string (&optional min max)
- "Return the buffer string excluding invisible overlays.
-Argument MIN and MAX delimit the region to be returned and
-default to `point-min' and `point-max' respectively."
- (let* ((min (or min (point-min)))
- (max (or max (point-max)))
- (buffer (current-buffer))
- (buffer-contents (buffer-substring-no-properties min max))
- (overlays
- (sort (overlays-in min max)
- (lambda (a b)
- (let ((overlay-end-a (overlay-end a))
- (overlay-end-b (overlay-end b)))
- (> overlay-end-a overlay-end-b))))))
- (with-temp-buffer
- (insert buffer-contents)
- (dolist (overlay overlays)
- (if (overlay-get overlay 'invisible)
- (delete-region (overlay-start overlay)
- (overlay-end overlay))))
- (buffer-substring-no-properties (point-min) (point-max)))))
-
-
-;;; Tests for your tests, so you can test while you test.
-
-(ert-deftest python-tests-look-at-1 ()
- "Test forward movement."
- (python-tests-with-temp-buffer
- "Lorem ipsum dolor sit amet, consectetur adipisicing elit,
-sed do eiusmod tempor incididunt ut labore et dolore magna
-aliqua."
- (let ((expected (save-excursion
- (dotimes (i 3)
- (re-search-forward "et" nil t))
- (forward-char -2)
- (point))))
- (should (= (python-tests-look-at "et" 3 t) expected))
- ;; Even if NUM is bigger than found occurrences the point of last
- ;; one should be returned.
- (should (= (python-tests-look-at "et" 6 t) expected))
- ;; If already looking at STRING, it should skip it.
- (dotimes (i 2) (re-search-forward "et"))
- (forward-char -2)
- (should (= (python-tests-look-at "et") expected)))))
-
-(ert-deftest python-tests-look-at-2 ()
- "Test backward movement."
- (python-tests-with-temp-buffer
- "Lorem ipsum dolor sit amet, consectetur adipisicing elit,
-sed do eiusmod tempor incididunt ut labore et dolore magna
-aliqua."
- (let ((expected
- (save-excursion
- (re-search-forward "et" nil t)
- (forward-char -2)
- (point))))
- (dotimes (i 3)
- (re-search-forward "et" nil t))
- (should (= (python-tests-look-at "et" -3 t) expected))
- (should (= (python-tests-look-at "et" -6 t) expected)))))
-
-
-;;; Bindings
-
-
-;;; Python specialized rx
-
-
-;;; Font-lock and syntax
-
-(ert-deftest python-syntax-after-python-backspace ()
- ;; `python-indent-dedent-line-backspace' garbles syntax
- :expected-result :failed
- (python-tests-with-temp-buffer
- "\"\"\""
- (goto-char (point-max))
- (python-indent-dedent-line-backspace 1)
- (should (string= (buffer-string) "\"\""))
- (should (null (nth 3 (syntax-ppss))))))
-
-
-;;; Indentation
-
-;; See: http://www.python.org/dev/peps/pep-0008/#indentation
-
-(ert-deftest python-indent-pep8-1 ()
- "First pep8 case."
- (python-tests-with-temp-buffer
- "# Aligned with opening delimiter
-foo = long_function_name(var_one, var_two,
- var_three, var_four)
-"
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "foo = long_function_name(var_one, var_two,")
- (should (eq (car (python-indent-context)) :after-comment))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "var_three, var_four)")
- (should (eq (car (python-indent-context)) :inside-paren))
- (should (= (python-indent-calculate-indentation) 25))))
-
-(ert-deftest python-indent-pep8-2 ()
- "Second pep8 case."
- (python-tests-with-temp-buffer
- "# More indentation included to distinguish this from the rest.
-def long_function_name(
- var_one, var_two, var_three,
- var_four):
- print (var_one)
-"
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "def long_function_name(")
- (should (eq (car (python-indent-context)) :after-comment))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "var_one, var_two, var_three,")
- (should (eq (car (python-indent-context))
- :inside-paren-newline-start-from-block))
- (should (= (python-indent-calculate-indentation) 8))
- (python-tests-look-at "var_four):")
- (should (eq (car (python-indent-context))
- :inside-paren-newline-start-from-block))
- (should (= (python-indent-calculate-indentation) 8))
- (python-tests-look-at "print (var_one)")
- (should (eq (car (python-indent-context))
- :after-block-start))
- (should (= (python-indent-calculate-indentation) 4))))
-
-(ert-deftest python-indent-pep8-3 ()
- "Third pep8 case."
- (python-tests-with-temp-buffer
- "# Extra indentation is not necessary.
-foo = long_function_name(
- var_one, var_two,
- var_three, var_four)
-"
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "foo = long_function_name(")
- (should (eq (car (python-indent-context)) :after-comment))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "var_one, var_two,")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "var_three, var_four)")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 4))))
-
-(ert-deftest python-indent-base-case ()
- "Check base case does not trigger errors."
- (python-tests-with-temp-buffer
- "
-
-"
- (goto-char (point-min))
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))))
-
-(ert-deftest python-indent-after-comment-1 ()
- "The most simple after-comment case that shouldn't fail."
- (python-tests-with-temp-buffer
- "# Contents will be modified to correct indentation
-class Blag(object):
- def _on_child_complete(self, child_future):
- if self.in_terminal_state():
- pass
- # We only complete when all our async children have entered a
- # terminal state. At that point, if any child failed, we fail
-# with the exception with which the first child failed.
-"
- (python-tests-look-at "# We only complete")
- (should (eq (car (python-indent-context)) :after-block-end))
- (should (= (python-indent-calculate-indentation) 8))
- (python-tests-look-at "# terminal state")
- (should (eq (car (python-indent-context)) :after-comment))
- (should (= (python-indent-calculate-indentation) 8))
- (python-tests-look-at "# with the exception")
- (should (eq (car (python-indent-context)) :after-comment))
- ;; This one indents relative to previous block, even given the fact
- ;; that it was under-indented.
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "# terminal state" -1)
- ;; It doesn't hurt to check again.
- (should (eq (car (python-indent-context)) :after-comment))
- (python-indent-line)
- (should (= (current-indentation) 8))
- (python-tests-look-at "# with the exception")
- (should (eq (car (python-indent-context)) :after-comment))
- ;; Now everything should be lined up.
- (should (= (python-indent-calculate-indentation) 8))))
-
-(ert-deftest python-indent-after-comment-2 ()
- "Test after-comment in weird cases."
- (python-tests-with-temp-buffer
- "# Contents will be modified to correct indentation
-def func(arg):
- # I don't do much
- return arg
- # This comment is badly indented because the user forced so.
- # At this line python.el wont dedent, user is always right.
-
-comment_wins_over_ender = True
-
-# yeah, that.
-"
- (python-tests-look-at "# I don't do much")
- (should (eq (car (python-indent-context)) :after-block-start))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "return arg")
- ;; Comment here just gets ignored, this line is not a comment so
- ;; the rules won't apply here.
- (should (eq (car (python-indent-context)) :after-block-start))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "# This comment is badly indented")
- (should (eq (car (python-indent-context)) :after-block-end))
- ;; The return keyword do make indentation lose a level...
- (should (= (python-indent-calculate-indentation) 0))
- ;; ...but the current indentation was forced by the user.
- (python-tests-look-at "# At this line python.el wont dedent")
- (should (eq (car (python-indent-context)) :after-comment))
- (should (= (python-indent-calculate-indentation) 4))
- ;; Should behave the same for blank lines: potentially a comment.
- (forward-line 1)
- (should (eq (car (python-indent-context)) :after-comment))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "comment_wins_over_ender")
- ;; The comment won over the ender because the user said so.
- (should (eq (car (python-indent-context)) :after-comment))
- (should (= (python-indent-calculate-indentation) 4))
- ;; The indentation calculated fine for the assignment, but the user
- ;; choose to force it back to the first column. Next line should
- ;; be aware of that.
- (python-tests-look-at "# yeah, that.")
- (should (eq (car (python-indent-context)) :after-line))
- (should (= (python-indent-calculate-indentation) 0))))
-
-(ert-deftest python-indent-after-comment-3 ()
- "Test after-comment in buggy case."
- (python-tests-with-temp-buffer
- "
-class A(object):
-
- def something(self, arg):
- if True:
- return arg
-
- # A comment
-
- @adecorator
- def method(self, a, b):
- pass
-"
- (python-tests-look-at "@adecorator")
- (should (eq (car (python-indent-context)) :after-comment))
- (should (= (python-indent-calculate-indentation) 4))))
-
-(ert-deftest python-indent-inside-paren-1 ()
- "The most simple inside-paren case that shouldn't fail."
- (python-tests-with-temp-buffer
- "
-data = {
- 'key':
- {
- 'objlist': [
- {
- 'pk': 1,
- 'name': 'first',
- },
- {
- 'pk': 2,
- 'name': 'second',
- }
- ]
- }
-}
-"
- (python-tests-look-at "data = {")
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "'key':")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "{")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "'objlist': [")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 8))
- (python-tests-look-at "{")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 12))
- (python-tests-look-at "'pk': 1,")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 16))
- (python-tests-look-at "'name': 'first',")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 16))
- (python-tests-look-at "},")
- (should (eq (car (python-indent-context))
- :inside-paren-at-closing-nested-paren))
- (should (= (python-indent-calculate-indentation) 12))
- (python-tests-look-at "{")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 12))
- (python-tests-look-at "'pk': 2,")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 16))
- (python-tests-look-at "'name': 'second',")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 16))
- (python-tests-look-at "}")
- (should (eq (car (python-indent-context))
- :inside-paren-at-closing-nested-paren))
- (should (= (python-indent-calculate-indentation) 12))
- (python-tests-look-at "]")
- (should (eq (car (python-indent-context))
- :inside-paren-at-closing-nested-paren))
- (should (= (python-indent-calculate-indentation) 8))
- (python-tests-look-at "}")
- (should (eq (car (python-indent-context))
- :inside-paren-at-closing-nested-paren))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "}")
- (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
- (should (= (python-indent-calculate-indentation) 0))))
-
-(ert-deftest python-indent-inside-paren-2 ()
- "Another more compact paren group style."
- (python-tests-with-temp-buffer
- "
-data = {'key': {
- 'objlist': [
- {'pk': 1,
- 'name': 'first'},
- {'pk': 2,
- 'name': 'second'}
- ]
-}}
-"
- (python-tests-look-at "data = {")
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "'objlist': [")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "{'pk': 1,")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 8))
- (python-tests-look-at "'name': 'first'},")
- (should (eq (car (python-indent-context)) :inside-paren))
- (should (= (python-indent-calculate-indentation) 9))
- (python-tests-look-at "{'pk': 2,")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 8))
- (python-tests-look-at "'name': 'second'}")
- (should (eq (car (python-indent-context)) :inside-paren))
- (should (= (python-indent-calculate-indentation) 9))
- (python-tests-look-at "]")
- (should (eq (car (python-indent-context))
- :inside-paren-at-closing-nested-paren))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "}}")
- (should (eq (car (python-indent-context))
- :inside-paren-at-closing-nested-paren))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "}")
- (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
- (should (= (python-indent-calculate-indentation) 0))))
-
-(ert-deftest python-indent-inside-paren-3 ()
- "The simplest case possible."
- (python-tests-with-temp-buffer
- "
-data = ('these',
- 'are',
- 'the',
- 'tokens')
-"
- (python-tests-look-at "data = ('these',")
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :inside-paren))
- (should (= (python-indent-calculate-indentation) 8))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :inside-paren))
- (should (= (python-indent-calculate-indentation) 8))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :inside-paren))
- (should (= (python-indent-calculate-indentation) 8))))
-
-(ert-deftest python-indent-inside-paren-4 ()
- "Respect indentation of first column."
- (python-tests-with-temp-buffer
- "
-data = [ [ 'these', 'are'],
- ['the', 'tokens' ] ]
-"
- (python-tests-look-at "data = [ [ 'these', 'are'],")
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :inside-paren))
- (should (= (python-indent-calculate-indentation) 9))))
-
-(ert-deftest python-indent-inside-paren-5 ()
- "Test when :inside-paren initial parens are skipped in context start."
- (python-tests-with-temp-buffer
- "
-while ((not some_condition) and
- another_condition):
- do_something_interesting(
- with_some_arg)
-"
- (python-tests-look-at "while ((not some_condition) and")
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :inside-paren))
- (should (= (python-indent-calculate-indentation) 7))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :after-block-start))
- (should (= (python-indent-calculate-indentation) 4))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 8))))
-
-(ert-deftest python-indent-inside-paren-6 ()
- "This should be aligned.."
- (python-tests-with-temp-buffer
- "
-CHOICES = (('some', 'choice'),
- ('another', 'choice'),
- ('more', 'choices'))
-"
- (python-tests-look-at "CHOICES = (('some', 'choice'),")
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :inside-paren))
- (should (= (python-indent-calculate-indentation) 11))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :inside-paren))
- (should (= (python-indent-calculate-indentation) 11))))
-
-(ert-deftest python-indent-inside-paren-7 ()
- "Test for Bug#21762."
- (python-tests-with-temp-buffer
- "import re as myre\nvar = [\n"
- (goto-char (point-max))
- ;; This signals an error if the test fails
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))))
-
-(ert-deftest python-indent-after-block-1 ()
- "The most simple after-block case that shouldn't fail."
- (python-tests-with-temp-buffer
- "
-def foo(a, b, c=True):
-"
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (goto-char (point-max))
- (should (eq (car (python-indent-context)) :after-block-start))
- (should (= (python-indent-calculate-indentation) 4))))
-
-(ert-deftest python-indent-after-block-2 ()
- "A weird (malformed) multiline block statement."
- (python-tests-with-temp-buffer
- "
-def foo(a, b, c={
- 'a':
-}):
-"
- (goto-char (point-max))
- (should (eq (car (python-indent-context)) :after-block-start))
- (should (= (python-indent-calculate-indentation) 4))))
-
-(ert-deftest python-indent-after-block-3 ()
- "A weird (malformed) sample, usually found in python shells."
- (python-tests-with-temp-buffer
- "
-In [1]:
-def func():
-pass
-
-In [2]:
-something
-"
- (python-tests-look-at "pass")
- (should (eq (car (python-indent-context)) :after-block-start))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "something")
- (end-of-line)
- (should (eq (car (python-indent-context)) :after-line))
- (should (= (python-indent-calculate-indentation) 0))))
-
-(ert-deftest python-indent-after-backslash-1 ()
- "The most common case."
- (python-tests-with-temp-buffer
- "
-from foo.bar.baz import something, something_1 \\\\
- something_2 something_3, \\\\
- something_4, something_5
-"
- (python-tests-look-at "from foo.bar.baz import something, something_1")
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "something_2 something_3,")
- (should (eq (car (python-indent-context)) :after-backslash-first-line))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "something_4, something_5")
- (should (eq (car (python-indent-context)) :after-backslash))
- (should (= (python-indent-calculate-indentation) 4))
- (goto-char (point-max))
- (should (eq (car (python-indent-context)) :after-line))
- (should (= (python-indent-calculate-indentation) 0))))
-
-(ert-deftest python-indent-after-backslash-2 ()
- "A pretty extreme complicated case."
- (python-tests-with-temp-buffer
- "
-objects = Thing.objects.all() \\\\
- .filter(
- type='toy',
- status='bought'
- ) \\\\
- .aggregate(
- Sum('amount')
- ) \\\\
- .values_list()
-"
- (python-tests-look-at "objects = Thing.objects.all()")
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at ".filter(")
- (should (eq (car (python-indent-context))
- :after-backslash-dotted-continuation))
- (should (= (python-indent-calculate-indentation) 23))
- (python-tests-look-at "type='toy',")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 27))
- (python-tests-look-at "status='bought'")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 27))
- (python-tests-look-at ") \\\\")
- (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
- (should (= (python-indent-calculate-indentation) 23))
- (python-tests-look-at ".aggregate(")
- (should (eq (car (python-indent-context))
- :after-backslash-dotted-continuation))
- (should (= (python-indent-calculate-indentation) 23))
- (python-tests-look-at "Sum('amount')")
- (should (eq (car (python-indent-context)) :inside-paren-newline-start))
- (should (= (python-indent-calculate-indentation) 27))
- (python-tests-look-at ") \\\\")
- (should (eq (car (python-indent-context)) :inside-paren-at-closing-paren))
- (should (= (python-indent-calculate-indentation) 23))
- (python-tests-look-at ".values_list()")
- (should (eq (car (python-indent-context))
- :after-backslash-dotted-continuation))
- (should (= (python-indent-calculate-indentation) 23))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :after-line))
- (should (= (python-indent-calculate-indentation) 0))))
-
-(ert-deftest python-indent-after-backslash-3 ()
- "Backslash continuation from block start."
- (python-tests-with-temp-buffer
- "
-with open('/path/to/some/file/you/want/to/read') as file_1, \\\\
- open('/path/to/some/file/being/written', 'w') as file_2:
- file_2.write(file_1.read())
-"
- (python-tests-look-at
- "with open('/path/to/some/file/you/want/to/read') as file_1, \\\\")
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at
- "open('/path/to/some/file/being/written', 'w') as file_2")
- (should (eq (car (python-indent-context))
- :after-backslash-block-continuation))
- (should (= (python-indent-calculate-indentation) 5))
- (python-tests-look-at "file_2.write(file_1.read())")
- (should (eq (car (python-indent-context)) :after-block-start))
- (should (= (python-indent-calculate-indentation) 4))))
-
-(ert-deftest python-indent-after-backslash-4 ()
- "Backslash continuation from assignment."
- (python-tests-with-temp-buffer
- "
-super_awful_assignment = some_calculation() and \\\\
- another_calculation() and \\\\
- some_final_calculation()
-"
- (python-tests-look-at
- "super_awful_assignment = some_calculation() and \\\\")
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "another_calculation() and \\\\")
- (should (eq (car (python-indent-context))
- :after-backslash-assignment-continuation))
- (should (= (python-indent-calculate-indentation) 25))
- (python-tests-look-at "some_final_calculation()")
- (should (eq (car (python-indent-context)) :after-backslash))
- (should (= (python-indent-calculate-indentation) 25))))
-
-(ert-deftest python-indent-after-backslash-5 ()
- "Dotted continuation bizarre example."
- (python-tests-with-temp-buffer
- "
-def delete_all_things():
- Thing \\\\
- .objects.all() \\\\
- .delete()
-"
- (python-tests-look-at "Thing \\\\")
- (should (eq (car (python-indent-context)) :after-block-start))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at ".objects.all() \\\\")
- (should (eq (car (python-indent-context)) :after-backslash-first-line))
- (should (= (python-indent-calculate-indentation) 8))
- (python-tests-look-at ".delete()")
- (should (eq (car (python-indent-context))
- :after-backslash-dotted-continuation))
- (should (= (python-indent-calculate-indentation) 16))))
-
-(ert-deftest python-indent-block-enders-1 ()
- "Test de-indentation for pass keyword."
- (python-tests-with-temp-buffer
- "
-Class foo(object):
-
- def bar(self):
- if self.baz:
- return (1,
- 2,
- 3)
-
- else:
- pass
-"
- (python-tests-look-at "3)")
- (forward-line 1)
- (should (= (python-indent-calculate-indentation) 8))
- (python-tests-look-at "pass")
- (forward-line 1)
- (should (eq (car (python-indent-context)) :after-block-end))
- (should (= (python-indent-calculate-indentation) 8))))
-
-(ert-deftest python-indent-block-enders-2 ()
- "Test de-indentation for return keyword."
- (python-tests-with-temp-buffer
- "
-Class foo(object):
- '''raise lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
-
- eiusmod tempor incididunt ut labore et dolore magna aliqua.
- '''
- def bar(self):
- \"return (1, 2, 3).\"
- if self.baz:
- return (1,
- 2,
- 3)
-"
- (python-tests-look-at "def")
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "if")
- (should (= (python-indent-calculate-indentation) 8))
- (python-tests-look-at "return")
- (should (= (python-indent-calculate-indentation) 12))
- (goto-char (point-max))
- (should (eq (car (python-indent-context)) :after-block-end))
- (should (= (python-indent-calculate-indentation) 8))))
-
-(ert-deftest python-indent-block-enders-3 ()
- "Test de-indentation for continue keyword."
- (python-tests-with-temp-buffer
- "
-for element in lst:
- if element is None:
- continue
-"
- (python-tests-look-at "if")
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "continue")
- (should (= (python-indent-calculate-indentation) 8))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :after-block-end))
- (should (= (python-indent-calculate-indentation) 4))))
-
-(ert-deftest python-indent-block-enders-4 ()
- "Test de-indentation for break keyword."
- (python-tests-with-temp-buffer
- "
-for element in lst:
- if element is None:
- break
-"
- (python-tests-look-at "if")
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "break")
- (should (= (python-indent-calculate-indentation) 8))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :after-block-end))
- (should (= (python-indent-calculate-indentation) 4))))
-
-(ert-deftest python-indent-block-enders-5 ()
- "Test de-indentation for raise keyword."
- (python-tests-with-temp-buffer
- "
-for element in lst:
- if element is None:
- raise ValueError('Element cannot be None')
-"
- (python-tests-look-at "if")
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "raise")
- (should (= (python-indent-calculate-indentation) 8))
- (forward-line 1)
- (should (eq (car (python-indent-context)) :after-block-end))
- (should (= (python-indent-calculate-indentation) 4))))
-
-(ert-deftest python-indent-dedenters-1 ()
- "Test de-indentation for the elif keyword."
- (python-tests-with-temp-buffer
- "
-if save:
- try:
- write_to_disk(data)
- finally:
- cleanup()
- elif
-"
- (python-tests-look-at "elif\n")
- (should (eq (car (python-indent-context)) :at-dedenter-block-start))
- (should (= (python-indent-calculate-indentation) 0))
- (should (= (python-indent-calculate-indentation t) 0))))
-
-(ert-deftest python-indent-dedenters-2 ()
- "Test de-indentation for the else keyword."
- (python-tests-with-temp-buffer
- "
-if save:
- try:
- write_to_disk(data)
- except IOError:
- msg = 'Error saving to disk'
- message(msg)
- logger.exception(msg)
- except Exception:
- if hide_details:
- logger.exception('Unhandled exception')
- else
- finally:
- data.free()
-"
- (python-tests-look-at "else\n")
- (should (eq (car (python-indent-context)) :at-dedenter-block-start))
- (should (= (python-indent-calculate-indentation) 8))
- (python-indent-line t)
- (should (= (python-indent-calculate-indentation t) 4))
- (python-indent-line t)
- (should (= (python-indent-calculate-indentation t) 0))
- (python-indent-line t)
- (should (= (python-indent-calculate-indentation t) 8))))
-
-(ert-deftest python-indent-dedenters-3 ()
- "Test de-indentation for the except keyword."
- (python-tests-with-temp-buffer
- "
-if save:
- try:
- write_to_disk(data)
- except
-"
- (python-tests-look-at "except\n")
- (should (eq (car (python-indent-context)) :at-dedenter-block-start))
- (should (= (python-indent-calculate-indentation) 4))
- (python-indent-line t)
- (should (= (python-indent-calculate-indentation t) 4))))
-
-(ert-deftest python-indent-dedenters-4 ()
- "Test de-indentation for the finally keyword."
- (python-tests-with-temp-buffer
- "
-if save:
- try:
- write_to_disk(data)
- finally
-"
- (python-tests-look-at "finally\n")
- (should (eq (car (python-indent-context)) :at-dedenter-block-start))
- (should (= (python-indent-calculate-indentation) 4))
- (python-indent-line t)
- (should (= (python-indent-calculate-indentation) 4))))
-
-(ert-deftest python-indent-dedenters-5 ()
- "Test invalid levels are skipped in a complex example."
- (python-tests-with-temp-buffer
- "
-if save:
- try:
- write_to_disk(data)
- except IOError:
- msg = 'Error saving to disk'
- message(msg)
- logger.exception(msg)
- finally:
- if cleanup:
- do_cleanup()
- else
-"
- (python-tests-look-at "else\n")
- (should (eq (car (python-indent-context)) :at-dedenter-block-start))
- (should (= (python-indent-calculate-indentation) 8))
- (should (= (python-indent-calculate-indentation t) 0))
- (python-indent-line t)
- (should (= (python-indent-calculate-indentation t) 8))))
-
-(ert-deftest python-indent-dedenters-6 ()
- "Test indentation is zero when no opening block for dedenter."
- (python-tests-with-temp-buffer
- "
-try:
- # if save:
- write_to_disk(data)
- else
-"
- (python-tests-look-at "else\n")
- (should (eq (car (python-indent-context)) :at-dedenter-block-start))
- (should (= (python-indent-calculate-indentation) 0))
- (should (= (python-indent-calculate-indentation t) 0))))
-
-(ert-deftest python-indent-dedenters-7 ()
- "Test indentation case from Bug#15163."
- (python-tests-with-temp-buffer
- "
-if a:
- if b:
- pass
- else:
- pass
- else:
-"
- (python-tests-look-at "else:" 2)
- (should (eq (car (python-indent-context)) :at-dedenter-block-start))
- (should (= (python-indent-calculate-indentation) 0))
- (should (= (python-indent-calculate-indentation t) 0))))
-
-(ert-deftest python-indent-dedenters-8 ()
- "Test indentation for Bug#18432."
- (python-tests-with-temp-buffer
- "
-if (a == 1 or
- a == 2):
- pass
-elif (a == 3 or
-a == 4):
-"
- (python-tests-look-at "elif (a == 3 or")
- (should (eq (car (python-indent-context)) :at-dedenter-block-start))
- (should (= (python-indent-calculate-indentation) 0))
- (should (= (python-indent-calculate-indentation t) 0))
- (python-tests-look-at "a == 4):\n")
- (should (eq (car (python-indent-context)) :inside-paren))
- (should (= (python-indent-calculate-indentation) 6))
- (python-indent-line)
- (should (= (python-indent-calculate-indentation t) 4))
- (python-indent-line t)
- (should (= (python-indent-calculate-indentation t) 0))
- (python-indent-line t)
- (should (= (python-indent-calculate-indentation t) 6))))
-
-(ert-deftest python-indent-inside-string-1 ()
- "Test indentation for strings."
- (python-tests-with-temp-buffer
- "
-multiline = '''
-bunch
-of
-lines
-'''
-"
- (python-tests-look-at "multiline = '''")
- (should (eq (car (python-indent-context)) :no-indent))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "bunch")
- (should (eq (car (python-indent-context)) :inside-string))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "of")
- (should (eq (car (python-indent-context)) :inside-string))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "lines")
- (should (eq (car (python-indent-context)) :inside-string))
- (should (= (python-indent-calculate-indentation) 0))
- (python-tests-look-at "'''")
- (should (eq (car (python-indent-context)) :inside-string))
- (should (= (python-indent-calculate-indentation) 0))))
-
-(ert-deftest python-indent-inside-string-2 ()
- "Test indentation for docstrings."
- (python-tests-with-temp-buffer
- "
-def fn(a, b, c=True):
- '''docstring
- bunch
- of
- lines
- '''
-"
- (python-tests-look-at "'''docstring")
- (should (eq (car (python-indent-context)) :after-block-start))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "bunch")
- (should (eq (car (python-indent-context)) :inside-docstring))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "of")
- (should (eq (car (python-indent-context)) :inside-docstring))
- ;; Any indentation deeper than the base-indent must remain unmodified.
- (should (= (python-indent-calculate-indentation) 8))
- (python-tests-look-at "lines")
- (should (eq (car (python-indent-context)) :inside-docstring))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "'''")
- (should (eq (car (python-indent-context)) :inside-docstring))
- (should (= (python-indent-calculate-indentation) 4))))
-
-(ert-deftest python-indent-inside-string-3 ()
- "Test indentation for nested strings."
- (python-tests-with-temp-buffer
- "
-def fn(a, b, c=True):
- some_var = '''
- bunch
- of
- lines
- '''
-"
- (python-tests-look-at "some_var = '''")
- (should (eq (car (python-indent-context)) :after-block-start))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "bunch")
- (should (eq (car (python-indent-context)) :inside-string))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "of")
- (should (eq (car (python-indent-context)) :inside-string))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "lines")
- (should (eq (car (python-indent-context)) :inside-string))
- (should (= (python-indent-calculate-indentation) 4))
- (python-tests-look-at "'''")
- (should (eq (car (python-indent-context)) :inside-string))
- (should (= (python-indent-calculate-indentation) 4))))
-
-(ert-deftest python-indent-electric-colon-1 ()
- "Test indentation case from Bug#18228."
- (python-tests-with-temp-buffer
- "
-def a():
- pass
-
-def b()
-"
- (python-tests-look-at "def b()")
- (goto-char (line-end-position))
- (python-tests-self-insert ":")
- (should (= (current-indentation) 0))))
-
-(ert-deftest python-indent-electric-colon-2 ()
- "Test indentation case for dedenter."
- (python-tests-with-temp-buffer
- "
-if do:
- something()
- else
-"
- (python-tests-look-at "else")
- (goto-char (line-end-position))
- (python-tests-self-insert ":")
- (should (= (current-indentation) 0))))
-
-(ert-deftest python-indent-electric-colon-3 ()
- "Test indentation case for multi-line dedenter."
- (python-tests-with-temp-buffer
- "
-if do:
- something()
- elif (this
- and
- that)
-"
- (python-tests-look-at "that)")
- (goto-char (line-end-position))
- (python-tests-self-insert ":")
- (python-tests-look-at "elif" -1)
- (should (= (current-indentation) 0))
- (python-tests-look-at "and")
- (should (= (current-indentation) 6))
- (python-tests-look-at "that)")
- (should (= (current-indentation) 6))))
-
-(ert-deftest python-indent-region-1 ()
- "Test indentation case from Bug#18843."
- (let ((contents "
-def foo ():
- try:
- pass
- except:
- pass
-"))
- (python-tests-with-temp-buffer
- contents
- (python-indent-region (point-min) (point-max))
- (should (string= (buffer-substring-no-properties (point-min) (point-max))
- contents)))))
-
-(ert-deftest python-indent-region-2 ()
- "Test region indentation on comments."
- (let ((contents "
-def f():
- if True:
- pass
-
-# This is
-# some multiline
-# comment
-"))
- (python-tests-with-temp-buffer
- contents
- (python-indent-region (point-min) (point-max))
- (should (string= (buffer-substring-no-properties (point-min) (point-max))
- contents)))))
-
-(ert-deftest python-indent-region-3 ()
- "Test region indentation on comments."
- (let ((contents "
-def f():
- if True:
- pass
-# This is
-# some multiline
-# comment
-")
- (expected "
-def f():
- if True:
- pass
- # This is
- # some multiline
- # comment
-"))
- (python-tests-with-temp-buffer
- contents
- (python-indent-region (point-min) (point-max))
- (should (string= (buffer-substring-no-properties (point-min) (point-max))
- expected)))))
-
-(ert-deftest python-indent-region-4 ()
- "Test region indentation block starts, dedenters and enders."
- (let ((contents "
-def f():
- if True:
-a = 5
- else:
- a = 10
- return a
-")
- (expected "
-def f():
- if True:
- a = 5
- else:
- a = 10
- return a
-"))
- (python-tests-with-temp-buffer
- contents
- (python-indent-region (point-min) (point-max))
- (should (string= (buffer-substring-no-properties (point-min) (point-max))
- expected)))))
-
-(ert-deftest python-indent-region-5 ()
- "Test region indentation for docstrings."
- (let ((contents "
-def f():
-'''
-this is
- a multiline
-string
-'''
- x = \\
- '''
-this is an arbitrarily
- indented multiline
- string
-'''
-")
- (expected "
-def f():
- '''
- this is
- a multiline
- string
- '''
- x = \\
- '''
-this is an arbitrarily
- indented multiline
- string
-'''
-"))
- (python-tests-with-temp-buffer
- contents
- (python-indent-region (point-min) (point-max))
- (should (string= (buffer-substring-no-properties (point-min) (point-max))
- expected)))))
-
-
-;;; Mark
-
-(ert-deftest python-mark-defun-1 ()
- """Test `python-mark-defun' with point at defun symbol start."""
- (python-tests-with-temp-buffer
- "
-def foo(x):
- return x
-
-class A:
- pass
-
-class B:
-
- def __init__(self):
- self.b = 'b'
-
- def fun(self):
- return self.b
-
-class C:
- '''docstring'''
-"
- (let ((expected-mark-beginning-position
- (progn
- (python-tests-look-at "class A:")
- (1- (point))))
- (expected-mark-end-position-1
- (save-excursion
- (python-tests-look-at "pass")
- (forward-line)
- (point)))
- (expected-mark-end-position-2
- (save-excursion
- (python-tests-look-at "return self.b")
- (forward-line)
- (point)))
- (expected-mark-end-position-3
- (save-excursion
- (python-tests-look-at "'''docstring'''")
- (forward-line)
- (point))))
- ;; Select class A only, with point at bol.
- (python-mark-defun 1)
- (should (= (point) expected-mark-beginning-position))
- (should (= (marker-position (mark-marker))
- expected-mark-end-position-1))
- ;; expand to class B, start position should remain the same.
- (python-mark-defun 1)
- (should (= (point) expected-mark-beginning-position))
- (should (= (marker-position (mark-marker))
- expected-mark-end-position-2))
- ;; expand to class C, start position should remain the same.
- (python-mark-defun 1)
- (should (= (point) expected-mark-beginning-position))
- (should (= (marker-position (mark-marker))
- expected-mark-end-position-3)))))
-
-(ert-deftest python-mark-defun-2 ()
- """Test `python-mark-defun' with point at nested defun symbol start."""
- (python-tests-with-temp-buffer
- "
-def foo(x):
- return x
-
-class A:
- pass
-
-class B:
-
- def __init__(self):
- self.b = 'b'
-
- def fun(self):
- return self.b
-
-class C:
- '''docstring'''
-"
- (let ((expected-mark-beginning-position
- (progn
- (python-tests-look-at "def __init__(self):")
- (1- (line-beginning-position))))
- (expected-mark-end-position-1
- (save-excursion
- (python-tests-look-at "self.b = 'b'")
- (forward-line)
- (point)))
- (expected-mark-end-position-2
- (save-excursion
- (python-tests-look-at "return self.b")
- (forward-line)
- (point)))
- (expected-mark-end-position-3
- (save-excursion
- (python-tests-look-at "'''docstring'''")
- (forward-line)
- (point))))
- ;; Select B.__init only, with point at its start.
- (python-mark-defun 1)
- (should (= (point) expected-mark-beginning-position))
- (should (= (marker-position (mark-marker))
- expected-mark-end-position-1))
- ;; expand to B.fun, start position should remain the same.
- (python-mark-defun 1)
- (should (= (point) expected-mark-beginning-position))
- (should (= (marker-position (mark-marker))
- expected-mark-end-position-2))
- ;; expand to class C, start position should remain the same.
- (python-mark-defun 1)
- (should (= (point) expected-mark-beginning-position))
- (should (= (marker-position (mark-marker))
- expected-mark-end-position-3)))))
-
-(ert-deftest python-mark-defun-3 ()
- """Test `python-mark-defun' with point inside defun symbol."""
- (python-tests-with-temp-buffer
- "
-def foo(x):
- return x
-
-class A:
- pass
-
-class B:
-
- def __init__(self):
- self.b = 'b'
-
- def fun(self):
- return self.b
-
-class C:
- '''docstring'''
-"
- (let ((expected-mark-beginning-position
- (progn
- (python-tests-look-at "def fun(self):")
- (python-tests-look-at "(self):")
- (1- (line-beginning-position))))
- (expected-mark-end-position
- (save-excursion
- (python-tests-look-at "return self.b")
- (forward-line)
- (point))))
- ;; Should select B.fun, despite point is inside the defun symbol.
- (python-mark-defun 1)
- (should (= (point) expected-mark-beginning-position))
- (should (= (marker-position (mark-marker))
- expected-mark-end-position)))))
-
-
-;;; Navigation
-
-(ert-deftest python-nav-beginning-of-defun-1 ()
- (python-tests-with-temp-buffer
- "
-def decoratorFunctionWithArguments(arg1, arg2, arg3):
- '''print decorated function call data to stdout.
-
- Usage:
-
- @decoratorFunctionWithArguments('arg1', 'arg2')
- def func(a, b, c=True):
- pass
- '''
-
- def wwrap(f):
- print 'Inside wwrap()'
- def wrapped_f(*args):
- print 'Inside wrapped_f()'
- print 'Decorator arguments:', arg1, arg2, arg3
- f(*args)
- print 'After f(*args)'
- return wrapped_f
- return wwrap
-"
- (python-tests-look-at "return wrap")
- (should (= (save-excursion
- (python-nav-beginning-of-defun)
- (point))
- (save-excursion
- (python-tests-look-at "def wrapped_f(*args):" -1)
- (beginning-of-line)
- (point))))
- (python-tests-look-at "def wrapped_f(*args):" -1)
- (should (= (save-excursion
- (python-nav-beginning-of-defun)
- (point))
- (save-excursion
- (python-tests-look-at "def wwrap(f):" -1)
- (beginning-of-line)
- (point))))
- (python-tests-look-at "def wwrap(f):" -1)
- (should (= (save-excursion
- (python-nav-beginning-of-defun)
- (point))
- (save-excursion
- (python-tests-look-at "def decoratorFunctionWithArguments" -1)
- (beginning-of-line)
- (point))))))
-
-(ert-deftest python-nav-beginning-of-defun-2 ()
- (python-tests-with-temp-buffer
- "
-class C(object):
-
- def m(self):
- self.c()
-
- def b():
- pass
-
- def a():
- pass
-
- def c(self):
- pass
-"
- ;; Nested defuns, are handled with care.
- (python-tests-look-at "def c(self):")
- (should (= (save-excursion
- (python-nav-beginning-of-defun)
- (point))
- (save-excursion
- (python-tests-look-at "def m(self):" -1)
- (beginning-of-line)
- (point))))
- ;; Defuns on same levels should be respected.
- (python-tests-look-at "def a():" -1)
- (should (= (save-excursion
- (python-nav-beginning-of-defun)
- (point))
- (save-excursion
- (python-tests-look-at "def b():" -1)
- (beginning-of-line)
- (point))))
- ;; Jump to a top level defun.
- (python-tests-look-at "def b():" -1)
- (should (= (save-excursion
- (python-nav-beginning-of-defun)
- (point))
- (save-excursion
- (python-tests-look-at "def m(self):" -1)
- (beginning-of-line)
- (point))))
- ;; Jump to a top level defun again.
- (python-tests-look-at "def m(self):" -1)
- (should (= (save-excursion
- (python-nav-beginning-of-defun)
- (point))
- (save-excursion
- (python-tests-look-at "class C(object):" -1)
- (beginning-of-line)
- (point))))))
-
-(ert-deftest python-nav-end-of-defun-1 ()
- (python-tests-with-temp-buffer
- "
-class C(object):
-
- def m(self):
- self.c()
-
- def b():
- pass
-
- def a():
- pass
-
- def c(self):
- pass
-"
- (should (= (save-excursion
- (python-tests-look-at "class C(object):")
- (python-nav-end-of-defun)
- (point))
- (save-excursion
- (point-max))))
- (should (= (save-excursion
- (python-tests-look-at "def m(self):")
- (python-nav-end-of-defun)
- (point))
- (save-excursion
- (python-tests-look-at "def c(self):")
- (forward-line -1)
- (point))))
- (should (= (save-excursion
- (python-tests-look-at "def b():")
- (python-nav-end-of-defun)
- (point))
- (save-excursion
- (python-tests-look-at "def b():")
- (forward-line 2)
- (point))))
- (should (= (save-excursion
- (python-tests-look-at "def c(self):")
- (python-nav-end-of-defun)
- (point))
- (save-excursion
- (point-max))))))
-
-(ert-deftest python-nav-end-of-defun-2 ()
- (python-tests-with-temp-buffer
- "
-def decoratorFunctionWithArguments(arg1, arg2, arg3):
- '''print decorated function call data to stdout.
-
- Usage:
-
- @decoratorFunctionWithArguments('arg1', 'arg2')
- def func(a, b, c=True):
- pass
- '''
-
- def wwrap(f):
- print 'Inside wwrap()'
- def wrapped_f(*args):
- print 'Inside wrapped_f()'
- print 'Decorator arguments:', arg1, arg2, arg3
- f(*args)
- print 'After f(*args)'
- return wrapped_f
- return wwrap
-"
- (should (= (save-excursion
- (python-tests-look-at "def decoratorFunctionWithArguments")
- (python-nav-end-of-defun)
- (point))
- (save-excursion
- (point-max))))
- (should (= (save-excursion
- (python-tests-look-at "@decoratorFunctionWithArguments")
- (python-nav-end-of-defun)
- (point))
- (save-excursion
- (point-max))))
- (should (= (save-excursion
- (python-tests-look-at "def wwrap(f):")
- (python-nav-end-of-defun)
- (point))
- (save-excursion
- (python-tests-look-at "return wwrap")
- (line-beginning-position))))
- (should (= (save-excursion
- (python-tests-look-at "def wrapped_f(*args):")
- (python-nav-end-of-defun)
- (point))
- (save-excursion
- (python-tests-look-at "return wrapped_f")
- (line-beginning-position))))
- (should (= (save-excursion
- (python-tests-look-at "f(*args)")
- (python-nav-end-of-defun)
- (point))
- (save-excursion
- (python-tests-look-at "return wrapped_f")
- (line-beginning-position))))))
-
-(ert-deftest python-nav-backward-defun-1 ()
- (python-tests-with-temp-buffer
- "
-class A(object): # A
-
- def a(self): # a
- pass
-
- def b(self): # b
- pass
-
- class B(object): # B
-
- class C(object): # C
-
- def d(self): # d
- pass
-
- # def e(self): # e
- # pass
-
- def c(self): # c
- pass
-
- # def d(self): # d
- # pass
-"
- (goto-char (point-max))
- (should (= (save-excursion (python-nav-backward-defun))
- (python-tests-look-at " def c(self): # c" -1)))
- (should (= (save-excursion (python-nav-backward-defun))
- (python-tests-look-at " def d(self): # d" -1)))
- (should (= (save-excursion (python-nav-backward-defun))
- (python-tests-look-at " class C(object): # C" -1)))
- (should (= (save-excursion (python-nav-backward-defun))
- (python-tests-look-at " class B(object): # B" -1)))
- (should (= (save-excursion (python-nav-backward-defun))
- (python-tests-look-at " def b(self): # b" -1)))
- (should (= (save-excursion (python-nav-backward-defun))
- (python-tests-look-at " def a(self): # a" -1)))
- (should (= (save-excursion (python-nav-backward-defun))
- (python-tests-look-at "class A(object): # A" -1)))
- (should (not (python-nav-backward-defun)))))
-
-(ert-deftest python-nav-backward-defun-2 ()
- (python-tests-with-temp-buffer
- "
-def decoratorFunctionWithArguments(arg1, arg2, arg3):
- '''print decorated function call data to stdout.
-
- Usage:
-
- @decoratorFunctionWithArguments('arg1', 'arg2')
- def func(a, b, c=True):
- pass
- '''
-
- def wwrap(f):
- print 'Inside wwrap()'
- def wrapped_f(*args):
- print 'Inside wrapped_f()'
- print 'Decorator arguments:', arg1, arg2, arg3
- f(*args)
- print 'After f(*args)'
- return wrapped_f
- return wwrap
-"
- (goto-char (point-max))
- (should (= (save-excursion (python-nav-backward-defun))
- (python-tests-look-at " def wrapped_f(*args):" -1)))
- (should (= (save-excursion (python-nav-backward-defun))
- (python-tests-look-at " def wwrap(f):" -1)))
- (should (= (save-excursion (python-nav-backward-defun))
- (python-tests-look-at "def decoratorFunctionWithArguments(arg1, arg2, arg3):" -1)))
- (should (not (python-nav-backward-defun)))))
-
-(ert-deftest python-nav-backward-defun-3 ()
- (python-tests-with-temp-buffer
- "
-'''
- def u(self):
- pass
-
- def v(self):
- pass
-
- def w(self):
- pass
-'''
-
-class A(object):
- pass
-"
- (goto-char (point-min))
- (let ((point (python-tests-look-at "class A(object):")))
- (should (not (python-nav-backward-defun)))
- (should (= point (point))))))
-
-(ert-deftest python-nav-forward-defun-1 ()
- (python-tests-with-temp-buffer
- "
-class A(object): # A
-
- def a(self): # a
- pass
-
- def b(self): # b
- pass
-
- class B(object): # B
-
- class C(object): # C
-
- def d(self): # d
- pass
-
- # def e(self): # e
- # pass
-
- def c(self): # c
- pass
-
- # def d(self): # d
- # pass
-"
- (goto-char (point-min))
- (should (= (save-excursion (python-nav-forward-defun))
- (python-tests-look-at "(object): # A")))
- (should (= (save-excursion (python-nav-forward-defun))
- (python-tests-look-at "(self): # a")))
- (should (= (save-excursion (python-nav-forward-defun))
- (python-tests-look-at "(self): # b")))
- (should (= (save-excursion (python-nav-forward-defun))
- (python-tests-look-at "(object): # B")))
- (should (= (save-excursion (python-nav-forward-defun))
- (python-tests-look-at "(object): # C")))
- (should (= (save-excursion (python-nav-forward-defun))
- (python-tests-look-at "(self): # d")))
- (should (= (save-excursion (python-nav-forward-defun))
- (python-tests-look-at "(self): # c")))
- (should (not (python-nav-forward-defun)))))
-
-(ert-deftest python-nav-forward-defun-2 ()
- (python-tests-with-temp-buffer
- "
-def decoratorFunctionWithArguments(arg1, arg2, arg3):
- '''print decorated function call data to stdout.
-
- Usage:
-
- @decoratorFunctionWithArguments('arg1', 'arg2')
- def func(a, b, c=True):
- pass
- '''
-
- def wwrap(f):
- print 'Inside wwrap()'
- def wrapped_f(*args):
- print 'Inside wrapped_f()'
- print 'Decorator arguments:', arg1, arg2, arg3
- f(*args)
- print 'After f(*args)'
- return wrapped_f
- return wwrap
-"
- (goto-char (point-min))
- (should (= (save-excursion (python-nav-forward-defun))
- (python-tests-look-at "(arg1, arg2, arg3):")))
- (should (= (save-excursion (python-nav-forward-defun))
- (python-tests-look-at "(f):")))
- (should (= (save-excursion (python-nav-forward-defun))
- (python-tests-look-at "(*args):")))
- (should (not (python-nav-forward-defun)))))
-
-(ert-deftest python-nav-forward-defun-3 ()
- (python-tests-with-temp-buffer
- "
-class A(object):
- pass
-
-'''
- def u(self):
- pass
-
- def v(self):
- pass
-
- def w(self):
- pass
-'''
-"
- (goto-char (point-min))
- (let ((point (python-tests-look-at "(object):")))
- (should (not (python-nav-forward-defun)))
- (should (= point (point))))))
-
-(ert-deftest python-nav-beginning-of-statement-1 ()
- (python-tests-with-temp-buffer
- "
-v1 = 123 + \
- 456 + \
- 789
-v2 = (value1,
- value2,
-
- value3,
- value4)
-v3 = ('this is a string'
-
- 'that is continued'
- 'between lines'
- 'within a paren',
- # this is a comment, yo
- 'continue previous line')
-v4 = '''
-a very long
-string
-'''
-"
- (python-tests-look-at "v2 =")
- (python-util-forward-comment -1)
- (should (= (save-excursion
- (python-nav-beginning-of-statement)
- (point))
- (python-tests-look-at "v1 =" -1 t)))
- (python-tests-look-at "v3 =")
- (python-util-forward-comment -1)
- (should (= (save-excursion
- (python-nav-beginning-of-statement)
- (point))
- (python-tests-look-at "v2 =" -1 t)))
- (python-tests-look-at "v4 =")
- (python-util-forward-comment -1)
- (should (= (save-excursion
- (python-nav-beginning-of-statement)
- (point))
- (python-tests-look-at "v3 =" -1 t)))
- (goto-char (point-max))
- (python-util-forward-comment -1)
- (should (= (save-excursion
- (python-nav-beginning-of-statement)
- (point))
- (python-tests-look-at "v4 =" -1 t)))))
-
-(ert-deftest python-nav-end-of-statement-1 ()
- (python-tests-with-temp-buffer
- "
-v1 = 123 + \
- 456 + \
- 789
-v2 = (value1,
- value2,
-
- value3,
- value4)
-v3 = ('this is a string'
-
- 'that is continued'
- 'between lines'
- 'within a paren',
- # this is a comment, yo
- 'continue previous line')
-v4 = '''
-a very long
-string
-'''
-"
- (python-tests-look-at "v1 =")
- (should (= (save-excursion
- (python-nav-end-of-statement)
- (point))
- (save-excursion
- (python-tests-look-at "789")
- (line-end-position))))
- (python-tests-look-at "v2 =")
- (should (= (save-excursion
- (python-nav-end-of-statement)
- (point))
- (save-excursion
- (python-tests-look-at "value4)")
- (line-end-position))))
- (python-tests-look-at "v3 =")
- (should (= (save-excursion
- (python-nav-end-of-statement)
- (point))
- (save-excursion
- (python-tests-look-at
- "'continue previous line')")
- (line-end-position))))
- (python-tests-look-at "v4 =")
- (should (= (save-excursion
- (python-nav-end-of-statement)
- (point))
- (save-excursion
- (goto-char (point-max))
- (python-util-forward-comment -1)
- (point))))))
-
-(ert-deftest python-nav-forward-statement-1 ()
- (python-tests-with-temp-buffer
- "
-v1 = 123 + \
- 456 + \
- 789
-v2 = (value1,
- value2,
-
- value3,
- value4)
-v3 = ('this is a string'
-
- 'that is continued'
- 'between lines'
- 'within a paren',
- # this is a comment, yo
- 'continue previous line')
-v4 = '''
-a very long
-string
-'''
-"
- (python-tests-look-at "v1 =")
- (should (= (save-excursion
- (python-nav-forward-statement)
- (point))
- (python-tests-look-at "v2 =")))
- (should (= (save-excursion
- (python-nav-forward-statement)
- (point))
- (python-tests-look-at "v3 =")))
- (should (= (save-excursion
- (python-nav-forward-statement)
- (point))
- (python-tests-look-at "v4 =")))
- (should (= (save-excursion
- (python-nav-forward-statement)
- (point))
- (point-max)))))
-
-(ert-deftest python-nav-backward-statement-1 ()
- (python-tests-with-temp-buffer
- "
-v1 = 123 + \
- 456 + \
- 789
-v2 = (value1,
- value2,
-
- value3,
- value4)
-v3 = ('this is a string'
-
- 'that is continued'
- 'between lines'
- 'within a paren',
- # this is a comment, yo
- 'continue previous line')
-v4 = '''
-a very long
-string
-'''
-"
- (goto-char (point-max))
- (should (= (save-excursion
- (python-nav-backward-statement)
- (point))
- (python-tests-look-at "v4 =" -1)))
- (should (= (save-excursion
- (python-nav-backward-statement)
- (point))
- (python-tests-look-at "v3 =" -1)))
- (should (= (save-excursion
- (python-nav-backward-statement)
- (point))
- (python-tests-look-at "v2 =" -1)))
- (should (= (save-excursion
- (python-nav-backward-statement)
- (point))
- (python-tests-look-at "v1 =" -1)))))
-
-(ert-deftest python-nav-backward-statement-2 ()
- :expected-result :failed
- (python-tests-with-temp-buffer
- "
-v1 = 123 + \
- 456 + \
- 789
-v2 = (value1,
- value2,
-
- value3,
- value4)
-"
- ;; FIXME: For some reason `python-nav-backward-statement' is moving
- ;; back two sentences when starting from 'value4)'.
- (goto-char (point-max))
- (python-util-forward-comment -1)
- (should (= (save-excursion
- (python-nav-backward-statement)
- (point))
- (python-tests-look-at "v2 =" -1 t)))))
-
-(ert-deftest python-nav-beginning-of-block-1 ()
- (python-tests-with-temp-buffer
- "
-def decoratorFunctionWithArguments(arg1, arg2, arg3):
- '''print decorated function call data to stdout.
-
- Usage:
-
- @decoratorFunctionWithArguments('arg1', 'arg2')
- def func(a, b, c=True):
- pass
- '''
-
- def wwrap(f):
- print 'Inside wwrap()'
- def wrapped_f(*args):
- print 'Inside wrapped_f()'
- print 'Decorator arguments:', arg1, arg2, arg3
- f(*args)
- print 'After f(*args)'
- return wrapped_f
- return wwrap
-"
- (python-tests-look-at "return wwrap")
- (should (= (save-excursion
- (python-nav-beginning-of-block)
- (point))
- (python-tests-look-at "def decoratorFunctionWithArguments" -1)))
- (python-tests-look-at "print 'Inside wwrap()'")
- (should (= (save-excursion
- (python-nav-beginning-of-block)
- (point))
- (python-tests-look-at "def wwrap(f):" -1)))
- (python-tests-look-at "print 'After f(*args)'")
- (end-of-line)
- (should (= (save-excursion
- (python-nav-beginning-of-block)
- (point))
- (python-tests-look-at "def wrapped_f(*args):" -1)))
- (python-tests-look-at "return wrapped_f")
- (should (= (save-excursion
- (python-nav-beginning-of-block)
- (point))
- (python-tests-look-at "def wwrap(f):" -1)))))
-
-(ert-deftest python-nav-end-of-block-1 ()
- (python-tests-with-temp-buffer
- "
-def decoratorFunctionWithArguments(arg1, arg2, arg3):
- '''print decorated function call data to stdout.
-
- Usage:
-
- @decoratorFunctionWithArguments('arg1', 'arg2')
- def func(a, b, c=True):
- pass
- '''
-
- def wwrap(f):
- print 'Inside wwrap()'
- def wrapped_f(*args):
- print 'Inside wrapped_f()'
- print 'Decorator arguments:', arg1, arg2, arg3
- f(*args)
- print 'After f(*args)'
- return wrapped_f
- return wwrap
-"
- (python-tests-look-at "def decoratorFunctionWithArguments")
- (should (= (save-excursion
- (python-nav-end-of-block)
- (point))
- (save-excursion
- (goto-char (point-max))
- (python-util-forward-comment -1)
- (point))))
- (python-tests-look-at "def wwrap(f):")
- (should (= (save-excursion
- (python-nav-end-of-block)
- (point))
- (save-excursion
- (python-tests-look-at "return wrapped_f")
- (line-end-position))))
- (end-of-line)
- (should (= (save-excursion
- (python-nav-end-of-block)
- (point))
- (save-excursion
- (python-tests-look-at "return wrapped_f")
- (line-end-position))))
- (python-tests-look-at "f(*args)")
- (should (= (save-excursion
- (python-nav-end-of-block)
- (point))
- (save-excursion
- (python-tests-look-at "print 'After f(*args)'")
- (line-end-position))))))
-
-(ert-deftest python-nav-forward-block-1 ()
- "This also accounts as a test for `python-nav-backward-block'."
- (python-tests-with-temp-buffer
- "
-if request.user.is_authenticated():
- # def block():
- # pass
- try:
- profile = request.user.get_profile()
- except Profile.DoesNotExist:
- profile = Profile.objects.create(user=request.user)
- else:
- if profile.stats:
- profile.recalculate_stats()
- else:
- profile.clear_stats()
- finally:
- profile.views += 1
- profile.save()
-"
- (should (= (save-excursion (python-nav-forward-block))
- (python-tests-look-at "if request.user.is_authenticated():")))
- (should (= (save-excursion (python-nav-forward-block))
- (python-tests-look-at "try:")))
- (should (= (save-excursion (python-nav-forward-block))
- (python-tests-look-at "except Profile.DoesNotExist:")))
- (should (= (save-excursion (python-nav-forward-block))
- (python-tests-look-at "else:")))
- (should (= (save-excursion (python-nav-forward-block))
- (python-tests-look-at "if profile.stats:")))
- (should (= (save-excursion (python-nav-forward-block))
- (python-tests-look-at "else:")))
- (should (= (save-excursion (python-nav-forward-block))
- (python-tests-look-at "finally:")))
- ;; When point is at the last block, leave it there and return nil
- (should (not (save-excursion (python-nav-forward-block))))
- ;; Move backwards, and even if the number of moves is less than the
- ;; provided argument return the point.
- (should (= (save-excursion (python-nav-forward-block -10))
- (python-tests-look-at
- "if request.user.is_authenticated():" -1)))))
-
-(ert-deftest python-nav-forward-sexp-1 ()
- (python-tests-with-temp-buffer
- "
-a()
-b()
-c()
-"
- (python-tests-look-at "a()")
- (python-nav-forward-sexp)
- (should (looking-at "$"))
- (should (save-excursion
- (beginning-of-line)
- (looking-at "a()")))
- (python-nav-forward-sexp)
- (should (looking-at "$"))
- (should (save-excursion
- (beginning-of-line)
- (looking-at "b()")))
- (python-nav-forward-sexp)
- (should (looking-at "$"))
- (should (save-excursion
- (beginning-of-line)
- (looking-at "c()")))
- ;; The default behavior when next to a paren should do what lisp
- ;; does and, otherwise `blink-matching-open' breaks.
- (python-nav-forward-sexp -1)
- (should (looking-at "()"))
- (should (save-excursion
- (beginning-of-line)
- (looking-at "c()")))
- (end-of-line)
- ;; Skipping parens should jump to `bolp'
- (python-nav-forward-sexp -1 nil t)
- (should (looking-at "c()"))
- (forward-line -1)
- (end-of-line)
- ;; b()
- (python-nav-forward-sexp -1)
- (should (looking-at "()"))
- (python-nav-forward-sexp -1)
- (should (looking-at "b()"))
- (end-of-line)
- (python-nav-forward-sexp -1 nil t)
- (should (looking-at "b()"))
- (forward-line -1)
- (end-of-line)
- ;; a()
- (python-nav-forward-sexp -1)
- (should (looking-at "()"))
- (python-nav-forward-sexp -1)
- (should (looking-at "a()"))
- (end-of-line)
- (python-nav-forward-sexp -1 nil t)
- (should (looking-at "a()"))))
-
-(ert-deftest python-nav-forward-sexp-2 ()
- (python-tests-with-temp-buffer
- "
-def func():
- if True:
- aaa = bbb
- ccc = ddd
- eee = fff
- return ggg
-"
- (python-tests-look-at "aa =")
- (python-nav-forward-sexp)
- (should (looking-at " = bbb"))
- (python-nav-forward-sexp)
- (should (looking-at "$"))
- (should (save-excursion
- (back-to-indentation)
- (looking-at "aaa = bbb")))
- (python-nav-forward-sexp)
- (should (looking-at "$"))
- (should (save-excursion
- (back-to-indentation)
- (looking-at "ccc = ddd")))
- (python-nav-forward-sexp)
- (should (looking-at "$"))
- (should (save-excursion
- (back-to-indentation)
- (looking-at "eee = fff")))
- (python-nav-forward-sexp)
- (should (looking-at "$"))
- (should (save-excursion
- (back-to-indentation)
- (looking-at "return ggg")))
- (python-nav-forward-sexp -1)
- (should (looking-at "def func():"))))
-
-(ert-deftest python-nav-forward-sexp-3 ()
- (python-tests-with-temp-buffer
- "
-from some_module import some_sub_module
-from another_module import another_sub_module
-
-def another_statement():
- pass
-"
- (python-tests-look-at "some_module")
- (python-nav-forward-sexp)
- (should (looking-at " import"))
- (python-nav-forward-sexp)
- (should (looking-at " some_sub_module"))
- (python-nav-forward-sexp)
- (should (looking-at "$"))
- (should
- (save-excursion
- (back-to-indentation)
- (looking-at
- "from some_module import some_sub_module")))
- (python-nav-forward-sexp)
- (should (looking-at "$"))
- (should
- (save-excursion
- (back-to-indentation)
- (looking-at
- "from another_module import another_sub_module")))
- (python-nav-forward-sexp)
- (should (looking-at "$"))
- (should
- (save-excursion
- (back-to-indentation)
- (looking-at
- "pass")))
- (python-nav-forward-sexp -1)
- (should (looking-at "def another_statement():"))
- (python-nav-forward-sexp -1)
- (should (looking-at "from another_module import another_sub_module"))
- (python-nav-forward-sexp -1)
- (should (looking-at "from some_module import some_sub_module"))))
-
-(ert-deftest python-nav-forward-sexp-safe-1 ()
- (python-tests-with-temp-buffer
- "
-profile = Profile.objects.create(user=request.user)
-profile.notify()
-"
- (python-tests-look-at "profile =")
- (python-nav-forward-sexp-safe 1)
- (should (looking-at "$"))
- (beginning-of-line 1)
- (python-tests-look-at "user=request.user")
- (python-nav-forward-sexp-safe -1)
- (should (looking-at "(user=request.user)"))
- (python-nav-forward-sexp-safe -4)
- (should (looking-at "profile ="))
- (python-tests-look-at "user=request.user")
- (python-nav-forward-sexp-safe 3)
- (should (looking-at ")"))
- (python-nav-forward-sexp-safe 1)
- (should (looking-at "$"))
- (python-nav-forward-sexp-safe 1)
- (should (looking-at "$"))))
-
-(ert-deftest python-nav-up-list-1 ()
- (python-tests-with-temp-buffer
- "
-def f():
- if True:
- return [i for i in range(3)]
-"
- (python-tests-look-at "3)]")
- (python-nav-up-list)
- (should (looking-at "]"))
- (python-nav-up-list)
- (should (looking-at "$"))))
-
-(ert-deftest python-nav-backward-up-list-1 ()
- :expected-result :failed
- (python-tests-with-temp-buffer
- "
-def f():
- if True:
- return [i for i in range(3)]
-"
- (python-tests-look-at "3)]")
- (python-nav-backward-up-list)
- (should (looking-at "(3)\\]"))
- (python-nav-backward-up-list)
- (should (looking-at
- "\\[i for i in range(3)\\]"))
- ;; FIXME: Need to move to beginning-of-statement.
- (python-nav-backward-up-list)
- (should (looking-at
- "return \\[i for i in range(3)\\]"))
- (python-nav-backward-up-list)
- (should (looking-at "if True:"))
- (python-nav-backward-up-list)
- (should (looking-at "def f():"))))
-
-(ert-deftest python-indent-dedent-line-backspace-1 ()
- "Check de-indentation on first call. Bug#18319."
- (python-tests-with-temp-buffer
- "
-if True:
- x ()
- if False:
-"
- (python-tests-look-at "if False:")
- (call-interactively #'python-indent-dedent-line-backspace)
- (should (zerop (current-indentation)))
- ;; XXX: This should be a call to `undo' but it's triggering errors.
- (insert " ")
- (should (= (current-indentation) 4))
- (call-interactively #'python-indent-dedent-line-backspace)
- (should (zerop (current-indentation)))))
-
-(ert-deftest python-indent-dedent-line-backspace-2 ()
- "Check de-indentation with tabs. Bug#19730."
- (let ((tab-width 8))
- (python-tests-with-temp-buffer
- "
-if x:
-\tabcdefg
-"
- (python-tests-look-at "abcdefg")
- (goto-char (line-end-position))
- (call-interactively #'python-indent-dedent-line-backspace)
- (should
- (string= (buffer-substring-no-properties
- (line-beginning-position) (line-end-position))
- "\tabcdef")))))
-
-(ert-deftest python-indent-dedent-line-backspace-3 ()
- "Paranoid check of de-indentation with tabs. Bug#19730."
- (let ((tab-width 8))
- (python-tests-with-temp-buffer
- "
-if x:
-\tif y:
-\t abcdefg
-"
- (python-tests-look-at "abcdefg")
- (goto-char (line-end-position))
- (call-interactively #'python-indent-dedent-line-backspace)
- (should
- (string= (buffer-substring-no-properties
- (line-beginning-position) (line-end-position))
- "\t abcdef"))
- (back-to-indentation)
- (call-interactively #'python-indent-dedent-line-backspace)
- (should
- (string= (buffer-substring-no-properties
- (line-beginning-position) (line-end-position))
- "\tabcdef"))
- (call-interactively #'python-indent-dedent-line-backspace)
- (should
- (string= (buffer-substring-no-properties
- (line-beginning-position) (line-end-position))
- " abcdef"))
- (call-interactively #'python-indent-dedent-line-backspace)
- (should
- (string= (buffer-substring-no-properties
- (line-beginning-position) (line-end-position))
- "abcdef")))))
-
-
-;;; Shell integration
-
-(defvar python-tests-shell-interpreter "python")
-
-(ert-deftest python-shell-get-process-name-1 ()
- "Check process name calculation sans `buffer-file-name'."
- (python-tests-with-temp-buffer
- ""
- (should (string= (python-shell-get-process-name nil)
- python-shell-buffer-name))
- (should (string= (python-shell-get-process-name t)
- (format "%s[%s]" python-shell-buffer-name (buffer-name))))))
-
-(ert-deftest python-shell-get-process-name-2 ()
- "Check process name calculation with `buffer-file-name'."
- (python-tests-with-temp-file
- ""
- ;; `buffer-file-name' is non-nil but the dedicated flag is nil and
- ;; should be respected.
- (should (string= (python-shell-get-process-name nil)
- python-shell-buffer-name))
- (should (string=
- (python-shell-get-process-name t)
- (format "%s[%s]" python-shell-buffer-name (buffer-name))))))
-
-(ert-deftest python-shell-internal-get-process-name-1 ()
- "Check the internal process name is buffer-unique sans `buffer-file-name'."
- (python-tests-with-temp-buffer
- ""
- (should (string= (python-shell-internal-get-process-name)
- (format "%s[%s]" python-shell-internal-buffer-name (buffer-name))))))
-
-(ert-deftest python-shell-internal-get-process-name-2 ()
- "Check the internal process name is buffer-unique with `buffer-file-name'."
- (python-tests-with-temp-file
- ""
- (should (string= (python-shell-internal-get-process-name)
- (format "%s[%s]" python-shell-internal-buffer-name (buffer-name))))))
-
-(ert-deftest python-shell-calculate-command-1 ()
- "Check the command to execute is calculated correctly.
-Using `python-shell-interpreter' and
-`python-shell-interpreter-args'."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (let ((python-shell-interpreter (executable-find
- python-tests-shell-interpreter))
- (python-shell-interpreter-args "-B"))
- (should (string=
- (format "%s %s"
- (shell-quote-argument python-shell-interpreter)
- python-shell-interpreter-args)
- (python-shell-calculate-command)))))
-
-(ert-deftest python-shell-calculate-pythonpath-1 ()
- "Test PYTHONPATH calculation."
- (let ((process-environment '("PYTHONPATH=/path0"))
- (python-shell-extra-pythonpaths '("/path1" "/path2")))
- (should (string= (python-shell-calculate-pythonpath)
- (concat "/path1" path-separator
- "/path2" path-separator "/path0")))))
-
-(ert-deftest python-shell-calculate-pythonpath-2 ()
- "Test existing paths are moved to front."
- (let ((process-environment
- (list (concat "PYTHONPATH=/path0" path-separator "/path1")))
- (python-shell-extra-pythonpaths '("/path1" "/path2")))
- (should (string= (python-shell-calculate-pythonpath)
- (concat "/path1" path-separator
- "/path2" path-separator "/path0")))))
-
-(ert-deftest python-shell-calculate-process-environment-1 ()
- "Test `python-shell-process-environment' modification."
- (let* ((python-shell-process-environment
- '("TESTVAR1=value1" "TESTVAR2=value2"))
- (process-environment (python-shell-calculate-process-environment)))
- (should (equal (getenv "TESTVAR1") "value1"))
- (should (equal (getenv "TESTVAR2") "value2"))))
-
-(ert-deftest python-shell-calculate-process-environment-2 ()
- "Test `python-shell-extra-pythonpaths' modification."
- (let* ((process-environment process-environment)
- (original-pythonpath (setenv "PYTHONPATH" "/path0"))
- (python-shell-extra-pythonpaths '("/path1" "/path2"))
- (process-environment (python-shell-calculate-process-environment)))
- (should (equal (getenv "PYTHONPATH")
- (concat "/path1" path-separator
- "/path2" path-separator "/path0")))))
-
-(ert-deftest python-shell-calculate-process-environment-3 ()
- "Test `python-shell-virtualenv-root' modification."
- (let* ((python-shell-virtualenv-root "/env")
- (process-environment
- (let (process-environment process-environment)
- (setenv "PYTHONHOME" "/home")
- (setenv "VIRTUAL_ENV")
- (python-shell-calculate-process-environment))))
- (should (not (getenv "PYTHONHOME")))
- (should (string= (getenv "VIRTUAL_ENV") "/env"))))
-
-(ert-deftest python-shell-calculate-process-environment-4 ()
- "Test PYTHONUNBUFFERED when `python-shell-unbuffered' is non-nil."
- (let* ((python-shell-unbuffered t)
- (process-environment
- (let ((process-environment process-environment))
- (setenv "PYTHONUNBUFFERED")
- (python-shell-calculate-process-environment))))
- (should (string= (getenv "PYTHONUNBUFFERED") "1"))))
-
-(ert-deftest python-shell-calculate-process-environment-5 ()
- "Test PYTHONUNBUFFERED when `python-shell-unbuffered' is nil."
- (let* ((python-shell-unbuffered nil)
- (process-environment
- (let ((process-environment process-environment))
- (setenv "PYTHONUNBUFFERED")
- (python-shell-calculate-process-environment))))
- (should (not (getenv "PYTHONUNBUFFERED")))))
-
-(ert-deftest python-shell-calculate-process-environment-6 ()
- "Test PYTHONUNBUFFERED=1 when `python-shell-unbuffered' is nil."
- (let* ((python-shell-unbuffered nil)
- (process-environment
- (let ((process-environment process-environment))
- (setenv "PYTHONUNBUFFERED" "1")
- (python-shell-calculate-process-environment))))
- ;; User default settings must remain untouched:
- (should (string= (getenv "PYTHONUNBUFFERED") "1"))))
-
-(ert-deftest python-shell-calculate-process-environment-7 ()
- "Test no side-effects on `process-environment'."
- (let* ((python-shell-process-environment
- '("TESTVAR1=value1" "TESTVAR2=value2"))
- (python-shell-virtualenv-root "/env")
- (python-shell-unbuffered t)
- (python-shell-extra-pythonpaths'("/path1" "/path2"))
- (original-process-environment (copy-sequence process-environment)))
- (python-shell-calculate-process-environment)
- (should (equal process-environment original-process-environment))))
-
-(ert-deftest python-shell-calculate-process-environment-8 ()
- "Test no side-effects on `tramp-remote-process-environment'."
- (let* ((default-directory "/ssh::/example/dir/")
- (python-shell-process-environment
- '("TESTVAR1=value1" "TESTVAR2=value2"))
- (python-shell-virtualenv-root "/env")
- (python-shell-unbuffered t)
- (python-shell-extra-pythonpaths'("/path1" "/path2"))
- (original-process-environment
- (copy-sequence tramp-remote-process-environment)))
- (python-shell-calculate-process-environment)
- (should (equal tramp-remote-process-environment original-process-environment))))
-
-(ert-deftest python-shell-calculate-exec-path-1 ()
- "Test `python-shell-exec-path' modification."
- (let* ((exec-path '("/path0"))
- (python-shell-exec-path '("/path1" "/path2"))
- (new-exec-path (python-shell-calculate-exec-path)))
- (should (equal new-exec-path '("/path1" "/path2" "/path0")))))
-
-(ert-deftest python-shell-calculate-exec-path-2 ()
- "Test `python-shell-virtualenv-root' modification."
- (let* ((exec-path '("/path0"))
- (python-shell-virtualenv-root "/env")
- (new-exec-path (python-shell-calculate-exec-path)))
- (should (equal new-exec-path
- (list (expand-file-name "/env/bin") "/path0")))))
-
-(ert-deftest python-shell-calculate-exec-path-3 ()
- "Test complete `python-shell-virtualenv-root' modification."
- (let* ((exec-path '("/path0"))
- (python-shell-exec-path '("/path1" "/path2"))
- (python-shell-virtualenv-root "/env")
- (new-exec-path (python-shell-calculate-exec-path)))
- (should (equal new-exec-path
- (list (expand-file-name "/env/bin")
- "/path1" "/path2" "/path0")))))
-
-(ert-deftest python-shell-calculate-exec-path-4 ()
- "Test complete `python-shell-virtualenv-root' with remote."
- (let* ((default-directory "/ssh::/example/dir/")
- (python-shell-remote-exec-path '("/path0"))
- (python-shell-exec-path '("/path1" "/path2"))
- (python-shell-virtualenv-root "/env")
- (new-exec-path (python-shell-calculate-exec-path)))
- (should (equal new-exec-path
- (list (expand-file-name "/env/bin")
- "/path1" "/path2" "/path0")))))
-
-(ert-deftest python-shell-calculate-exec-path-5 ()
- "Test no side-effects on `exec-path'."
- (let* ((exec-path '("/path0"))
- (python-shell-exec-path '("/path1" "/path2"))
- (python-shell-virtualenv-root "/env")
- (original-exec-path (copy-sequence exec-path)))
- (python-shell-calculate-exec-path)
- (should (equal exec-path original-exec-path))))
-
-(ert-deftest python-shell-calculate-exec-path-6 ()
- "Test no side-effects on `python-shell-remote-exec-path'."
- (let* ((default-directory "/ssh::/example/dir/")
- (python-shell-remote-exec-path '("/path0"))
- (python-shell-exec-path '("/path1" "/path2"))
- (python-shell-virtualenv-root "/env")
- (original-exec-path (copy-sequence python-shell-remote-exec-path)))
- (python-shell-calculate-exec-path)
- (should (equal python-shell-remote-exec-path original-exec-path))))
-
-(ert-deftest python-shell-with-environment-1 ()
- "Test environment with local `default-directory'."
- (let* ((exec-path '("/path0"))
- (python-shell-exec-path '("/path1" "/path2"))
- (original-exec-path exec-path)
- (python-shell-virtualenv-root "/env"))
- (python-shell-with-environment
- (should (equal exec-path
- (list (expand-file-name "/env/bin")
- "/path1" "/path2" "/path0")))
- (should (not (getenv "PYTHONHOME")))
- (should (string= (getenv "VIRTUAL_ENV") "/env")))
- (should (equal exec-path original-exec-path))))
-
-(ert-deftest python-shell-with-environment-2 ()
- "Test environment with remote `default-directory'."
- (let* ((default-directory "/ssh::/example/dir/")
- (python-shell-remote-exec-path '("/remote1" "/remote2"))
- (python-shell-exec-path '("/path1" "/path2"))
- (tramp-remote-process-environment '("EMACS=t"))
- (original-process-environment (copy-sequence tramp-remote-process-environment))
- (python-shell-virtualenv-root "/env"))
- (python-shell-with-environment
- (should (equal (python-shell-calculate-exec-path)
- (list (expand-file-name "/env/bin")
- "/path1" "/path2" "/remote1" "/remote2")))
- (let ((process-environment (python-shell-calculate-process-environment)))
- (should (not (getenv "PYTHONHOME")))
- (should (string= (getenv "VIRTUAL_ENV") "/env"))
- (should (equal tramp-remote-process-environment process-environment))))
- (should (equal tramp-remote-process-environment original-process-environment))))
-
-(ert-deftest python-shell-with-environment-3 ()
- "Test `python-shell-with-environment' is idempotent."
- (let* ((python-shell-extra-pythonpaths '("/example/dir/"))
- (python-shell-exec-path '("path1" "path2"))
- (python-shell-virtualenv-root "/home/user/env")
- (single-call
- (python-shell-with-environment
- (list exec-path process-environment)))
- (nested-call
- (python-shell-with-environment
- (python-shell-with-environment
- (list exec-path process-environment)))))
- (should (equal single-call nested-call))))
-
-(ert-deftest python-shell-make-comint-1 ()
- "Check comint creation for global shell buffer."
- (skip-unless (executable-find python-tests-shell-interpreter))
- ;; The interpreter can get killed too quickly to allow it to clean
- ;; up the tempfiles that the default python-shell-setup-codes create,
- ;; so it leaves tempfiles behind, which is a minor irritation.
- (let* ((python-shell-setup-codes nil)
- (python-shell-interpreter
- (executable-find python-tests-shell-interpreter))
- (proc-name (python-shell-get-process-name nil))
- (shell-buffer
- (python-tests-with-temp-buffer
- "" (python-shell-make-comint
- (python-shell-calculate-command) proc-name)))
- (process (get-buffer-process shell-buffer)))
- (unwind-protect
- (progn
- (set-process-query-on-exit-flag process nil)
- (should (process-live-p process))
- (with-current-buffer shell-buffer
- (should (eq major-mode 'inferior-python-mode))
- (should (string= (buffer-name) (format "*%s*" proc-name)))))
- (kill-buffer shell-buffer))))
-
-(ert-deftest python-shell-make-comint-2 ()
- "Check comint creation for internal shell buffer."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (let* ((python-shell-setup-codes nil)
- (python-shell-interpreter
- (executable-find python-tests-shell-interpreter))
- (proc-name (python-shell-internal-get-process-name))
- (shell-buffer
- (python-tests-with-temp-buffer
- "" (python-shell-make-comint
- (python-shell-calculate-command) proc-name nil t)))
- (process (get-buffer-process shell-buffer)))
- (unwind-protect
- (progn
- (set-process-query-on-exit-flag process nil)
- (should (process-live-p process))
- (with-current-buffer shell-buffer
- (should (eq major-mode 'inferior-python-mode))
- (should (string= (buffer-name) (format " *%s*" proc-name)))))
- (kill-buffer shell-buffer))))
-
-(ert-deftest python-shell-make-comint-3 ()
- "Check comint creation with overridden python interpreter and args.
-The command passed to `python-shell-make-comint' as argument must
-locally override global values set in `python-shell-interpreter'
-and `python-shell-interpreter-args' in the new shell buffer."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (let* ((python-shell-setup-codes nil)
- (python-shell-interpreter "interpreter")
- (python-shell-interpreter-args "--some-args")
- (proc-name (python-shell-get-process-name nil))
- (interpreter-override
- (concat (executable-find python-tests-shell-interpreter) " " "-i"))
- (shell-buffer
- (python-tests-with-temp-buffer
- "" (python-shell-make-comint interpreter-override proc-name nil)))
- (process (get-buffer-process shell-buffer)))
- (unwind-protect
- (progn
- (set-process-query-on-exit-flag process nil)
- (should (process-live-p process))
- (with-current-buffer shell-buffer
- (should (eq major-mode 'inferior-python-mode))
- (should (file-equal-p
- python-shell-interpreter
- (executable-find python-tests-shell-interpreter)))
- (should (string= python-shell-interpreter-args "-i"))))
- (kill-buffer shell-buffer))))
-
-(ert-deftest python-shell-make-comint-4 ()
- "Check shell calculated prompts regexps are set."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (let* ((process-environment process-environment)
- (python-shell-setup-codes nil)
- (python-shell-interpreter
- (executable-find python-tests-shell-interpreter))
- (python-shell-interpreter-args "-i")
- (python-shell--prompt-calculated-input-regexp nil)
- (python-shell--prompt-calculated-output-regexp nil)
- (python-shell-prompt-detect-enabled t)
- (python-shell-prompt-input-regexps '("extralargeinputprompt" "sml"))
- (python-shell-prompt-output-regexps '("extralargeoutputprompt" "sml"))
- (python-shell-prompt-regexp "in")
- (python-shell-prompt-block-regexp "block")
- (python-shell-prompt-pdb-regexp "pdf")
- (python-shell-prompt-output-regexp "output")
- (startup-code (concat "import sys\n"
- "sys.ps1 = 'py> '\n"
- "sys.ps2 = '..> '\n"
- "sys.ps3 = 'out '\n"))
- (startup-file (python-shell--save-temp-file startup-code))
- (proc-name (python-shell-get-process-name nil))
- (shell-buffer
- (progn
- (setenv "PYTHONSTARTUP" startup-file)
- (python-tests-with-temp-buffer
- "" (python-shell-make-comint
- (python-shell-calculate-command) proc-name nil))))
- (process (get-buffer-process shell-buffer)))
- (unwind-protect
- (progn
- (set-process-query-on-exit-flag process nil)
- (should (process-live-p process))
- (with-current-buffer shell-buffer
- (should (eq major-mode 'inferior-python-mode))
- (should (string=
- python-shell--prompt-calculated-input-regexp
- (concat "^\\(extralargeinputprompt\\|\\.\\.> \\|"
- "block\\|py> \\|pdf\\|sml\\|in\\)")))
- (should (string=
- python-shell--prompt-calculated-output-regexp
- "^\\(extralargeoutputprompt\\|output\\|out \\|sml\\)"))))
- (delete-file startup-file)
- (kill-buffer shell-buffer))))
-
-(ert-deftest python-shell-get-process-1 ()
- "Check dedicated shell process preference over global."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (python-tests-with-temp-file
- ""
- (let* ((python-shell-setup-codes nil)
- (python-shell-interpreter
- (executable-find python-tests-shell-interpreter))
- (global-proc-name (python-shell-get-process-name nil))
- (dedicated-proc-name (python-shell-get-process-name t))
- (global-shell-buffer
- (python-shell-make-comint
- (python-shell-calculate-command) global-proc-name))
- (dedicated-shell-buffer
- (python-shell-make-comint
- (python-shell-calculate-command) dedicated-proc-name))
- (global-process (get-buffer-process global-shell-buffer))
- (dedicated-process (get-buffer-process dedicated-shell-buffer)))
- (unwind-protect
- (progn
- (set-process-query-on-exit-flag global-process nil)
- (set-process-query-on-exit-flag dedicated-process nil)
- ;; Prefer dedicated if global also exists.
- (should (equal (python-shell-get-process) dedicated-process))
- (kill-buffer dedicated-shell-buffer)
- ;; If there's only global, use it.
- (should (equal (python-shell-get-process) global-process))
- (kill-buffer global-shell-buffer)
- ;; No buffer available.
- (should (not (python-shell-get-process))))
- (ignore-errors (kill-buffer global-shell-buffer))
- (ignore-errors (kill-buffer dedicated-shell-buffer))))))
-
-(ert-deftest python-shell-internal-get-or-create-process-1 ()
- "Check internal shell process creation fallback."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (python-tests-with-temp-file
- ""
- (should (not (process-live-p (python-shell-internal-get-process-name))))
- (let* ((python-shell-interpreter
- (executable-find python-tests-shell-interpreter))
- (internal-process-name (python-shell-internal-get-process-name))
- (internal-process (python-shell-internal-get-or-create-process))
- (internal-shell-buffer (process-buffer internal-process)))
- (unwind-protect
- (progn
- (set-process-query-on-exit-flag internal-process nil)
- (should (equal (process-name internal-process)
- internal-process-name))
- (should (equal internal-process
- (python-shell-internal-get-or-create-process)))
- ;; Assert the internal process is not a user process
- (should (not (python-shell-get-process)))
- (kill-buffer internal-shell-buffer))
- (ignore-errors (kill-buffer internal-shell-buffer))))))
-
-(ert-deftest python-shell-prompt-detect-1 ()
- "Check prompt autodetection."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (let ((process-environment process-environment))
- ;; Ensure no startup file is enabled
- (setenv "PYTHONSTARTUP" "")
- (should python-shell-prompt-detect-enabled)
- (should (equal (python-shell-prompt-detect) '(">>> " "... " "")))))
-
-(ert-deftest python-shell-prompt-detect-2 ()
- "Check prompt autodetection with startup file. Bug#17370."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (let* ((process-environment process-environment)
- (startup-code (concat "import sys\n"
- "sys.ps1 = 'py> '\n"
- "sys.ps2 = '..> '\n"
- "sys.ps3 = 'out '\n"))
- (startup-file (python-shell--save-temp-file startup-code)))
- (unwind-protect
- (progn
- ;; Ensure startup file is enabled
- (setenv "PYTHONSTARTUP" startup-file)
- (should python-shell-prompt-detect-enabled)
- (should (equal (python-shell-prompt-detect) '("py> " "..> " "out "))))
- (ignore-errors (delete-file startup-file)))))
-
-(ert-deftest python-shell-prompt-detect-3 ()
- "Check prompts are not autodetected when feature is disabled."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (let ((process-environment process-environment)
- (python-shell-prompt-detect-enabled nil))
- ;; Ensure no startup file is enabled
- (should (not python-shell-prompt-detect-enabled))
- (should (not (python-shell-prompt-detect)))))
-
-(ert-deftest python-shell-prompt-detect-4 ()
- "Check warning is shown when detection fails."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (let* ((process-environment process-environment)
- ;; Trigger failure by removing prompts in the startup file
- (startup-code (concat "import sys\n"
- "sys.ps1 = ''\n"
- "sys.ps2 = ''\n"
- "sys.ps3 = ''\n"))
- (startup-file (python-shell--save-temp-file startup-code)))
- (unwind-protect
- (progn
- (kill-buffer (get-buffer-create "*Warnings*"))
- (should (not (get-buffer "*Warnings*")))
- (setenv "PYTHONSTARTUP" startup-file)
- (should python-shell-prompt-detect-failure-warning)
- (should python-shell-prompt-detect-enabled)
- (should (not (python-shell-prompt-detect)))
- (should (get-buffer "*Warnings*")))
- (ignore-errors (delete-file startup-file)))))
-
-(ert-deftest python-shell-prompt-detect-5 ()
- "Check disabled warnings are not shown when detection fails."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (let* ((process-environment process-environment)
- (startup-code (concat "import sys\n"
- "sys.ps1 = ''\n"
- "sys.ps2 = ''\n"
- "sys.ps3 = ''\n"))
- (startup-file (python-shell--save-temp-file startup-code))
- (python-shell-prompt-detect-failure-warning nil))
- (unwind-protect
- (progn
- (kill-buffer (get-buffer-create "*Warnings*"))
- (should (not (get-buffer "*Warnings*")))
- (setenv "PYTHONSTARTUP" startup-file)
- (should (not python-shell-prompt-detect-failure-warning))
- (should python-shell-prompt-detect-enabled)
- (should (not (python-shell-prompt-detect)))
- (should (not (get-buffer "*Warnings*"))))
- (ignore-errors (delete-file startup-file)))))
-
-(ert-deftest python-shell-prompt-detect-6 ()
- "Warnings are not shown when detection is disabled."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (let* ((process-environment process-environment)
- (startup-code (concat "import sys\n"
- "sys.ps1 = ''\n"
- "sys.ps2 = ''\n"
- "sys.ps3 = ''\n"))
- (startup-file (python-shell--save-temp-file startup-code))
- (python-shell-prompt-detect-failure-warning t)
- (python-shell-prompt-detect-enabled nil))
- (unwind-protect
- (progn
- (kill-buffer (get-buffer-create "*Warnings*"))
- (should (not (get-buffer "*Warnings*")))
- (setenv "PYTHONSTARTUP" startup-file)
- (should python-shell-prompt-detect-failure-warning)
- (should (not python-shell-prompt-detect-enabled))
- (should (not (python-shell-prompt-detect)))
- (should (not (get-buffer "*Warnings*"))))
- (ignore-errors (delete-file startup-file)))))
-
-(ert-deftest python-shell-prompt-validate-regexps-1 ()
- "Check `python-shell-prompt-input-regexps' are validated."
- (let* ((python-shell-prompt-input-regexps '("\\("))
- (error-data (should-error (python-shell-prompt-validate-regexps)
- :type 'user-error)))
- (should
- (string= (cadr error-data)
- (format-message
- "Invalid regexp \\( in `python-shell-prompt-input-regexps'")))))
-
-(ert-deftest python-shell-prompt-validate-regexps-2 ()
- "Check `python-shell-prompt-output-regexps' are validated."
- (let* ((python-shell-prompt-output-regexps '("\\("))
- (error-data (should-error (python-shell-prompt-validate-regexps)
- :type 'user-error)))
- (should
- (string= (cadr error-data)
- (format-message
- "Invalid regexp \\( in `python-shell-prompt-output-regexps'")))))
-
-(ert-deftest python-shell-prompt-validate-regexps-3 ()
- "Check `python-shell-prompt-regexp' is validated."
- (let* ((python-shell-prompt-regexp "\\(")
- (error-data (should-error (python-shell-prompt-validate-regexps)
- :type 'user-error)))
- (should
- (string= (cadr error-data)
- (format-message
- "Invalid regexp \\( in `python-shell-prompt-regexp'")))))
-
-(ert-deftest python-shell-prompt-validate-regexps-4 ()
- "Check `python-shell-prompt-block-regexp' is validated."
- (let* ((python-shell-prompt-block-regexp "\\(")
- (error-data (should-error (python-shell-prompt-validate-regexps)
- :type 'user-error)))
- (should
- (string= (cadr error-data)
- (format-message
- "Invalid regexp \\( in `python-shell-prompt-block-regexp'")))))
-
-(ert-deftest python-shell-prompt-validate-regexps-5 ()
- "Check `python-shell-prompt-pdb-regexp' is validated."
- (let* ((python-shell-prompt-pdb-regexp "\\(")
- (error-data (should-error (python-shell-prompt-validate-regexps)
- :type 'user-error)))
- (should
- (string= (cadr error-data)
- (format-message
- "Invalid regexp \\( in `python-shell-prompt-pdb-regexp'")))))
-
-(ert-deftest python-shell-prompt-validate-regexps-6 ()
- "Check `python-shell-prompt-output-regexp' is validated."
- (let* ((python-shell-prompt-output-regexp "\\(")
- (error-data (should-error (python-shell-prompt-validate-regexps)
- :type 'user-error)))
- (should
- (string= (cadr error-data)
- (format-message
- "Invalid regexp \\( in `python-shell-prompt-output-regexp'")))))
-
-(ert-deftest python-shell-prompt-validate-regexps-7 ()
- "Check default regexps are valid."
- ;; should not signal error
- (python-shell-prompt-validate-regexps))
-
-(ert-deftest python-shell-prompt-set-calculated-regexps-1 ()
- "Check regexps are validated."
- (let* ((python-shell-prompt-output-regexp '("\\("))
- (python-shell--prompt-calculated-input-regexp nil)
- (python-shell--prompt-calculated-output-regexp nil)
- (python-shell-prompt-detect-enabled nil)
- (error-data (should-error (python-shell-prompt-set-calculated-regexps)
- :type 'user-error)))
- (should
- (string= (cadr error-data)
- (format-message
- "Invalid regexp \\( in `python-shell-prompt-output-regexp'")))))
-
-(ert-deftest python-shell-prompt-set-calculated-regexps-2 ()
- "Check `python-shell-prompt-input-regexps' are set."
- (let* ((python-shell-prompt-input-regexps '("my" "prompt"))
- (python-shell-prompt-output-regexps '(""))
- (python-shell-prompt-regexp "")
- (python-shell-prompt-block-regexp "")
- (python-shell-prompt-pdb-regexp "")
- (python-shell-prompt-output-regexp "")
- (python-shell--prompt-calculated-input-regexp nil)
- (python-shell--prompt-calculated-output-regexp nil)
- (python-shell-prompt-detect-enabled nil))
- (python-shell-prompt-set-calculated-regexps)
- (should (string= python-shell--prompt-calculated-input-regexp
- "^\\(prompt\\|my\\|\\)"))))
-
-(ert-deftest python-shell-prompt-set-calculated-regexps-3 ()
- "Check `python-shell-prompt-output-regexps' are set."
- (let* ((python-shell-prompt-input-regexps '(""))
- (python-shell-prompt-output-regexps '("my" "prompt"))
- (python-shell-prompt-regexp "")
- (python-shell-prompt-block-regexp "")
- (python-shell-prompt-pdb-regexp "")
- (python-shell-prompt-output-regexp "")
- (python-shell--prompt-calculated-input-regexp nil)
- (python-shell--prompt-calculated-output-regexp nil)
- (python-shell-prompt-detect-enabled nil))
- (python-shell-prompt-set-calculated-regexps)
- (should (string= python-shell--prompt-calculated-output-regexp
- "^\\(prompt\\|my\\|\\)"))))
-
-(ert-deftest python-shell-prompt-set-calculated-regexps-4 ()
- "Check user defined prompts are set."
- (let* ((python-shell-prompt-input-regexps '(""))
- (python-shell-prompt-output-regexps '(""))
- (python-shell-prompt-regexp "prompt")
- (python-shell-prompt-block-regexp "block")
- (python-shell-prompt-pdb-regexp "pdb")
- (python-shell-prompt-output-regexp "output")
- (python-shell--prompt-calculated-input-regexp nil)
- (python-shell--prompt-calculated-output-regexp nil)
- (python-shell-prompt-detect-enabled nil))
- (python-shell-prompt-set-calculated-regexps)
- (should (string= python-shell--prompt-calculated-input-regexp
- "^\\(prompt\\|block\\|pdb\\|\\)"))
- (should (string= python-shell--prompt-calculated-output-regexp
- "^\\(output\\|\\)"))))
-
-(ert-deftest python-shell-prompt-set-calculated-regexps-5 ()
- "Check order of regexps (larger first)."
- (let* ((python-shell-prompt-input-regexps '("extralargeinputprompt" "sml"))
- (python-shell-prompt-output-regexps '("extralargeoutputprompt" "sml"))
- (python-shell-prompt-regexp "in")
- (python-shell-prompt-block-regexp "block")
- (python-shell-prompt-pdb-regexp "pdf")
- (python-shell-prompt-output-regexp "output")
- (python-shell--prompt-calculated-input-regexp nil)
- (python-shell--prompt-calculated-output-regexp nil)
- (python-shell-prompt-detect-enabled nil))
- (python-shell-prompt-set-calculated-regexps)
- (should (string= python-shell--prompt-calculated-input-regexp
- "^\\(extralargeinputprompt\\|block\\|pdf\\|sml\\|in\\)"))
- (should (string= python-shell--prompt-calculated-output-regexp
- "^\\(extralargeoutputprompt\\|output\\|sml\\)"))))
-
-(ert-deftest python-shell-prompt-set-calculated-regexps-6 ()
- "Check detected prompts are included `regexp-quote'd."
- (skip-unless (executable-find python-tests-shell-interpreter))
- (let* ((python-shell-prompt-input-regexps '(""))
- (python-shell-prompt-output-regexps '(""))
- (python-shell-prompt-regexp "")
- (python-shell-prompt-block-regexp "")
- (python-shell-prompt-pdb-regexp "")
- (python-shell-prompt-output-regexp "")
- (python-shell--prompt-calculated-input-regexp nil)
- (python-shell--prompt-calculated-output-regexp nil)
- (python-shell-prompt-detect-enabled t)
- (process-environment process-environment)
- (startup-code (concat "import sys\n"
- "sys.ps1 = 'p.> '\n"
- "sys.ps2 = '..> '\n"
- "sys.ps3 = 'o.t '\n"))
- (startup-file (python-shell--save-temp-file startup-code)))
- (unwind-protect
- (progn
- (setenv "PYTHONSTARTUP" startup-file)
- (python-shell-prompt-set-calculated-regexps)
- (should (string= python-shell--prompt-calculated-input-regexp
- "^\\(\\.\\.> \\|p\\.> \\|\\)"))
- (should (string= python-shell--prompt-calculated-output-regexp
- "^\\(o\\.t \\|\\)")))
- (ignore-errors (delete-file startup-file)))))
-
-(ert-deftest python-shell-buffer-substring-1 ()
- "Selecting a substring of the whole buffer must match its contents."
- (python-tests-with-temp-buffer
- "
-class Foo(models.Model):
- pass
-
-
-class Bar(models.Model):
- pass
-"
- (should (string= (buffer-string)
- (python-shell-buffer-substring (point-min) (point-max))))))
-
-(ert-deftest python-shell-buffer-substring-2 ()
- "Main block should be removed if NOMAIN is non-nil."
- (python-tests-with-temp-buffer
- "
-class Foo(models.Model):
- pass
-
-class Bar(models.Model):
- pass
-
-if __name__ == \"__main__\":
- foo = Foo()
- print (foo)
-"
- (should (string= (python-shell-buffer-substring (point-min) (point-max) t)
- "
-class Foo(models.Model):
- pass
-
-class Bar(models.Model):
- pass
-
-
-
-
-"))))
-
-(ert-deftest python-shell-buffer-substring-3 ()
- "Main block should be removed if NOMAIN is non-nil."
- (python-tests-with-temp-buffer
- "
-class Foo(models.Model):
- pass
-
-if __name__ == \"__main__\":
- foo = Foo()
- print (foo)
-
-class Bar(models.Model):
- pass
-"
- (should (string= (python-shell-buffer-substring (point-min) (point-max) t)
- "
-class Foo(models.Model):
- pass
-
-
-
-
-
-class Bar(models.Model):
- pass
-"))))
-
-(ert-deftest python-shell-buffer-substring-4 ()
- "Coding cookie should be added for substrings."
- (python-tests-with-temp-buffer
- "# coding: latin-1
-
-class Foo(models.Model):
- pass
-
-if __name__ == \"__main__\":
- foo = Foo()
- print (foo)
-
-class Bar(models.Model):
- pass
-"
- (should (string= (python-shell-buffer-substring
- (python-tests-look-at "class Foo(models.Model):")
- (progn (python-nav-forward-sexp) (point)))
- "# -*- coding: latin-1 -*-
-
-class Foo(models.Model):
- pass"))))
-
-(ert-deftest python-shell-buffer-substring-5 ()
- "The proper amount of blank lines is added for a substring."
- (python-tests-with-temp-buffer
- "# coding: latin-1
-
-class Foo(models.Model):
- pass
-
-if __name__ == \"__main__\":
- foo = Foo()
- print (foo)
-
-class Bar(models.Model):
- pass
-"
- (should (string= (python-shell-buffer-substring
- (python-tests-look-at "class Bar(models.Model):")
- (progn (python-nav-forward-sexp) (point)))
- "# -*- coding: latin-1 -*-
-
-
-
-
-
-
-
-
-class Bar(models.Model):
- pass"))))
-
-(ert-deftest python-shell-buffer-substring-6 ()
- "Handle substring with coding cookie in the second line."
- (python-tests-with-temp-buffer
- "
-# coding: latin-1
-
-class Foo(models.Model):
- pass
-
-if __name__ == \"__main__\":
- foo = Foo()
- print (foo)
-
-class Bar(models.Model):
- pass
-"
- (should (string= (python-shell-buffer-substring
- (python-tests-look-at "# coding: latin-1")
- (python-tests-look-at "if __name__ == \"__main__\":"))
- "# -*- coding: latin-1 -*-
-
-
-class Foo(models.Model):
- pass
-
-"))))
-
-(ert-deftest python-shell-buffer-substring-7 ()
- "Ensure first coding cookie gets precedence."
- (python-tests-with-temp-buffer
- "# coding: utf-8
-# coding: latin-1
-
-class Foo(models.Model):
- pass
-
-if __name__ == \"__main__\":
- foo = Foo()
- print (foo)
-
-class Bar(models.Model):
- pass
-"
- (should (string= (python-shell-buffer-substring
- (python-tests-look-at "# coding: latin-1")
- (python-tests-look-at "if __name__ == \"__main__\":"))
- "# -*- coding: utf-8 -*-
-
-
-class Foo(models.Model):
- pass
-
-"))))
-
-(ert-deftest python-shell-buffer-substring-8 ()
- "Ensure first coding cookie gets precedence when sending whole buffer."
- (python-tests-with-temp-buffer
- "# coding: utf-8
-# coding: latin-1
-
-class Foo(models.Model):
- pass
-"
- (should (string= (python-shell-buffer-substring (point-min) (point-max))
- "# coding: utf-8
-
-
-class Foo(models.Model):
- pass
-"))))
-
-(ert-deftest python-shell-buffer-substring-9 ()
- "Check substring starting from `point-min'."
- (python-tests-with-temp-buffer
- "# coding: utf-8
-
-class Foo(models.Model):
- pass
-
-class Bar(models.Model):
- pass
-"
- (should (string= (python-shell-buffer-substring
- (point-min)
- (python-tests-look-at "class Bar(models.Model):"))
- "# coding: utf-8
-
-class Foo(models.Model):
- pass
-
-"))))
-
-(ert-deftest python-shell-buffer-substring-10 ()
- "Check substring from partial block."
- (python-tests-with-temp-buffer
- "
-def foo():
- print ('a')
-"
- (should (string= (python-shell-buffer-substring
- (python-tests-look-at "print ('a')")
- (point-max))
- "if True:
-
- print ('a')
-"))))
-
-(ert-deftest python-shell-buffer-substring-11 ()
- "Check substring from partial block and point within indentation."
- (python-tests-with-temp-buffer
- "
-def foo():
- print ('a')
-"
- (should (string= (python-shell-buffer-substring
- (progn
- (python-tests-look-at "print ('a')")
- (backward-char 1)
- (point))
- (point-max))
- "if True:
-
- print ('a')
-"))))
-
-(ert-deftest python-shell-buffer-substring-12 ()
- "Check substring from partial block and point in whitespace."
- (python-tests-with-temp-buffer
- "
-def foo():
-
- # Whitespace
-
- print ('a')
-"
- (should (string= (python-shell-buffer-substring
- (python-tests-look-at "# Whitespace")
- (point-max))
- "if True:
-
-
- # Whitespace
-
- print ('a')
-"))))
-
-
-
-;;; Shell completion
-
-(ert-deftest python-shell-completion-native-interpreter-disabled-p-1 ()
- (let* ((python-shell-completion-native-disabled-interpreters (list "pypy"))
- (python-shell-interpreter "/some/path/to/bin/pypy"))
- (should (python-shell-completion-native-interpreter-disabled-p))))
-
-
-
-
-;;; PDB Track integration
-
-
-;;; Symbol completion
-
-
-;;; Fill paragraph
-
-
-;;; Skeletons
-
-
-;;; FFAP
-
-
-;;; Code check
-
-
-;;; Eldoc
-
-(ert-deftest python-eldoc--get-symbol-at-point-1 ()
- "Test paren handling."
- (python-tests-with-temp-buffer
- "
-map(xx
-map(codecs.open('somefile'
-"
- (python-tests-look-at "ap(xx")
- (should (string= (python-eldoc--get-symbol-at-point) "map"))
- (goto-char (line-end-position))
- (should (string= (python-eldoc--get-symbol-at-point) "map"))
- (python-tests-look-at "('somefile'")
- (should (string= (python-eldoc--get-symbol-at-point) "map"))
- (goto-char (line-end-position))
- (should (string= (python-eldoc--get-symbol-at-point) "codecs.open"))))
-
-(ert-deftest python-eldoc--get-symbol-at-point-2 ()
- "Ensure self is replaced with the class name."
- (python-tests-with-temp-buffer
- "
-class TheClass:
-
- def some_method(self, n):
- return n
-
- def other(self):
- return self.some_method(1234)
-
-"
- (python-tests-look-at "self.some_method")
- (should (string= (python-eldoc--get-symbol-at-point)
- "TheClass.some_method"))
- (python-tests-look-at "1234)")
- (should (string= (python-eldoc--get-symbol-at-point)
- "TheClass.some_method"))))
-
-(ert-deftest python-eldoc--get-symbol-at-point-3 ()
- "Ensure symbol is found when point is at end of buffer."
- (python-tests-with-temp-buffer
- "
-some_symbol
-
-"
- (goto-char (point-max))
- (should (string= (python-eldoc--get-symbol-at-point)
- "some_symbol"))))
-
-(ert-deftest python-eldoc--get-symbol-at-point-4 ()
- "Ensure symbol is found when point is at whitespace."
- (python-tests-with-temp-buffer
- "
-some_symbol some_other_symbol
-"
- (python-tests-look-at " some_other_symbol")
- (should (string= (python-eldoc--get-symbol-at-point)
- "some_symbol"))))
-
-
-;;; Imenu
-
-(ert-deftest python-imenu-create-index-1 ()
- (python-tests-with-temp-buffer
- "
-class Foo(models.Model):
- pass
-
-
-class Bar(models.Model):
- pass
-
-
-def decorator(arg1, arg2, arg3):
- '''print decorated function call data to stdout.
-
- Usage:
-
- @decorator('arg1', 'arg2')
- def func(a, b, c=True):
- pass
- '''
-
- def wrap(f):
- print ('wrap')
- def wrapped_f(*args):
- print ('wrapped_f')
- print ('Decorator arguments:', arg1, arg2, arg3)
- f(*args)
- print ('called f(*args)')
- return wrapped_f
- return wrap
-
-
-class Baz(object):
-
- def a(self):
- pass
-
- def b(self):
- pass
-
- class Frob(object):
-
- def c(self):
- pass
-"
- (goto-char (point-max))
- (should (equal
- (list
- (cons "Foo (class)" (copy-marker 2))
- (cons "Bar (class)" (copy-marker 38))
- (list
- "decorator (def)"
- (cons "*function definition*" (copy-marker 74))
- (list
- "wrap (def)"
- (cons "*function definition*" (copy-marker 254))
- (cons "wrapped_f (def)" (copy-marker 294))))
- (list
- "Baz (class)"
- (cons "*class definition*" (copy-marker 519))
- (cons "a (def)" (copy-marker 539))
- (cons "b (def)" (copy-marker 570))
- (list
- "Frob (class)"
- (cons "*class definition*" (copy-marker 601))
- (cons "c (def)" (copy-marker 626)))))
- (python-imenu-create-index)))))
-
-(ert-deftest python-imenu-create-index-2 ()
- (python-tests-with-temp-buffer
- "
-class Foo(object):
- def foo(self):
- def foo1():
- pass
-
- def foobar(self):
- pass
-"
- (goto-char (point-max))
- (should (equal
- (list
- (list
- "Foo (class)"
- (cons "*class definition*" (copy-marker 2))
- (list
- "foo (def)"
- (cons "*function definition*" (copy-marker 21))
- (cons "foo1 (def)" (copy-marker 40)))
- (cons "foobar (def)" (copy-marker 78))))
- (python-imenu-create-index)))))
-
-(ert-deftest python-imenu-create-index-3 ()
- (python-tests-with-temp-buffer
- "
-class Foo(object):
- def foo(self):
- def foo1():
- pass
- def foo2():
- pass
-"
- (goto-char (point-max))
- (should (equal
- (list
- (list
- "Foo (class)"
- (cons "*class definition*" (copy-marker 2))
- (list
- "foo (def)"
- (cons "*function definition*" (copy-marker 21))
- (cons "foo1 (def)" (copy-marker 40))
- (cons "foo2 (def)" (copy-marker 77)))))
- (python-imenu-create-index)))))
-
-(ert-deftest python-imenu-create-index-4 ()
- (python-tests-with-temp-buffer
- "
-class Foo(object):
- class Bar(object):
- def __init__(self):
- pass
-
- def __str__(self):
- pass
-
- def __init__(self):
- pass
-"
- (goto-char (point-max))
- (should (equal
- (list
- (list
- "Foo (class)"
- (cons "*class definition*" (copy-marker 2))
- (list
- "Bar (class)"
- (cons "*class definition*" (copy-marker 21))
- (cons "__init__ (def)" (copy-marker 44))
- (cons "__str__ (def)" (copy-marker 90)))
- (cons "__init__ (def)" (copy-marker 135))))
- (python-imenu-create-index)))))
-
-(ert-deftest python-imenu-create-flat-index-1 ()
- (python-tests-with-temp-buffer
- "
-class Foo(models.Model):
- pass
-
-
-class Bar(models.Model):
- pass
-
-
-def decorator(arg1, arg2, arg3):
- '''print decorated function call data to stdout.
-
- Usage:
-
- @decorator('arg1', 'arg2')
- def func(a, b, c=True):
- pass
- '''
-
- def wrap(f):
- print ('wrap')
- def wrapped_f(*args):
- print ('wrapped_f')
- print ('Decorator arguments:', arg1, arg2, arg3)
- f(*args)
- print ('called f(*args)')
- return wrapped_f
- return wrap
-
-
-class Baz(object):
-
- def a(self):
- pass
-
- def b(self):
- pass
-
- class Frob(object):
-
- def c(self):
- pass
-"
- (goto-char (point-max))
- (should (equal
- (list (cons "Foo" (copy-marker 2))
- (cons "Bar" (copy-marker 38))
- (cons "decorator" (copy-marker 74))
- (cons "decorator.wrap" (copy-marker 254))
- (cons "decorator.wrap.wrapped_f" (copy-marker 294))
- (cons "Baz" (copy-marker 519))
- (cons "Baz.a" (copy-marker 539))
- (cons "Baz.b" (copy-marker 570))
- (cons "Baz.Frob" (copy-marker 601))
- (cons "Baz.Frob.c" (copy-marker 626)))
- (python-imenu-create-flat-index)))))
-
-(ert-deftest python-imenu-create-flat-index-2 ()
- (python-tests-with-temp-buffer
- "
-class Foo(object):
- class Bar(object):
- def __init__(self):
- pass
-
- def __str__(self):
- pass
-
- def __init__(self):
- pass
-"
- (goto-char (point-max))
- (should (equal
- (list
- (cons "Foo" (copy-marker 2))
- (cons "Foo.Bar" (copy-marker 21))
- (cons "Foo.Bar.__init__" (copy-marker 44))
- (cons "Foo.Bar.__str__" (copy-marker 90))
- (cons "Foo.__init__" (copy-marker 135)))
- (python-imenu-create-flat-index)))))
-
-
-;;; Misc helpers
-
-(ert-deftest python-info-current-defun-1 ()
- (python-tests-with-temp-buffer
- "
-def foo(a, b):
-"
- (forward-line 1)
- (should (string= "foo" (python-info-current-defun)))
- (should (string= "def foo" (python-info-current-defun t)))
- (forward-line 1)
- (should (not (python-info-current-defun)))
- (indent-for-tab-command)
- (should (string= "foo" (python-info-current-defun)))
- (should (string= "def foo" (python-info-current-defun t)))))
-
-(ert-deftest python-info-current-defun-2 ()
- (python-tests-with-temp-buffer
- "
-class C(object):
-
- def m(self):
- if True:
- return [i for i in range(3)]
- else:
- return []
-
- def b():
- do_b()
-
- def a():
- do_a()
-
- def c(self):
- do_c()
-"
- (forward-line 1)
- (should (string= "C" (python-info-current-defun)))
- (should (string= "class C" (python-info-current-defun t)))
- (python-tests-look-at "return [i for ")
- (should (string= "C.m" (python-info-current-defun)))
- (should (string= "def C.m" (python-info-current-defun t)))
- (python-tests-look-at "def b():")
- (should (string= "C.m.b" (python-info-current-defun)))
- (should (string= "def C.m.b" (python-info-current-defun t)))
- (forward-line 2)
- (indent-for-tab-command)
- (python-indent-dedent-line-backspace 1)
- (should (string= "C.m" (python-info-current-defun)))
- (should (string= "def C.m" (python-info-current-defun t)))
- (python-tests-look-at "def c(self):")
- (forward-line -1)
- (indent-for-tab-command)
- (should (string= "C.m.a" (python-info-current-defun)))
- (should (string= "def C.m.a" (python-info-current-defun t)))
- (python-indent-dedent-line-backspace 1)
- (should (string= "C.m" (python-info-current-defun)))
- (should (string= "def C.m" (python-info-current-defun t)))
- (python-indent-dedent-line-backspace 1)
- (should (string= "C" (python-info-current-defun)))
- (should (string= "class C" (python-info-current-defun t)))
- (python-tests-look-at "def c(self):")
- (should (string= "C.c" (python-info-current-defun)))
- (should (string= "def C.c" (python-info-current-defun t)))
- (python-tests-look-at "do_c()")
- (should (string= "C.c" (python-info-current-defun)))
- (should (string= "def C.c" (python-info-current-defun t)))))
-
-(ert-deftest python-info-current-defun-3 ()
- (python-tests-with-temp-buffer
- "
-def decoratorFunctionWithArguments(arg1, arg2, arg3):
- '''print decorated function call data to stdout.
-
- Usage:
-
- @decoratorFunctionWithArguments('arg1', 'arg2')
- def func(a, b, c=True):
- pass
- '''
-
- def wwrap(f):
- print 'Inside wwrap()'
- def wrapped_f(*args):
- print 'Inside wrapped_f()'
- print 'Decorator arguments:', arg1, arg2, arg3
- f(*args)
- print 'After f(*args)'
- return wrapped_f
- return wwrap
-"
- (python-tests-look-at "def wwrap(f):")
- (forward-line -1)
- (should (not (python-info-current-defun)))
- (indent-for-tab-command 1)
- (should (string= (python-info-current-defun)
- "decoratorFunctionWithArguments"))
- (should (string= (python-info-current-defun t)
- "def decoratorFunctionWithArguments"))
- (python-tests-look-at "def wrapped_f(*args):")
- (should (string= (python-info-current-defun)
- "decoratorFunctionWithArguments.wwrap.wrapped_f"))
- (should (string= (python-info-current-defun t)
- "def decoratorFunctionWithArguments.wwrap.wrapped_f"))
- (python-tests-look-at "return wrapped_f")
- (should (string= (python-info-current-defun)
- "decoratorFunctionWithArguments.wwrap"))
- (should (string= (python-info-current-defun t)
- "def decoratorFunctionWithArguments.wwrap"))
- (end-of-line 1)
- (python-tests-look-at "return wwrap")
- (should (string= (python-info-current-defun)
- "decoratorFunctionWithArguments"))
- (should (string= (python-info-current-defun t)
- "def decoratorFunctionWithArguments"))))
-
-(ert-deftest python-info-current-symbol-1 ()
- (python-tests-with-temp-buffer
- "
-class C(object):
-
- def m(self):
- self.c()
-
- def c(self):
- print ('a')
-"
- (python-tests-look-at "self.c()")
- (should (string= "self.c" (python-info-current-symbol)))
- (should (string= "C.c" (python-info-current-symbol t)))))
-
-(ert-deftest python-info-current-symbol-2 ()
- (python-tests-with-temp-buffer
- "
-class C(object):
-
- class M(object):
-
- def a(self):
- self.c()
-
- def c(self):
- pass
-"
- (python-tests-look-at "self.c()")
- (should (string= "self.c" (python-info-current-symbol)))
- (should (string= "C.M.c" (python-info-current-symbol t)))))
-
-(ert-deftest python-info-current-symbol-3 ()
- "Keywords should not be considered symbols."
- :expected-result :failed
- (python-tests-with-temp-buffer
- "
-class C(object):
- pass
-"
- ;; FIXME: keywords are not symbols.
- (python-tests-look-at "class C")
- (should (not (python-info-current-symbol)))
- (should (not (python-info-current-symbol t)))
- (python-tests-look-at "C(object)")
- (should (string= "C" (python-info-current-symbol)))
- (should (string= "class C" (python-info-current-symbol t)))))
-
-(ert-deftest python-info-statement-starts-block-p-1 ()
- (python-tests-with-temp-buffer
- "
-def long_function_name(
- var_one, var_two, var_three,
- var_four):
- print (var_one)
-"
- (python-tests-look-at "def long_function_name")
- (should (python-info-statement-starts-block-p))
- (python-tests-look-at "print (var_one)")
- (python-util-forward-comment -1)
- (should (python-info-statement-starts-block-p))))
-
-(ert-deftest python-info-statement-starts-block-p-2 ()
- (python-tests-with-temp-buffer
- "
-if width == 0 and height == 0 and \\\\
- color == 'red' and emphasis == 'strong' or \\\\
- highlight > 100:
- raise ValueError('sorry, you lose')
-"
- (python-tests-look-at "if width == 0 and")
- (should (python-info-statement-starts-block-p))
- (python-tests-look-at "raise ValueError(")
- (python-util-forward-comment -1)
- (should (python-info-statement-starts-block-p))))
-
-(ert-deftest python-info-statement-ends-block-p-1 ()
- (python-tests-with-temp-buffer
- "
-def long_function_name(
- var_one, var_two, var_three,
- var_four):
- print (var_one)
-"
- (python-tests-look-at "print (var_one)")
- (should (python-info-statement-ends-block-p))))
-
-(ert-deftest python-info-statement-ends-block-p-2 ()
- (python-tests-with-temp-buffer
- "
-if width == 0 and height == 0 and \\\\
- color == 'red' and emphasis == 'strong' or \\\\
- highlight > 100:
- raise ValueError(
-'sorry, you lose'
-
-)
-"
- (python-tests-look-at "raise ValueError(")
- (should (python-info-statement-ends-block-p))))
-
-(ert-deftest python-info-beginning-of-statement-p-1 ()
- (python-tests-with-temp-buffer
- "
-def long_function_name(
- var_one, var_two, var_three,
- var_four):
- print (var_one)
-"
- (python-tests-look-at "def long_function_name")
- (should (python-info-beginning-of-statement-p))
- (forward-char 10)
- (should (not (python-info-beginning-of-statement-p)))
- (python-tests-look-at "print (var_one)")
- (should (python-info-beginning-of-statement-p))
- (goto-char (line-beginning-position))
- (should (not (python-info-beginning-of-statement-p)))))
-
-(ert-deftest python-info-beginning-of-statement-p-2 ()
- (python-tests-with-temp-buffer
- "
-if width == 0 and height == 0 and \\\\
- color == 'red' and emphasis == 'strong' or \\\\
- highlight > 100:
- raise ValueError(
-'sorry, you lose'
-
-)
-"
- (python-tests-look-at "if width == 0 and")
- (should (python-info-beginning-of-statement-p))
- (forward-char 10)
- (should (not (python-info-beginning-of-statement-p)))
- (python-tests-look-at "raise ValueError(")
- (should (python-info-beginning-of-statement-p))
- (goto-char (line-beginning-position))
- (should (not (python-info-beginning-of-statement-p)))))
-
-(ert-deftest python-info-end-of-statement-p-1 ()
- (python-tests-with-temp-buffer
- "
-def long_function_name(
- var_one, var_two, var_three,
- var_four):
- print (var_one)
-"
- (python-tests-look-at "def long_function_name")
- (should (not (python-info-end-of-statement-p)))
- (end-of-line)
- (should (not (python-info-end-of-statement-p)))
- (python-tests-look-at "print (var_one)")
- (python-util-forward-comment -1)
- (should (python-info-end-of-statement-p))
- (python-tests-look-at "print (var_one)")
- (should (not (python-info-end-of-statement-p)))
- (end-of-line)
- (should (python-info-end-of-statement-p))))
-
-(ert-deftest python-info-end-of-statement-p-2 ()
- (python-tests-with-temp-buffer
- "
-if width == 0 and height == 0 and \\\\
- color == 'red' and emphasis == 'strong' or \\\\
- highlight > 100:
- raise ValueError(
-'sorry, you lose'
-
-)
-"
- (python-tests-look-at "if width == 0 and")
- (should (not (python-info-end-of-statement-p)))
- (end-of-line)
- (should (not (python-info-end-of-statement-p)))
- (python-tests-look-at "raise ValueError(")
- (python-util-forward-comment -1)
- (should (python-info-end-of-statement-p))
- (python-tests-look-at "raise ValueError(")
- (should (not (python-info-end-of-statement-p)))
- (end-of-line)
- (should (not (python-info-end-of-statement-p)))
- (goto-char (point-max))
- (python-util-forward-comment -1)
- (should (python-info-end-of-statement-p))))
-
-(ert-deftest python-info-beginning-of-block-p-1 ()
- (python-tests-with-temp-buffer
- "
-def long_function_name(
- var_one, var_two, var_three,
- var_four):
- print (var_one)
-"
- (python-tests-look-at "def long_function_name")
- (should (python-info-beginning-of-block-p))
- (python-tests-look-at "var_one, var_two, var_three,")
- (should (not (python-info-beginning-of-block-p)))
- (python-tests-look-at "print (var_one)")
- (should (not (python-info-beginning-of-block-p)))))
-
-(ert-deftest python-info-beginning-of-block-p-2 ()
- (python-tests-with-temp-buffer
- "
-if width == 0 and height == 0 and \\\\
- color == 'red' and emphasis == 'strong' or \\\\
- highlight > 100:
- raise ValueError(
-'sorry, you lose'
-
-)
-"
- (python-tests-look-at "if width == 0 and")
- (should (python-info-beginning-of-block-p))
- (python-tests-look-at "color == 'red' and emphasis")
- (should (not (python-info-beginning-of-block-p)))
- (python-tests-look-at "raise ValueError(")
- (should (not (python-info-beginning-of-block-p)))))
-
-(ert-deftest python-info-end-of-block-p-1 ()
- (python-tests-with-temp-buffer
- "
-def long_function_name(
- var_one, var_two, var_three,
- var_four):
- print (var_one)
-"
- (python-tests-look-at "def long_function_name")
- (should (not (python-info-end-of-block-p)))
- (python-tests-look-at "var_one, var_two, var_three,")
- (should (not (python-info-end-of-block-p)))
- (python-tests-look-at "var_four):")
- (end-of-line)
- (should (not (python-info-end-of-block-p)))
- (python-tests-look-at "print (var_one)")
- (should (not (python-info-end-of-block-p)))
- (end-of-line 1)
- (should (python-info-end-of-block-p))))
-
-(ert-deftest python-info-end-of-block-p-2 ()
- (python-tests-with-temp-buffer
- "
-if width == 0 and height == 0 and \\\\
- color == 'red' and emphasis == 'strong' or \\\\
- highlight > 100:
- raise ValueError(
-'sorry, you lose'
-
-)
-"
- (python-tests-look-at "if width == 0 and")
- (should (not (python-info-end-of-block-p)))
- (python-tests-look-at "color == 'red' and emphasis == 'strong' or")
- (should (not (python-info-end-of-block-p)))
- (python-tests-look-at "highlight > 100:")
- (end-of-line)
- (should (not (python-info-end-of-block-p)))
- (python-tests-look-at "raise ValueError(")
- (should (not (python-info-end-of-block-p)))
- (end-of-line 1)
- (should (not (python-info-end-of-block-p)))
- (goto-char (point-max))
- (python-util-forward-comment -1)
- (should (python-info-end-of-block-p))))
-
-(ert-deftest python-info-dedenter-opening-block-position-1 ()
- (python-tests-with-temp-buffer
- "
-if request.user.is_authenticated():
- try:
- profile = request.user.get_profile()
- except Profile.DoesNotExist:
- profile = Profile.objects.create(user=request.user)
- else:
- if profile.stats:
- profile.recalculate_stats()
- else:
- profile.clear_stats()
- finally:
- profile.views += 1
- profile.save()
-"
- (python-tests-look-at "try:")
- (should (not (python-info-dedenter-opening-block-position)))
- (python-tests-look-at "except Profile.DoesNotExist:")
- (should (= (python-tests-look-at "try:" -1 t)
- (python-info-dedenter-opening-block-position)))
- (python-tests-look-at "else:")
- (should (= (python-tests-look-at "except Profile.DoesNotExist:" -1 t)
- (python-info-dedenter-opening-block-position)))
- (python-tests-look-at "if profile.stats:")
- (should (not (python-info-dedenter-opening-block-position)))
- (python-tests-look-at "else:")
- (should (= (python-tests-look-at "if profile.stats:" -1 t)
- (python-info-dedenter-opening-block-position)))
- (python-tests-look-at "finally:")
- (should (= (python-tests-look-at "else:" -2 t)
- (python-info-dedenter-opening-block-position)))))
-
-(ert-deftest python-info-dedenter-opening-block-position-2 ()
- (python-tests-with-temp-buffer
- "
-if request.user.is_authenticated():
- profile = Profile.objects.get_or_create(user=request.user)
- if profile.stats:
- profile.recalculate_stats()
-
-data = {
- 'else': 'do it'
-}
- 'else'
-"
- (python-tests-look-at "'else': 'do it'")
- (should (not (python-info-dedenter-opening-block-position)))
- (python-tests-look-at "'else'")
- (should (not (python-info-dedenter-opening-block-position)))))
-
-(ert-deftest python-info-dedenter-opening-block-position-3 ()
- (python-tests-with-temp-buffer
- "
-if save:
- try:
- write_to_disk(data)
- except IOError:
- msg = 'Error saving to disk'
- message(msg)
- logger.exception(msg)
- except Exception:
- if hide_details:
- logger.exception('Unhandled exception')
- else
- finally:
- data.free()
-"
- (python-tests-look-at "try:")
- (should (not (python-info-dedenter-opening-block-position)))
-
- (python-tests-look-at "except IOError:")
- (should (= (python-tests-look-at "try:" -1 t)
- (python-info-dedenter-opening-block-position)))
-
- (python-tests-look-at "except Exception:")
- (should (= (python-tests-look-at "except IOError:" -1 t)
- (python-info-dedenter-opening-block-position)))
-
- (python-tests-look-at "if hide_details:")
- (should (not (python-info-dedenter-opening-block-position)))
-
- ;; check indentation modifies the detected opening block
- (python-tests-look-at "else")
- (should (= (python-tests-look-at "if hide_details:" -1 t)
- (python-info-dedenter-opening-block-position)))
-
- (indent-line-to 8)
- (should (= (python-tests-look-at "if hide_details:" -1 t)
- (python-info-dedenter-opening-block-position)))
-
- (indent-line-to 4)
- (should (= (python-tests-look-at "except Exception:" -1 t)
- (python-info-dedenter-opening-block-position)))
-
- (indent-line-to 0)
- (should (= (python-tests-look-at "if save:" -1 t)
- (python-info-dedenter-opening-block-position)))))
-
-(ert-deftest python-info-dedenter-opening-block-positions-1 ()
- (python-tests-with-temp-buffer
- "
-if save:
- try:
- write_to_disk(data)
- except IOError:
- msg = 'Error saving to disk'
- message(msg)
- logger.exception(msg)
- except Exception:
- if hide_details:
- logger.exception('Unhandled exception')
- else
- finally:
- data.free()
-"
- (python-tests-look-at "try:")
- (should (not (python-info-dedenter-opening-block-positions)))
-
- (python-tests-look-at "except IOError:")
- (should
- (equal (list
- (python-tests-look-at "try:" -1 t))
- (python-info-dedenter-opening-block-positions)))
-
- (python-tests-look-at "except Exception:")
- (should
- (equal (list
- (python-tests-look-at "except IOError:" -1 t))
- (python-info-dedenter-opening-block-positions)))
-
- (python-tests-look-at "if hide_details:")
- (should (not (python-info-dedenter-opening-block-positions)))
-
- ;; check indentation does not modify the detected opening blocks
- (python-tests-look-at "else")
- (should
- (equal (list
- (python-tests-look-at "if hide_details:" -1 t)
- (python-tests-look-at "except Exception:" -1 t)
- (python-tests-look-at "if save:" -1 t))
- (python-info-dedenter-opening-block-positions)))
-
- (indent-line-to 8)
- (should
- (equal (list
- (python-tests-look-at "if hide_details:" -1 t)
- (python-tests-look-at "except Exception:" -1 t)
- (python-tests-look-at "if save:" -1 t))
- (python-info-dedenter-opening-block-positions)))
-
- (indent-line-to 4)
- (should
- (equal (list
- (python-tests-look-at "if hide_details:" -1 t)
- (python-tests-look-at "except Exception:" -1 t)
- (python-tests-look-at "if save:" -1 t))
- (python-info-dedenter-opening-block-positions)))
-
- (indent-line-to 0)
- (should
- (equal (list
- (python-tests-look-at "if hide_details:" -1 t)
- (python-tests-look-at "except Exception:" -1 t)
- (python-tests-look-at "if save:" -1 t))
- (python-info-dedenter-opening-block-positions)))))
-
-(ert-deftest python-info-dedenter-opening-block-positions-2 ()
- "Test detection of opening blocks for elif."
- (python-tests-with-temp-buffer
- "
-if var:
- if var2:
- something()
- elif var3:
- something_else()
- elif
-"
- (python-tests-look-at "elif var3:")
- (should
- (equal (list
- (python-tests-look-at "if var2:" -1 t)
- (python-tests-look-at "if var:" -1 t))
- (python-info-dedenter-opening-block-positions)))
-
- (python-tests-look-at "elif\n")
- (should
- (equal (list
- (python-tests-look-at "elif var3:" -1 t)
- (python-tests-look-at "if var:" -1 t))
- (python-info-dedenter-opening-block-positions)))))
-
-(ert-deftest python-info-dedenter-opening-block-positions-3 ()
- "Test detection of opening blocks for else."
- (python-tests-with-temp-buffer
- "
-try:
- something()
-except:
- if var:
- if var2:
- something()
- elif var3:
- something_else()
- else
-
-if var4:
- while var5:
- var4.pop()
- else
-
- for value in var6:
- if value > 0:
- print value
- else
-"
- (python-tests-look-at "else\n")
- (should
- (equal (list
- (python-tests-look-at "elif var3:" -1 t)
- (python-tests-look-at "if var:" -1 t)
- (python-tests-look-at "except:" -1 t))
- (python-info-dedenter-opening-block-positions)))
-
- (python-tests-look-at "else\n")
- (should
- (equal (list
- (python-tests-look-at "while var5:" -1 t)
- (python-tests-look-at "if var4:" -1 t))
- (python-info-dedenter-opening-block-positions)))
-
- (python-tests-look-at "else\n")
- (should
- (equal (list
- (python-tests-look-at "if value > 0:" -1 t)
- (python-tests-look-at "for value in var6:" -1 t)
- (python-tests-look-at "if var4:" -1 t))
- (python-info-dedenter-opening-block-positions)))))
-
-(ert-deftest python-info-dedenter-opening-block-positions-4 ()
- "Test detection of opening blocks for except."
- (python-tests-with-temp-buffer
- "
-try:
- something()
-except ValueError:
- something_else()
- except
-"
- (python-tests-look-at "except ValueError:")
- (should
- (equal (list (python-tests-look-at "try:" -1 t))
- (python-info-dedenter-opening-block-positions)))
-
- (python-tests-look-at "except\n")
- (should
- (equal (list (python-tests-look-at "except ValueError:" -1 t))
- (python-info-dedenter-opening-block-positions)))))
-
-(ert-deftest python-info-dedenter-opening-block-positions-5 ()
- "Test detection of opening blocks for finally."
- (python-tests-with-temp-buffer
- "
-try:
- something()
- finally
-
-try:
- something_else()
-except:
- logger.exception('something went wrong')
- finally
-
-try:
- something_else_else()
-except Exception:
- logger.exception('something else went wrong')
-else:
- print ('all good')
- finally
-"
- (python-tests-look-at "finally\n")
- (should
- (equal (list (python-tests-look-at "try:" -1 t))
- (python-info-dedenter-opening-block-positions)))
-
- (python-tests-look-at "finally\n")
- (should
- (equal (list (python-tests-look-at "except:" -1 t))
- (python-info-dedenter-opening-block-positions)))
-
- (python-tests-look-at "finally\n")
- (should
- (equal (list (python-tests-look-at "else:" -1 t))
- (python-info-dedenter-opening-block-positions)))))
-
-(ert-deftest python-info-dedenter-opening-block-message-1 ()
- "Test dedenters inside strings are ignored."
- (python-tests-with-temp-buffer
- "'''
-try:
- something()
-except:
- logger.exception('something went wrong')
-'''
-"
- (python-tests-look-at "except\n")
- (should (not (python-info-dedenter-opening-block-message)))))
-
-(ert-deftest python-info-dedenter-opening-block-message-2 ()
- "Test except keyword."
- (python-tests-with-temp-buffer
- "
-try:
- something()
-except:
- logger.exception('something went wrong')
-"
- (python-tests-look-at "except:")
- (should (string=
- "Closes try:"
- (substring-no-properties
- (python-info-dedenter-opening-block-message))))
- (end-of-line)
- (should (string=
- "Closes try:"
- (substring-no-properties
- (python-info-dedenter-opening-block-message))))))
-
-(ert-deftest python-info-dedenter-opening-block-message-3 ()
- "Test else keyword."
- (python-tests-with-temp-buffer
- "
-try:
- something()
-except:
- logger.exception('something went wrong')
-else:
- logger.debug('all good')
-"
- (python-tests-look-at "else:")
- (should (string=
- "Closes except:"
- (substring-no-properties
- (python-info-dedenter-opening-block-message))))
- (end-of-line)
- (should (string=
- "Closes except:"
- (substring-no-properties
- (python-info-dedenter-opening-block-message))))))
-
-(ert-deftest python-info-dedenter-opening-block-message-4 ()
- "Test finally keyword."
- (python-tests-with-temp-buffer
- "
-try:
- something()
-except:
- logger.exception('something went wrong')
-else:
- logger.debug('all good')
-finally:
- clean()
-"
- (python-tests-look-at "finally:")
- (should (string=
- "Closes else:"
- (substring-no-properties
- (python-info-dedenter-opening-block-message))))
- (end-of-line)
- (should (string=
- "Closes else:"
- (substring-no-properties
- (python-info-dedenter-opening-block-message))))))
-
-(ert-deftest python-info-dedenter-opening-block-message-5 ()
- "Test elif keyword."
- (python-tests-with-temp-buffer
- "
-if a:
- something()
-elif b:
-"
- (python-tests-look-at "elif b:")
- (should (string=
- "Closes if a:"
- (substring-no-properties
- (python-info-dedenter-opening-block-message))))
- (end-of-line)
- (should (string=
- "Closes if a:"
- (substring-no-properties
- (python-info-dedenter-opening-block-message))))))
-
-
-(ert-deftest python-info-dedenter-statement-p-1 ()
- "Test dedenters inside strings are ignored."
- (python-tests-with-temp-buffer
- "'''
-try:
- something()
-except:
- logger.exception('something went wrong')
-'''
-"
- (python-tests-look-at "except\n")
- (should (not (python-info-dedenter-statement-p)))))
-
-(ert-deftest python-info-dedenter-statement-p-2 ()
- "Test except keyword."
- (python-tests-with-temp-buffer
- "
-try:
- something()
-except:
- logger.exception('something went wrong')
-"
- (python-tests-look-at "except:")
- (should (= (point) (python-info-dedenter-statement-p)))
- (end-of-line)
- (should (= (save-excursion
- (back-to-indentation)
- (point))
- (python-info-dedenter-statement-p)))))
-
-(ert-deftest python-info-dedenter-statement-p-3 ()
- "Test else keyword."
- (python-tests-with-temp-buffer
- "
-try:
- something()
-except:
- logger.exception('something went wrong')
-else:
- logger.debug('all good')
-"
- (python-tests-look-at "else:")
- (should (= (point) (python-info-dedenter-statement-p)))
- (end-of-line)
- (should (= (save-excursion
- (back-to-indentation)
- (point))
- (python-info-dedenter-statement-p)))))
-
-(ert-deftest python-info-dedenter-statement-p-4 ()
- "Test finally keyword."
- (python-tests-with-temp-buffer
- "
-try:
- something()
-except:
- logger.exception('something went wrong')
-else:
- logger.debug('all good')
-finally:
- clean()
-"
- (python-tests-look-at "finally:")
- (should (= (point) (python-info-dedenter-statement-p)))
- (end-of-line)
- (should (= (save-excursion
- (back-to-indentation)
- (point))
- (python-info-dedenter-statement-p)))))
-
-(ert-deftest python-info-dedenter-statement-p-5 ()
- "Test elif keyword."
- (python-tests-with-temp-buffer
- "
-if a:
- something()
-elif b:
-"
- (python-tests-look-at "elif b:")
- (should (= (point) (python-info-dedenter-statement-p)))
- (end-of-line)
- (should (= (save-excursion
- (back-to-indentation)
- (point))
- (python-info-dedenter-statement-p)))))
-
-(ert-deftest python-info-line-ends-backslash-p-1 ()
- (python-tests-with-temp-buffer
- "
-objects = Thing.objects.all() \\\\
- .filter(
- type='toy',
- status='bought'
- ) \\\\
- .aggregate(
- Sum('amount')
- ) \\\\
- .values_list()
-"
- (should (python-info-line-ends-backslash-p 2)) ; .filter(...
- (should (python-info-line-ends-backslash-p 3))
- (should (python-info-line-ends-backslash-p 4))
- (should (python-info-line-ends-backslash-p 5))
- (should (python-info-line-ends-backslash-p 6)) ; ) \...
- (should (python-info-line-ends-backslash-p 7))
- (should (python-info-line-ends-backslash-p 8))
- (should (python-info-line-ends-backslash-p 9))
- (should (not (python-info-line-ends-backslash-p 10))))) ; .values_list()...
-
-(ert-deftest python-info-beginning-of-backslash-1 ()
- (python-tests-with-temp-buffer
- "
-objects = Thing.objects.all() \\\\
- .filter(
- type='toy',
- status='bought'
- ) \\\\
- .aggregate(
- Sum('amount')
- ) \\\\
- .values_list()
-"
- (let ((first 2)
- (second (python-tests-look-at ".filter("))
- (third (python-tests-look-at ".aggregate(")))
- (should (= first (python-info-beginning-of-backslash 2)))
- (should (= second (python-info-beginning-of-backslash 3)))
- (should (= second (python-info-beginning-of-backslash 4)))
- (should (= second (python-info-beginning-of-backslash 5)))
- (should (= second (python-info-beginning-of-backslash 6)))
- (should (= third (python-info-beginning-of-backslash 7)))
- (should (= third (python-info-beginning-of-backslash 8)))
- (should (= third (python-info-beginning-of-backslash 9)))
- (should (not (python-info-beginning-of-backslash 10))))))
-
-(ert-deftest python-info-continuation-line-p-1 ()
- (python-tests-with-temp-buffer
- "
-if width == 0 and height == 0 and \\\\
- color == 'red' and emphasis == 'strong' or \\\\
- highlight > 100:
- raise ValueError(
-'sorry, you lose'
-
-)
-"
- (python-tests-look-at "if width == 0 and height == 0 and")
- (should (not (python-info-continuation-line-p)))
- (python-tests-look-at "color == 'red' and emphasis == 'strong' or")
- (should (python-info-continuation-line-p))
- (python-tests-look-at "highlight > 100:")
- (should (python-info-continuation-line-p))
- (python-tests-look-at "raise ValueError(")
- (should (not (python-info-continuation-line-p)))
- (python-tests-look-at "'sorry, you lose'")
- (should (python-info-continuation-line-p))
- (forward-line 1)
- (should (python-info-continuation-line-p))
- (python-tests-look-at ")")
- (should (python-info-continuation-line-p))
- (forward-line 1)
- (should (not (python-info-continuation-line-p)))))
-
-(ert-deftest python-info-block-continuation-line-p-1 ()
- (python-tests-with-temp-buffer
- "
-if width == 0 and height == 0 and \\\\
- color == 'red' and emphasis == 'strong' or \\\\
- highlight > 100:
- raise ValueError(
-'sorry, you lose'
-
-)
-"
- (python-tests-look-at "if width == 0 and")
- (should (not (python-info-block-continuation-line-p)))
- (python-tests-look-at "color == 'red' and emphasis == 'strong' or")
- (should (= (python-info-block-continuation-line-p)
- (python-tests-look-at "if width == 0 and" -1 t)))
- (python-tests-look-at "highlight > 100:")
- (should (not (python-info-block-continuation-line-p)))))
-
-(ert-deftest python-info-block-continuation-line-p-2 ()
- (python-tests-with-temp-buffer
- "
-def foo(a,
- b,
- c):
- pass
-"
- (python-tests-look-at "def foo(a,")
- (should (not (python-info-block-continuation-line-p)))
- (python-tests-look-at "b,")
- (should (= (python-info-block-continuation-line-p)
- (python-tests-look-at "def foo(a," -1 t)))
- (python-tests-look-at "c):")
- (should (not (python-info-block-continuation-line-p)))))
-
-(ert-deftest python-info-assignment-statement-p-1 ()
- (python-tests-with-temp-buffer
- "
-data = foo(), bar() \\\\
- baz(), 4 \\\\
- 5, 6
-"
- (python-tests-look-at "data = foo(), bar()")
- (should (python-info-assignment-statement-p))
- (should (python-info-assignment-statement-p t))
- (python-tests-look-at "baz(), 4")
- (should (python-info-assignment-statement-p))
- (should (not (python-info-assignment-statement-p t)))
- (python-tests-look-at "5, 6")
- (should (python-info-assignment-statement-p))
- (should (not (python-info-assignment-statement-p t)))))
-
-(ert-deftest python-info-assignment-statement-p-2 ()
- (python-tests-with-temp-buffer
- "
-data = (foo(), bar()
- baz(), 4
- 5, 6)
-"
- (python-tests-look-at "data = (foo(), bar()")
- (should (python-info-assignment-statement-p))
- (should (python-info-assignment-statement-p t))
- (python-tests-look-at "baz(), 4")
- (should (python-info-assignment-statement-p))
- (should (not (python-info-assignment-statement-p t)))
- (python-tests-look-at "5, 6)")
- (should (python-info-assignment-statement-p))
- (should (not (python-info-assignment-statement-p t)))))
-
-(ert-deftest python-info-assignment-statement-p-3 ()
- (python-tests-with-temp-buffer
- "
-data '=' 42
-"
- (python-tests-look-at "data '=' 42")
- (should (not (python-info-assignment-statement-p)))
- (should (not (python-info-assignment-statement-p t)))))
-
-(ert-deftest python-info-assignment-continuation-line-p-1 ()
- (python-tests-with-temp-buffer
- "
-data = foo(), bar() \\\\
- baz(), 4 \\\\
- 5, 6
-"
- (python-tests-look-at "data = foo(), bar()")
- (should (not (python-info-assignment-continuation-line-p)))
- (python-tests-look-at "baz(), 4")
- (should (= (python-info-assignment-continuation-line-p)
- (python-tests-look-at "foo()," -1 t)))
- (python-tests-look-at "5, 6")
- (should (not (python-info-assignment-continuation-line-p)))))
-
-(ert-deftest python-info-assignment-continuation-line-p-2 ()
- (python-tests-with-temp-buffer
- "
-data = (foo(), bar()
- baz(), 4
- 5, 6)
-"
- (python-tests-look-at "data = (foo(), bar()")
- (should (not (python-info-assignment-continuation-line-p)))
- (python-tests-look-at "baz(), 4")
- (should (= (python-info-assignment-continuation-line-p)
- (python-tests-look-at "(foo()," -1 t)))
- (python-tests-look-at "5, 6)")
- (should (not (python-info-assignment-continuation-line-p)))))
-
-(ert-deftest python-info-looking-at-beginning-of-defun-1 ()
- (python-tests-with-temp-buffer
- "
-def decorat0r(deff):
- '''decorates stuff.
-
- @decorat0r
- def foo(arg):
- ...
- '''
- def wrap():
- deff()
- return wwrap
-"
- (python-tests-look-at "def decorat0r(deff):")
- (should (python-info-looking-at-beginning-of-defun))
- (python-tests-look-at "def foo(arg):")
- (should (not (python-info-looking-at-beginning-of-defun)))
- (python-tests-look-at "def wrap():")
- (should (python-info-looking-at-beginning-of-defun))
- (python-tests-look-at "deff()")
- (should (not (python-info-looking-at-beginning-of-defun)))))
-
-(ert-deftest python-info-current-line-comment-p-1 ()
- (python-tests-with-temp-buffer
- "
-# this is a comment
-foo = True # another comment
-'#this is a string'
-if foo:
- # more comments
- print ('bar') # print bar
-"
- (python-tests-look-at "# this is a comment")
- (should (python-info-current-line-comment-p))
- (python-tests-look-at "foo = True # another comment")
- (should (not (python-info-current-line-comment-p)))
- (python-tests-look-at "'#this is a string'")
- (should (not (python-info-current-line-comment-p)))
- (python-tests-look-at "# more comments")
- (should (python-info-current-line-comment-p))
- (python-tests-look-at "print ('bar') # print bar")
- (should (not (python-info-current-line-comment-p)))))
-
-(ert-deftest python-info-current-line-empty-p ()
- (python-tests-with-temp-buffer
- "
-# this is a comment
-
-foo = True # another comment
-"
- (should (python-info-current-line-empty-p))
- (python-tests-look-at "# this is a comment")
- (should (not (python-info-current-line-empty-p)))
- (forward-line 1)
- (should (python-info-current-line-empty-p))))
-
-(ert-deftest python-info-docstring-p-1 ()
- "Test module docstring detection."
- (python-tests-with-temp-buffer
- "# -*- coding: utf-8 -*-
-#!/usr/bin/python
-
-'''
-Module Docstring Django style.
-'''
-u'''Additional module docstring.'''
-'''Not a module docstring.'''
-"
- (python-tests-look-at "Module Docstring Django style.")
- (should (python-info-docstring-p))
- (python-tests-look-at "u'''Additional module docstring.'''")
- (should (python-info-docstring-p))
- (python-tests-look-at "'''Not a module docstring.'''")
- (should (not (python-info-docstring-p)))))
-
-(ert-deftest python-info-docstring-p-2 ()
- "Test variable docstring detection."
- (python-tests-with-temp-buffer
- "
-variable = 42
-U'''Variable docstring.'''
-'''Additional variable docstring.'''
-'''Not a variable docstring.'''
-"
- (python-tests-look-at "Variable docstring.")
- (should (python-info-docstring-p))
- (python-tests-look-at "u'''Additional variable docstring.'''")
- (should (python-info-docstring-p))
- (python-tests-look-at "'''Not a variable docstring.'''")
- (should (not (python-info-docstring-p)))))
-
-(ert-deftest python-info-docstring-p-3 ()
- "Test function docstring detection."
- (python-tests-with-temp-buffer
- "
-def func(a, b):
- r'''
- Function docstring.
-
- onetwo style.
- '''
- R'''Additional function docstring.'''
- '''Not a function docstring.'''
- return a + b
-"
- (python-tests-look-at "Function docstring.")
- (should (python-info-docstring-p))
- (python-tests-look-at "R'''Additional function docstring.'''")
- (should (python-info-docstring-p))
- (python-tests-look-at "'''Not a function docstring.'''")
- (should (not (python-info-docstring-p)))))
-
-(ert-deftest python-info-docstring-p-4 ()
- "Test class docstring detection."
- (python-tests-with-temp-buffer
- "
-class Class:
- ur'''
- Class docstring.
-
- symmetric style.
- '''
- uR'''
- Additional class docstring.
- '''
- '''Not a class docstring.'''
- pass
-"
- (python-tests-look-at "Class docstring.")
- (should (python-info-docstring-p))
- (python-tests-look-at "uR'''") ;; Additional class docstring
- (should (python-info-docstring-p))
- (python-tests-look-at "'''Not a class docstring.'''")
- (should (not (python-info-docstring-p)))))
-
-(ert-deftest python-info-docstring-p-5 ()
- "Test class attribute docstring detection."
- (python-tests-with-temp-buffer
- "
-class Class:
- attribute = 42
- Ur'''
- Class attribute docstring.
-
- pep-257 style.
-
- '''
- UR'''
- Additional class attribute docstring.
- '''
- '''Not a class attribute docstring.'''
- pass
-"
- (python-tests-look-at "Class attribute docstring.")
- (should (python-info-docstring-p))
- (python-tests-look-at "UR'''") ;; Additional class attr docstring
- (should (python-info-docstring-p))
- (python-tests-look-at "'''Not a class attribute docstring.'''")
- (should (not (python-info-docstring-p)))))
-
-(ert-deftest python-info-docstring-p-6 ()
- "Test class method docstring detection."
- (python-tests-with-temp-buffer
- "
-class Class:
-
- def __init__(self, a, b):
- self.a = a
- self.b = b
-
- def __call__(self):
- '''Method docstring.
-
- pep-257-nn style.
- '''
- '''Additional method docstring.'''
- '''Not a method docstring.'''
- return self.a + self.b
-"
- (python-tests-look-at "Method docstring.")
- (should (python-info-docstring-p))
- (python-tests-look-at "'''Additional method docstring.'''")
- (should (python-info-docstring-p))
- (python-tests-look-at "'''Not a method docstring.'''")
- (should (not (python-info-docstring-p)))))
-
-(ert-deftest python-info-encoding-from-cookie-1 ()
- "Should detect it on first line."
- (python-tests-with-temp-buffer
- "# coding=latin-1
-
-foo = True # another comment
-"
- (should (eq (python-info-encoding-from-cookie) 'latin-1))))
-
-(ert-deftest python-info-encoding-from-cookie-2 ()
- "Should detect it on second line."
- (python-tests-with-temp-buffer
- "
-# coding=latin-1
-
-foo = True # another comment
-"
- (should (eq (python-info-encoding-from-cookie) 'latin-1))))
-
-(ert-deftest python-info-encoding-from-cookie-3 ()
- "Should not be detected on third line (and following ones)."
- (python-tests-with-temp-buffer
- "
-
-# coding=latin-1
-foo = True # another comment
-"
- (should (not (python-info-encoding-from-cookie)))))
-
-(ert-deftest python-info-encoding-from-cookie-4 ()
- "Should detect Emacs style."
- (python-tests-with-temp-buffer
- "# -*- coding: latin-1 -*-
-
-foo = True # another comment"
- (should (eq (python-info-encoding-from-cookie) 'latin-1))))
-
-(ert-deftest python-info-encoding-from-cookie-5 ()
- "Should detect Vim style."
- (python-tests-with-temp-buffer
- "# vim: set fileencoding=latin-1 :
-
-foo = True # another comment"
- (should (eq (python-info-encoding-from-cookie) 'latin-1))))
-
-(ert-deftest python-info-encoding-from-cookie-6 ()
- "First cookie wins."
- (python-tests-with-temp-buffer
- "# -*- coding: iso-8859-1 -*-
-# vim: set fileencoding=latin-1 :
-
-foo = True # another comment"
- (should (eq (python-info-encoding-from-cookie) 'iso-8859-1))))
-
-(ert-deftest python-info-encoding-from-cookie-7 ()
- "First cookie wins."
- (python-tests-with-temp-buffer
- "# vim: set fileencoding=latin-1 :
-# -*- coding: iso-8859-1 -*-
-
-foo = True # another comment"
- (should (eq (python-info-encoding-from-cookie) 'latin-1))))
-
-(ert-deftest python-info-encoding-1 ()
- "Should return the detected encoding from cookie."
- (python-tests-with-temp-buffer
- "# vim: set fileencoding=latin-1 :
-
-foo = True # another comment"
- (should (eq (python-info-encoding) 'latin-1))))
-
-(ert-deftest python-info-encoding-2 ()
- "Should default to utf-8."
- (python-tests-with-temp-buffer
- "# No encoding for you
-
-foo = True # another comment"
- (should (eq (python-info-encoding) 'utf-8))))
-
-
-;;; Utility functions
-
-(ert-deftest python-util-goto-line-1 ()
- (python-tests-with-temp-buffer
- (concat
- "# a comment
-# another comment
-def foo(a, b, c):
- pass" (make-string 20 ?\n))
- (python-util-goto-line 10)
- (should (= (line-number-at-pos) 10))
- (python-util-goto-line 20)
- (should (= (line-number-at-pos) 20))))
-
-(ert-deftest python-util-clone-local-variables-1 ()
- (let ((buffer (generate-new-buffer
- "python-util-clone-local-variables-1"))
- (varcons
- '((python-fill-docstring-style . django)
- (python-shell-interpreter . "python")
- (python-shell-interpreter-args . "manage.py shell")
- (python-shell-prompt-regexp . "In \\[[0-9]+\\]: ")
- (python-shell-prompt-output-regexp . "Out\\[[0-9]+\\]: ")
- (python-shell-extra-pythonpaths "/home/user/pylib/")
- (python-shell-completion-setup-code
- . "from IPython.core.completerlib import module_completion")
- (python-shell-completion-string-code
- . "';'.join(get_ipython().Completer.all_completions('''%s'''))\n")
- (python-shell-virtualenv-root
- . "/home/user/.virtualenvs/project"))))
- (with-current-buffer buffer
- (kill-all-local-variables)
- (dolist (ccons varcons)
- (set (make-local-variable (car ccons)) (cdr ccons))))
- (python-tests-with-temp-buffer
- ""
- (python-util-clone-local-variables buffer)
- (dolist (ccons varcons)
- (should
- (equal (symbol-value (car ccons)) (cdr ccons)))))
- (kill-buffer buffer)))
-
-(ert-deftest python-util-strip-string-1 ()
- (should (string= (python-util-strip-string "\t\r\n str") "str"))
- (should (string= (python-util-strip-string "str \n\r") "str"))
- (should (string= (python-util-strip-string "\t\r\n str \n\r ") "str"))
- (should
- (string= (python-util-strip-string "\n str \nin \tg \n\r") "str \nin \tg"))
- (should (string= (python-util-strip-string "\n \t \n\r ") ""))
- (should (string= (python-util-strip-string "") "")))
-
-(ert-deftest python-util-forward-comment-1 ()
- (python-tests-with-temp-buffer
- (concat
- "# a comment
-# another comment
- # bad indented comment
-# more comments" (make-string 9999 ?\n))
- (python-util-forward-comment 1)
- (should (= (point) (point-max)))
- (python-util-forward-comment -1)
- (should (= (point) (point-min)))))
-
-(ert-deftest python-util-valid-regexp-p-1 ()
- (should (python-util-valid-regexp-p ""))
- (should (python-util-valid-regexp-p python-shell-prompt-regexp))
- (should (not (python-util-valid-regexp-p "\\("))))
-
-
-;;; Electricity
-
-(ert-deftest python-parens-electric-indent-1 ()
- (let ((eim electric-indent-mode))
- (unwind-protect
- (progn
- (python-tests-with-temp-buffer
- "
-from django.conf.urls import patterns, include, url
-
-from django.contrib import admin
-
-from myapp import views
-
-
-urlpatterns = patterns('',
- url(r'^$', views.index
-)
-"
- (electric-indent-mode 1)
- (python-tests-look-at "views.index")
- (end-of-line)
-
- ;; Inserting commas within the same line should leave
- ;; indentation unchanged.
- (python-tests-self-insert ",")
- (should (= (current-indentation) 4))
-
- ;; As well as any other input happening within the same
- ;; set of parens.
- (python-tests-self-insert " name='index')")
- (should (= (current-indentation) 4))
-
- ;; But a comma outside it, should trigger indentation.
- (python-tests-self-insert ",")
- (should (= (current-indentation) 23))
-
- ;; Newline indents to the first argument column
- (python-tests-self-insert "\n")
- (should (= (current-indentation) 23))
-
- ;; All this input must not change indentation
- (indent-line-to 4)
- (python-tests-self-insert "url(r'^/login$', views.login)")
- (should (= (current-indentation) 4))
-
- ;; But this comma does
- (python-tests-self-insert ",")
- (should (= (current-indentation) 23))))
- (or eim (electric-indent-mode -1)))))
-
-(ert-deftest python-triple-quote-pairing ()
- (let ((epm electric-pair-mode))
- (unwind-protect
- (progn
- (python-tests-with-temp-buffer
- "\"\"\n"
- (or epm (electric-pair-mode 1))
- (goto-char (1- (point-max)))
- (python-tests-self-insert ?\")
- (should (string= (buffer-string)
- "\"\"\"\"\"\"\n"))
- (should (= (point) 4)))
- (python-tests-with-temp-buffer
- "\n"
- (python-tests-self-insert (list ?\" ?\" ?\"))
- (should (string= (buffer-string)
- "\"\"\"\"\"\"\n"))
- (should (= (point) 4)))
- (python-tests-with-temp-buffer
- "\"\n\"\"\n"
- (goto-char (1- (point-max)))
- (python-tests-self-insert ?\")
- (should (= (point) (1- (point-max))))
- (should (string= (buffer-string)
- "\"\n\"\"\"\n"))))
- (or epm (electric-pair-mode -1)))))
-
-
-;;; Hideshow support
-
-(ert-deftest python-hideshow-hide-levels-1 ()
- "Should hide all methods when called after class start."
- (let ((enabled hs-minor-mode))
- (unwind-protect
- (progn
- (python-tests-with-temp-buffer
- "
-class SomeClass:
-
- def __init__(self, arg, kwarg=1):
- self.arg = arg
- self.kwarg = kwarg
-
- def filter(self, nums):
- def fn(item):
- return item in [self.arg, self.kwarg]
- return filter(fn, nums)
-
- def __str__(self):
- return '%s-%s' % (self.arg, self.kwarg)
-"
- (hs-minor-mode 1)
- (python-tests-look-at "class SomeClass:")
- (forward-line)
- (hs-hide-level 1)
- (should
- (string=
- (python-tests-visible-string)
- "
-class SomeClass:
-
- def __init__(self, arg, kwarg=1):
- def filter(self, nums):
- def __str__(self):"))))
- (or enabled (hs-minor-mode -1)))))
-
-(ert-deftest python-hideshow-hide-levels-2 ()
- "Should hide nested methods and parens at end of defun."
- (let ((enabled hs-minor-mode))
- (unwind-protect
- (progn
- (python-tests-with-temp-buffer
- "
-class SomeClass:
-
- def __init__(self, arg, kwarg=1):
- self.arg = arg
- self.kwarg = kwarg
-
- def filter(self, nums):
- def fn(item):
- return item in [self.arg, self.kwarg]
- return filter(fn, nums)
-
- def __str__(self):
- return '%s-%s' % (self.arg, self.kwarg)
-"
- (hs-minor-mode 1)
- (python-tests-look-at "def fn(item):")
- (hs-hide-block)
- (should
- (string=
- (python-tests-visible-string)
- "
-class SomeClass:
-
- def __init__(self, arg, kwarg=1):
- self.arg = arg
- self.kwarg = kwarg
-
- def filter(self, nums):
- def fn(item):
- return filter(fn, nums)
-
- def __str__(self):
- return '%s-%s' % (self.arg, self.kwarg)
-"))))
- (or enabled (hs-minor-mode -1)))))
-
-
-
-(provide 'python-tests)
-
-;; Local Variables:
-;; indent-tabs-mode: nil
-;; End:
-
-;;; python-tests.el ends here
diff --git a/test/automated/reftex-tests.el b/test/automated/reftex-tests.el
deleted file mode 100644
index 962e39ff38e..00000000000
--- a/test/automated/reftex-tests.el
+++ /dev/null
@@ -1,208 +0,0 @@
-;;; reftex-tests.el --- Test suite for reftex. -*- lexical-binding: t -*-
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Rüdiger Sonderfeld <ruediger@c-plusplus.de>
-;; Keywords: internal
-;; Human-Keywords: 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)
-
-;;; reftex
-(require 'reftex)
-
-;;; reftex-parse
-(require 'reftex-parse)
-
-(ert-deftest reftex-locate-bibliography-files ()
- "Test `reftex-locate-bibliography-files'."
- (let ((temp-dir (make-temp-file "reftex-bib" 'dir))
- (files '("ref1.bib" "ref2.bib"))
- (test '(("\\addbibresource{ref1.bib}\n" . ("ref1.bib"))
- ("\\\\addbibresource[label=x]{ref2.bib}\\n" . ("ref2.bib"))
- ("\\begin{document}\n\\bibliographystyle{plain}\n
-\\bibliography{ref1,ref2}\n\\end{document}" . ("ref1.bib" "ref2.bib"))))
- (reftex-bibliography-commands
- ;; Default value: See reftex-vars.el `reftex-bibliography-commands'
- '("bibliography" "nobibliography" "setupbibtex\\[.*?database="
- "addbibresource")))
- (with-temp-buffer
- (insert "test\n")
- (mapc
- (lambda (file)
- (write-region (point-min) (point-max) (expand-file-name file
- temp-dir)))
- files))
- (mapc
- (lambda (data)
- (with-temp-buffer
- (insert (car data))
- (let ((res (mapcar #'file-name-nondirectory
- (reftex-locate-bibliography-files temp-dir))))
- (should (equal res (cdr data))))))
- test)
- (delete-directory temp-dir 'recursive)))
-
-(ert-deftest reftex-what-environment-test ()
- "Test `reftex-what-environment'."
- (with-temp-buffer
- (insert "\\begin{equation}\n x=y^2\n")
- (let ((pt (point))
- pt2)
- (insert "\\end{equation}\n")
- (goto-char pt)
-
- (should (equal (reftex-what-environment 1) '("equation" . 1)))
- (should (equal (reftex-what-environment t) '(("equation" . 1))))
-
- (insert "\\begin{something}\nxxx")
- (setq pt2 (point))
- (insert "\\end{something}")
- (goto-char pt2)
- (should (equal (reftex-what-environment 1) `("something" . ,pt)))
- (should (equal (reftex-what-environment t) `(("something" . ,pt)
- ("equation" . 1))))
- (should (equal (reftex-what-environment t pt) `(("something" . ,pt))))
- (should (equal (reftex-what-environment '("equation"))
- '("equation" . 1))))))
-
-(ert-deftest reftex-roman-number-test ()
- "Test `reftex-roman-number'."
- (let ((hindu-arabic '(1 2 4 9 14 1050))
- (roman '("I" "II" "IV" "IX" "XIV" "ML")))
- (while (and hindu-arabic roman)
- (should (string= (reftex-roman-number (car hindu-arabic))
- (car roman)))
- (pop roman)
- (pop hindu-arabic))))
-
-(ert-deftest reftex-parse-from-file-test ()
- "Test `reftex-parse-from-file'."
- ;; Use file-truename to convert 8+3 aliases in $TEMP value on
- ;; MS-Windows into their long file-name equivalents, which is
- ;; necessary for the 'equal' and 'string=' comparisons below. This
- ;; also resolves any symlinks, which cannot be bad for the same
- ;; reason. (An alternative solution would be to use file-equal-p,
- ;; but I'm too lazy to do that, as one of the tests compares a
- ;; list.)
- (let* ((temp-dir (file-truename (make-temp-file "reftex-parse" 'dir)))
- (tex-file (expand-file-name "test.tex" temp-dir))
- (bib-file (expand-file-name "ref.bib" temp-dir)))
- (with-temp-buffer
- (insert
-"\\begin{document}
-\\section{test}\\label{sec:test}
-\\subsection{subtest}
-
-\\begin{align*}\\label{eq:foo}
- x &= y^2
-\\end{align*}
-
-\\bibliographystyle{plain}
-\\bibliography{ref}
-\\end{document}")
- (write-region (point-min) (point-max) tex-file))
- (with-temp-buffer
- (insert "test\n")
- (write-region (point-min) (point-max) bib-file))
- (reftex-ensure-compiled-variables)
- (let ((parsed (reftex-parse-from-file tex-file nil temp-dir)))
- (should (equal (car parsed) `(eof ,tex-file)))
- (pop parsed)
- (while parsed
- (let ((entry (pop parsed)))
- (cond
- ((eq (car entry) 'bib)
- (should (string= (cadr entry) bib-file)))
- ((eq (car entry) 'toc)) ;; ...
- ((string= (car entry) "eq:foo"))
- ((string= (car entry) "sec:test"))
- ((eq (car entry) 'bof)
- (should (string= (cadr entry) tex-file))
- (should (null parsed)))
- (t (should-not t)))))
- (delete-directory temp-dir 'recursive))))
-
-;;; reftex-cite
-(require 'reftex-cite)
-
-(ert-deftest reftex-parse-bibtex-entry-test ()
- "Test `reftex-parse-bibtex-entry'."
- (let ((entry "@Book{Stallman12,
- author = {Richard Stallman\net al.},
- title = {The Emacs Editor},
- publisher = {GNU Press},
- year = 2012,
- edition = {17th},
- note = {Updated for Emacs Version 24.2}
-}")
- (check (function
- (lambda (parsed)
- (should (string= (reftex-get-bib-field "&key" parsed)
- "Stallman12"))
- (should (string= (reftex-get-bib-field "&type" parsed)
- "book"))
- (should (string= (reftex-get-bib-field "author" parsed)
- "Richard Stallman et al."))
- (should (string= (reftex-get-bib-field "title" parsed)
- "The Emacs Editor"))
- (should (string= (reftex-get-bib-field "publisher" parsed)
- "GNU Press"))
- (should (string= (reftex-get-bib-field "year" parsed)
- "2012"))
- (should (string= (reftex-get-bib-field "edition" parsed)
- "17th"))
- (should (string= (reftex-get-bib-field "note" parsed)
- "Updated for Emacs Version 24.2"))))))
- (funcall check (reftex-parse-bibtex-entry entry))
- (with-temp-buffer
- (insert entry)
- (funcall check (reftex-parse-bibtex-entry nil (point-min)
- (point-max))))))
-
-(ert-deftest reftex-get-bib-names-test ()
- "Test `reftex-get-bib-names'."
- (let ((entry (reftex-parse-bibtex-entry "@article{Foo123,
- author = {Jane Roe and\tJohn Doe and W. Public},
-}")))
- (should (equal (reftex-get-bib-names "author" entry)
- '("Jane Roe" "John Doe" "Public"))))
- (let ((entry (reftex-parse-bibtex-entry "@article{Foo123,
- editor = {Jane Roe and\tJohn Doe and W. Public},
-}")))
- (should (equal (reftex-get-bib-names "author" entry)
- '("Jane Roe" "John Doe" "Public")))))
-
-(ert-deftest reftex-format-citation-test ()
- "Test `reftex-format-citation'."
- (let ((entry (reftex-parse-bibtex-entry
-"@article{Foo13,
- author = {Jane Roe and John Doe and Jane Q. Taxpayer},
- title = {Some Article},
- journal = {Some Journal},
- year = 2013,
- pages = {1--333}
-}")))
- (should (string= (reftex-format-citation entry nil) "\\cite{Foo13}"))
- (should (string= (reftex-format-citation entry "%l:%A:%y:%t %j %P %a")
- "Foo13:Jane Roe:2013:Some Article Some Journal 1 Jane Roe, John Doe \\& Jane Taxpayer"))))
-
-(provide 'reftex-tests)
-;;; reftex-tests.el ends here.
diff --git a/test/automated/regexp-tests.el b/test/automated/regexp-tests.el
deleted file mode 100644
index ee177b3e2e9..00000000000
--- a/test/automated/regexp-tests.el
+++ /dev/null
@@ -1,33 +0,0 @@
-;;; regexp-tests.el --- Test suite for regular expression handling.
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
-;; Keywords: internal
-;; Human-Keywords: 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 'regexp-opt)
-
-(ert-deftest regexp-test-regexp-opt ()
- "Test the `compilation-error-regexp-alist' regexps.
-The test data is in `compile-tests--test-regexps-data'."
- (should (string-match (regexp-opt-charset '(?^)) "a^b")))
-
-;;; regexp-tests.el ends here.
diff --git a/test/automated/replace-tests.el b/test/automated/replace-tests.el
deleted file mode 100644
index f4e474bcafd..00000000000
--- a/test/automated/replace-tests.el
+++ /dev/null
@@ -1,35 +0,0 @@
-;;; replace-tests.el --- tests for replace.el.
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; 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)))))))
-
-;;; replace-tests.el ends here
diff --git a/test/automated/ruby-mode-tests.el b/test/automated/ruby-mode-tests.el
deleted file mode 100644
index 065aa56a4d5..00000000000
--- a/test/automated/ruby-mode-tests.el
+++ /dev/null
@@ -1,713 +0,0 @@
-;;; ruby-mode-tests.el --- Test suite for ruby-mode
-
-;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'ert)
-(require 'ruby-mode)
-
-(defmacro ruby-with-temp-buffer (contents &rest body)
- (declare (indent 1) (debug t))
- `(with-temp-buffer
- (insert ,contents)
- (ruby-mode)
- ,@body))
-
-(defun ruby-should-indent (content column)
- "Assert indentation COLUMN on the last line of CONTENT."
- (ruby-with-temp-buffer content
- (indent-according-to-mode)
- (should (= (current-indentation) column))))
-
-(defun ruby-should-indent-buffer (expected content)
- "Assert that CONTENT turns into EXPECTED after the buffer is re-indented.
-
-The whitespace before and including \"|\" on each line is removed."
- (ruby-with-temp-buffer (ruby-test-string content)
- (indent-region (point-min) (point-max))
- (should (string= (ruby-test-string expected) (buffer-string)))))
-
-(defun ruby-test-string (s &rest args)
- (apply 'format (replace-regexp-in-string "^[ \t]*|" "" s) args))
-
-(defun ruby-assert-state (content index value &optional point)
- "Assert syntax state values at the end of CONTENT.
-
-VALUES-PLIST is a list with alternating index and value elements."
- (ruby-with-temp-buffer content
- (when point (goto-char point))
- (syntax-propertize (point))
- (should (eq (nth index
- (parse-partial-sexp (point-min) (point)))
- value))))
-
-(defun ruby-assert-face (content pos face)
- (ruby-with-temp-buffer content
- (font-lock-ensure nil nil)
- (should (eq face (get-text-property pos 'face)))))
-
-(ert-deftest ruby-indent-after-symbol-made-from-string-interpolation ()
- "It can indent the line after symbol made using string interpolation."
- (ruby-should-indent "def foo(suffix)\n :\"bar#{suffix}\"\n"
- ruby-indent-level))
-
-(ert-deftest ruby-indent-after-js-style-symbol-with-block-beg-name ()
- "JS-style hash symbol can have keyword name."
- (ruby-should-indent "link_to \"home\", home_path, class: \"foo\"\n" 0))
-
-(ert-deftest ruby-discern-singleton-class-from-heredoc ()
- (ruby-assert-state "foo <<asd\n" 3 ?\n)
- (ruby-assert-state "class <<asd\n" 3 nil))
-
-(ert-deftest ruby-heredoc-font-lock ()
- (let ((s "foo <<eos.gsub('^ *', '')"))
- (ruby-assert-face s 9 font-lock-string-face)
- (ruby-assert-face s 10 nil)))
-
-(ert-deftest ruby-singleton-class-no-heredoc-font-lock ()
- (ruby-assert-face "class<<a" 8 nil))
-
-(ert-deftest ruby-heredoc-highlights-interpolations ()
- (ruby-assert-face "s = <<EOS\n #{foo}\nEOS" 15 font-lock-variable-name-face))
-
-(ert-deftest ruby-no-heredoc-inside-quotes ()
- (ruby-assert-state "\"<<\", \"\",\nfoo" 3 nil))
-
-(ert-deftest ruby-exit!-font-lock ()
- (ruby-assert-face "exit!" 5 font-lock-builtin-face))
-
-(ert-deftest ruby-deep-indent ()
- (let ((ruby-deep-arglist nil)
- (ruby-deep-indent-paren '(?\( ?\{ ?\[ ?\] t)))
- (ruby-should-indent "foo = [1,\n2" 7)
- (ruby-should-indent "foo = {a: b,\nc: d" 7)
- (ruby-should-indent "foo(a,\nb" 4)))
-
-(ert-deftest ruby-deep-indent-disabled ()
- (let ((ruby-deep-arglist nil)
- (ruby-deep-indent-paren nil))
- (ruby-should-indent "foo = [\n1" ruby-indent-level)
- (ruby-should-indent "foo = {\na: b" ruby-indent-level)
- (ruby-should-indent "foo(\na" ruby-indent-level)))
-
-(ert-deftest ruby-indent-after-keyword-in-a-string ()
- (ruby-should-indent "a = \"abc\nif\"\n " 0)
- (ruby-should-indent "a = %w[abc\n def]\n " 0)
- (ruby-should-indent "a = \"abc\n def\"\n " 0))
-
-(ert-deftest ruby-regexp-doesnt-start-in-string ()
- (ruby-assert-state "'(/', /\d+/" 3 nil))
-
-(ert-deftest ruby-regexp-starts-after-string ()
- (ruby-assert-state "'(/', /\d+/" 3 ?/ 8))
-
-(ert-deftest ruby-regexp-interpolation-is-highlighted ()
- (ruby-assert-face "/#{foobs}/" 4 font-lock-variable-name-face))
-
-(ert-deftest ruby-regexp-skips-over-interpolation ()
- (ruby-assert-state "/#{foobs.join('/')}/" 3 nil))
-
-(ert-deftest ruby-regexp-continues-till-end-when-unclosed ()
- (ruby-assert-state "/bars" 3 ?/))
-
-(ert-deftest ruby-regexp-can-be-multiline ()
- (ruby-assert-state "/bars\ntees # toots \nfoos/" 3 nil))
-
-(ert-deftest ruby-slash-symbol-is-not-mistaken-for-regexp ()
- (ruby-assert-state ":/" 3 nil))
-
-(ert-deftest ruby-slash-char-literal-is-not-mistaken-for-regexp ()
- (ruby-assert-state "?/" 3 nil))
-
-(ert-deftest ruby-indent-simple ()
- (ruby-should-indent-buffer
- "if foo
- | bar
- |end
- |zot
- |"
- "if foo
- |bar
- | end
- | zot
- |"))
-
-(ert-deftest ruby-indent-keyword-label ()
- (ruby-should-indent-buffer
- "bar(class: XXX) do
- | foo
- |end
- |bar
- |"
- "bar(class: XXX) do
- | foo
- | end
- | bar
- |"))
-
-(ert-deftest ruby-indent-method-with-question-mark ()
- (ruby-should-indent-buffer
- "if x.is_a?(XXX)
- | foo
- |end
- |"
- "if x.is_a?(XXX)
- | foo
- | end
- |"))
-
-(ert-deftest ruby-indent-expr-in-regexp ()
- (ruby-should-indent-buffer
- "if /#{foo}/ =~ s
- | x = 1
- |end
- |"
- "if /#{foo}/ =~ s
- | x = 1
- | end
- |"))
-
-(ert-deftest ruby-indent-singleton-class ()
- (ruby-should-indent-buffer
- "class<<bar
- | foo
- |end
- |"
- "class<<bar
- |foo
- | end
- |"))
-
-(ert-deftest ruby-indent-inside-heredoc-after-operator ()
- (ruby-should-indent-buffer
- "b=<<eos
- | 42"
- "b=<<eos
- | 42"))
-
-(ert-deftest ruby-indent-inside-heredoc-after-space ()
- (ruby-should-indent-buffer
- "foo <<eos.gsub(' ', '*')
- | 42"
- "foo <<eos.gsub(' ', '*')
- | 42"))
-
-(ert-deftest ruby-indent-array-literal ()
- (let ((ruby-deep-indent-paren nil))
- (ruby-should-indent-buffer
- "foo = [
- | bar
- |]
- |"
- "foo = [
- | bar
- | ]
- |"))
- (ruby-should-indent-buffer
- "foo do
- | [bar]
- |end
- |"
- "foo do
- |[bar]
- | end
- |"))
-
-(ert-deftest ruby-indent-begin-end ()
- (ruby-should-indent-buffer
- "begin
- | a[b]
- |end
- |"
- "begin
- | a[b]
- | end
- |"))
-
-(ert-deftest ruby-indent-array-after-paren-and-space ()
- (ruby-should-indent-buffer
- "class A
- | def foo
- | foo( [])
- | end
- |end
- |"
- "class A
- | def foo
- |foo( [])
- |end
- | end
- |"))
-
-(ert-deftest ruby-indent-after-block-in-continued-expression ()
- (ruby-should-indent-buffer
- "var =
- | begin
- | val
- | end
- |statement"
- "var =
- |begin
- |val
- |end
- |statement"))
-
-(ert-deftest ruby-indent-spread-args-in-parens ()
- (let ((ruby-deep-indent-paren '(?\()))
- (ruby-should-indent-buffer
- "foo(1,
- | 2,
- | 3)
- |"
- "foo(1,
- | 2,
- | 3)
- |")))
-
-(ert-deftest ruby-align-to-stmt-keywords-t ()
- (let ((ruby-align-to-stmt-keywords t))
- (ruby-should-indent-buffer
- "foo = if bar?
- | 1
- |else
- | 2
- |end
- |
- |foo || begin
- | bar
- |end
- |
- |foo ||
- | begin
- | bar
- | end
- |"
- "foo = if bar?
- | 1
- |else
- | 2
- | end
- |
- | foo || begin
- | bar
- |end
- |
- | foo ||
- | begin
- |bar
- | end
- |")
- ))
-
-(ert-deftest ruby-align-to-stmt-keywords-case ()
- (let ((ruby-align-to-stmt-keywords '(case)))
- (ruby-should-indent-buffer
- "b = case a
- |when 13
- | 6
- |else
- | 42
- |end"
- "b = case a
- | when 13
- | 6
- | else
- | 42
- | end")))
-
-(ert-deftest ruby-align-chained-calls ()
- (let ((ruby-align-chained-calls t))
- (ruby-should-indent-buffer
- "one.two.three
- | .four
- |
- |my_array.select { |str| str.size > 5 }
- | .map { |str| str.downcase }"
- "one.two.three
- | .four
- |
- |my_array.select { |str| str.size > 5 }
- | .map { |str| str.downcase }")))
-
-(ert-deftest ruby-move-to-block-stops-at-indentation ()
- (ruby-with-temp-buffer "def f\nend"
- (beginning-of-line)
- (ruby-move-to-block -1)
- (should (looking-at "^def"))))
-
-(ert-deftest ruby-toggle-block-to-do-end ()
- (ruby-with-temp-buffer "foo {|b|\n}"
- (beginning-of-line)
- (ruby-toggle-block)
- (should (string= "foo do |b|\nend" (buffer-string)))))
-
-(ert-deftest ruby-toggle-block-to-brace ()
- (let ((pairs '((17 . "foo { |b| b + 2 }")
- (16 . "foo { |b|\n b + 2\n}"))))
- (dolist (pair pairs)
- (with-temp-buffer
- (let ((fill-column (car pair)))
- (insert "foo do |b|\n b + 2\nend")
- (ruby-mode)
- (beginning-of-line)
- (ruby-toggle-block)
- (should (string= (cdr pair) (buffer-string))))))))
-
-(ert-deftest ruby-toggle-block-to-multiline ()
- (ruby-with-temp-buffer "foo {|b| b + 1}"
- (beginning-of-line)
- (ruby-toggle-block)
- (should (string= "foo do |b|\n b + 1\nend" (buffer-string)))))
-
-(ert-deftest ruby-toggle-block-with-interpolation ()
- (ruby-with-temp-buffer "foo do\n \"#{bar}\"\nend"
- (beginning-of-line)
- (ruby-toggle-block)
- (should (string= "foo { \"#{bar}\" }" (buffer-string)))))
-
-(ert-deftest ruby-recognize-symbols-starting-with-at-character ()
- (ruby-assert-face ":@abc" 3 font-lock-constant-face))
-
-(ert-deftest ruby-hash-character-not-interpolation ()
- (ruby-assert-face "\"This is #{interpolation}\"" 15
- font-lock-variable-name-face)
- (ruby-assert-face "\"This is \\#{no interpolation} despite the #\""
- 15 font-lock-string-face)
- (ruby-assert-face "\n#@comment, not ruby code" 5 font-lock-comment-face)
- (ruby-assert-state "\n#@comment, not ruby code" 4 t)
- (ruby-assert-face "# A comment cannot have #{an interpolation} in it"
- 30 font-lock-comment-face)
- (ruby-assert-face "# #{comment}\n \"#{interpolation}\"" 16
- font-lock-variable-name-face))
-
-(ert-deftest ruby-interpolation-suppresses-quotes-inside ()
- (let ((s "\"<ul><li>#{@files.join(\"</li><li>\")}</li></ul>\""))
- (ruby-assert-state s 8 nil)
- (ruby-assert-face s 9 font-lock-string-face)
- (ruby-assert-face s 10 font-lock-variable-name-face)
- (ruby-assert-face s 41 font-lock-string-face)))
-
-(ert-deftest ruby-interpolation-suppresses-one-double-quote ()
- (let ((s "\"foo#{'\"'}\""))
- (ruby-assert-state s 8 nil)
- (ruby-assert-face s 8 font-lock-variable-name-face)
- (ruby-assert-face s 11 font-lock-string-face)))
-
-(ert-deftest ruby-interpolation-suppresses-one-backtick ()
- (let ((s "`as#{'`'}das`"))
- (ruby-assert-state s 8 nil)))
-
-(ert-deftest ruby-interpolation-keeps-non-quote-syntax ()
- (let ((s "\"foo#{baz.tee}bar\""))
- (ruby-with-temp-buffer s
- (goto-char (point-min))
- (ruby-mode)
- (syntax-propertize (point-max))
- (search-forward "tee")
- (should (string= (thing-at-point 'symbol) "tee")))))
-
-(ert-deftest ruby-interpolation-inside-percent-literal ()
- (let ((s "%( #{boo} )"))
- (ruby-assert-face s 1 font-lock-string-face)
- (ruby-assert-face s 4 font-lock-variable-name-face)
- (ruby-assert-face s 10 font-lock-string-face)
- (ruby-assert-state s 8 nil)))
-
-(ert-deftest ruby-interpolation-inside-percent-literal-with-paren ()
- :expected-result :failed
- (let ((s "%(^#{\")\"}^)"))
- (ruby-assert-face s 3 font-lock-string-face)
- (ruby-assert-face s 4 font-lock-variable-name-face)
- (ruby-assert-face s 10 font-lock-string-face)
- ;; It's confused by the closing paren in the middle.
- (ruby-assert-state s 8 nil)))
-
-(ert-deftest ruby-interpolation-inside-double-quoted-percent-literals ()
- (ruby-assert-face "%Q{foo #@bar}" 8 font-lock-variable-name-face)
- (ruby-assert-face "%W{foo #@bar}" 8 font-lock-variable-name-face)
- (ruby-assert-face "%r{foo #@bar}" 8 font-lock-variable-name-face)
- (ruby-assert-face "%x{foo #@bar}" 8 font-lock-variable-name-face))
-
-(ert-deftest ruby-no-interpolation-in-single-quoted-literals ()
- (ruby-assert-face "'foo #@bar'" 7 font-lock-string-face)
- (ruby-assert-face "%q{foo #@bar}" 8 font-lock-string-face)
- (ruby-assert-face "%w{foo #@bar}" 8 font-lock-string-face)
- (ruby-assert-face "%s{foo #@bar}" 8 font-lock-string-face))
-
-(ert-deftest ruby-interpolation-after-dollar-sign ()
- (ruby-assert-face "\"$#{balance}\"" 2 'font-lock-string-face)
- (ruby-assert-face "\"$#{balance}\"" 3 'font-lock-variable-name-face))
-
-(ert-deftest ruby-no-unknown-percent-literals ()
- ;; No folding of case.
- (ruby-assert-face "%S{foo}" 4 nil)
- (ruby-assert-face "%R{foo}" 4 nil))
-
-(ert-deftest ruby-add-log-current-method-examples ()
- (let ((pairs '(("foo" . "#foo")
- ("C.foo" . ".foo")
- ("self.foo" . ".foo"))))
- (dolist (pair pairs)
- (let ((name (car pair))
- (value (cdr pair)))
- (ruby-with-temp-buffer (ruby-test-string
- "module M
- | class C
- | def %s
- | _
- | end
- | end
- |end"
- name)
- (search-backward "_")
- (forward-line)
- (should (string= (ruby-add-log-current-method)
- (format "M::C%s" value))))))))
-
-(ert-deftest ruby-add-log-current-method-outside-of-method ()
- (ruby-with-temp-buffer (ruby-test-string
- "module M
- | class C
- | def foo
- | end
- | _
- | end
- |end")
- (search-backward "_")
- (should (string= (ruby-add-log-current-method)"M::C"))))
-
-(ert-deftest ruby-add-log-current-method-in-singleton-class ()
- (ruby-with-temp-buffer (ruby-test-string
- "class C
- | class << self
- | def foo
- | _
- | end
- | end
- |end")
- (search-backward "_")
- (should (string= (ruby-add-log-current-method) "C.foo"))))
-
-(ert-deftest ruby-add-log-current-method-namespace-shorthand ()
- (ruby-with-temp-buffer (ruby-test-string
- "class C::D
- | def foo
- | _
- | end
- |end")
- (search-backward "_")
- (should (string= (ruby-add-log-current-method) "C::D#foo"))))
-
-(ert-deftest ruby-add-log-current-method-after-inner-class ()
- (ruby-with-temp-buffer (ruby-test-string
- "module M
- | class C
- | class D
- | end
- | def foo
- | _
- | end
- | end
- |end")
- (search-backward "_")
- (should (string= (ruby-add-log-current-method) "M::C#foo"))))
-
-(defvar ruby-block-test-example
- (ruby-test-string
- "class C
- | def foo
- | 1
- | end
- |
- | def bar
- | 2
- | end
- |
- | def baz
- |some do
- |3
- | end
- | end
- |end"))
-
-(defmacro ruby-deftest-move-to-block (name &rest body)
- (declare (indent defun))
- `(ert-deftest ,(intern (format "ruby-move-to-block-%s" name)) ()
- (with-temp-buffer
- (insert ruby-block-test-example)
- (ruby-mode)
- (goto-char (point-min))
- ,@body)))
-
-(ruby-deftest-move-to-block works-on-do
- (forward-line 10)
- (ruby-end-of-block)
- (should (= 13 (line-number-at-pos)))
- (ruby-beginning-of-block)
- (should (= 11 (line-number-at-pos))))
-
-(ruby-deftest-move-to-block zero-is-noop
- (forward-line 4)
- (ruby-move-to-block 0)
- (should (= 5 (line-number-at-pos))))
-
-(ruby-deftest-move-to-block ok-with-three
- (forward-line 1)
- (ruby-move-to-block 3)
- (should (= 14 (line-number-at-pos))))
-
-(ruby-deftest-move-to-block ok-with-minus-two
- (forward-line 9)
- (ruby-move-to-block -2)
- (should (= 2 (line-number-at-pos))))
-
-(ert-deftest ruby-move-to-block-skips-percent-literal ()
- (dolist (s (list (ruby-test-string
- "foo do
- | a = %%w(
- | def yaa
- | )
- |end")
- (ruby-test-string
- "foo do
- | a = %%w|
- | end
- | |
- |end")))
- (ruby-with-temp-buffer s
- (goto-char (point-min))
- (ruby-end-of-block)
- (should (= 5 (line-number-at-pos)))
- (ruby-beginning-of-block)
- (should (= 1 (line-number-at-pos))))))
-
-(ert-deftest ruby-move-to-block-skips-heredoc ()
- (ruby-with-temp-buffer
- (ruby-test-string
- "if something_wrong?
- | ActiveSupport::Deprecation.warn(<<-eowarn)
- | boo hoo
- | end
- | eowarn
- |end")
- (goto-char (point-min))
- (ruby-end-of-block)
- (should (= 6 (line-number-at-pos)))
- (ruby-beginning-of-block)
- (should (= 1 (line-number-at-pos)))))
-
-(ert-deftest ruby-move-to-block-does-not-fold-case ()
- (ruby-with-temp-buffer
- (ruby-test-string
- "foo do
- | Module.to_s
- |end")
- (let ((case-fold-search t))
- (ruby-beginning-of-block))
- (should (= 1 (line-number-at-pos)))))
-
-(ert-deftest ruby-move-to-block-moves-from-else-to-if ()
- (ruby-with-temp-buffer (ruby-test-string
- "if true
- | nested_block do
- | end
- |else
- |end")
- (goto-char (point-min))
- (forward-line 3)
- (ruby-beginning-of-block)
- (should (= 1 (line-number-at-pos)))))
-
-(ert-deftest ruby-beginning-of-defun-does-not-fold-case ()
- (ruby-with-temp-buffer
- (ruby-test-string
- "class C
- | def bar
- | Class.to_s
- | end
- |end")
- (goto-char (point-min))
- (forward-line 3)
- (let ((case-fold-search t))
- (beginning-of-defun))
- (should (= 2 (line-number-at-pos)))))
-
-(ert-deftest ruby-end-of-defun-skips-to-next-line-after-the-method ()
- (ruby-with-temp-buffer
- (ruby-test-string
- "class D
- | def tee
- | 'ho hum'
- | end
- |end")
- (goto-char (point-min))
- (forward-line 1)
- (end-of-defun)
- (should (= 5 (line-number-at-pos)))))
-
-(defvar ruby-sexp-test-example
- (ruby-test-string
- "class C
- | def foo
- | self.end
- | D.new.class
- | [1, 2, 3].map do |i|
- | i + 1
- | end.sum
- | end
- |end"))
-
-(ert-deftest ruby-forward-sexp-skips-method-calls-with-keyword-names ()
- (ruby-with-temp-buffer ruby-sexp-test-example
- (goto-line 2)
- (ruby-forward-sexp)
- (should (= 8 (line-number-at-pos)))))
-
-(ert-deftest ruby-backward-sexp-skips-method-calls-with-keyword-names ()
- (ruby-with-temp-buffer ruby-sexp-test-example
- (goto-line 8)
- (end-of-line)
- (ruby-backward-sexp)
- (should (= 2 (line-number-at-pos)))))
-
-(ert-deftest ruby--insert-coding-comment-ruby-style ()
- (with-temp-buffer
- (let ((ruby-encoding-magic-comment-style 'ruby))
- (ruby--insert-coding-comment "utf-8")
- (should (string= "# coding: utf-8\n" (buffer-string))))))
-
-(ert-deftest ruby--insert-coding-comment-emacs-style ()
- (with-temp-buffer
- (let ((ruby-encoding-magic-comment-style 'emacs))
- (ruby--insert-coding-comment "utf-8")
- (should (string= "# -*- coding: utf-8 -*-\n" (buffer-string))))))
-
-(ert-deftest ruby--insert-coding-comment-custom-style ()
- (with-temp-buffer
- (let ((ruby-encoding-magic-comment-style 'custom)
- (ruby-custom-encoding-magic-comment-template "# encoding: %s\n"))
- (ruby--insert-coding-comment "utf-8")
- (should (string= "# encoding: utf-8\n\n" (buffer-string))))))
-
-
-(provide 'ruby-mode-tests)
-
-;;; ruby-mode-tests.el ends here
diff --git a/test/automated/sasl-scram-rfc-tests.el b/test/automated/sasl-scram-rfc-tests.el
deleted file mode 100644
index 46b139b21a7..00000000000
--- a/test/automated/sasl-scram-rfc-tests.el
+++ /dev/null
@@ -1,50 +0,0 @@
-;;; sasl-scram-rfc-tests.el --- tests for SCRAM-SHA-1 -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
-
-;; Author: Magnus Henoch <magnus.henoch@gmail.com>
-
-;; 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/>.
-
-;;; Commentary:
-
-;; Test cases from RFC 5802.
-
-;;; Code:
-
-(require 'sasl)
-(require 'sasl-scram-rfc)
-
-(ert-deftest sasl-scram-sha-1-test ()
- ;; The following strings are taken from section 5 of RFC 5802.
- (let ((client
- (sasl-make-client (sasl-find-mechanism '("SCRAM-SHA-1"))
- "user"
- "imap"
- "localhost"))
- (data "r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,i=4096")
- (c-nonce "fyko+d2lbbFgONRv9qkxdawL")
- (sasl-read-passphrase
- (lambda (_prompt) (copy-sequence "pencil"))))
- (sasl-client-set-property client 'c-nonce c-nonce)
- (should
- (equal
- (sasl-scram-sha-1-client-final-message client (vector nil data))
- "c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts="))
-
- ;; This should not throw an error:
- (sasl-scram-sha-1-authenticate-server client (vector nil "v=rmF9pqV8S7suAoZWja4dJRkFsKQ=
-"))))
-
-;;; sasl-scram-rfc-tests.el ends here
diff --git a/test/automated/seq-tests.el b/test/automated/seq-tests.el
deleted file mode 100644
index 5d936828fbb..00000000000
--- a/test/automated/seq-tests.el
+++ /dev/null
@@ -1,341 +0,0 @@
-;;; seq-tests.el --- Tests for sequences.el
-
-;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
-
-;; Author: Nicolas Petton <nicolas@petton.fr>
-;; Maintainer: emacs-devel@gnu.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/>.
-
-;;; Commentary:
-
-;; Tests for sequences.el
-
-;;; Code:
-
-(require 'ert)
-(require 'seq)
-
-(defmacro with-test-sequences (spec &rest body)
- "Successively bind VAR to a list, vector, and string built from SEQ.
-Evaluate BODY for each created sequence.
-
-\(fn (var seq) body)"
- (declare (indent 1) (debug ((symbolp form) body)))
- (let ((initial-seq (make-symbol "initial-seq")))
- `(let ((,initial-seq ,(cadr spec)))
- ,@(mapcar (lambda (s)
- `(let ((,(car spec) (apply (function ,s) ,initial-seq)))
- ,@body))
- '(list vector string)))))
-
-(defun same-contents-p (seq1 seq2)
- "Return t if SEQ1 and SEQ2 have the same contents, nil otherwise."
- (equal (append seq1 '()) (append seq2 '())))
-
-(defun test-sequences-evenp (integer)
- "Return t if INTEGER is even."
- (eq (logand integer 1) 0))
-
-(defun test-sequences-oddp (integer)
- "Return t if INTEGER is odd."
- (not (test-sequences-evenp integer)))
-
-(ert-deftest test-setf-seq-elt ()
- (with-test-sequences (seq '(1 2 3))
- (setf (seq-elt seq 1) 4)
- (should (= 4 (seq-elt seq 1)))))
-
-(ert-deftest test-seq-drop ()
- (with-test-sequences (seq '(1 2 3 4))
- (should (equal (seq-drop seq 0) seq))
- (should (equal (seq-drop seq 1) (seq-subseq seq 1)))
- (should (equal (seq-drop seq 2) (seq-subseq seq 2)))
- (should (seq-empty-p (seq-drop seq 4)))
- (should (seq-empty-p (seq-drop seq 10))))
- (with-test-sequences (seq '())
- (should (seq-empty-p (seq-drop seq 0)))
- (should (seq-empty-p (seq-drop seq 1)))))
-
-(ert-deftest test-seq-take ()
- (with-test-sequences (seq '(2 3 4 5))
- (should (seq-empty-p (seq-take seq 0)))
- (should (= (seq-length (seq-take seq 1)) 1))
- (should (= (seq-elt (seq-take seq 1) 0) 2))
- (should (same-contents-p (seq-take seq 3) '(2 3 4)))
- (should (equal (seq-take seq 10) seq))))
-
-(ert-deftest test-seq-drop-while ()
- (with-test-sequences (seq '(1 3 2 4))
- (should (equal (seq-drop-while #'test-sequences-oddp seq)
- (seq-drop seq 2)))
- (should (equal (seq-drop-while #'test-sequences-evenp seq)
- seq))
- (should (seq-empty-p (seq-drop-while #'numberp seq))))
- (with-test-sequences (seq '())
- (should (seq-empty-p (seq-drop-while #'test-sequences-oddp seq)))))
-
-(ert-deftest test-seq-take-while ()
- (with-test-sequences (seq '(1 3 2 4))
- (should (equal (seq-take-while #'test-sequences-oddp seq)
- (seq-take seq 2)))
- (should (seq-empty-p (seq-take-while #'test-sequences-evenp seq)))
- (should (equal (seq-take-while #'numberp seq) seq)))
- (with-test-sequences (seq '())
- (should (seq-empty-p (seq-take-while #'test-sequences-oddp seq)))))
-
-(ert-deftest test-seq-filter ()
- (with-test-sequences (seq '(6 7 8 9 10))
- (should (equal (seq-filter #'test-sequences-evenp seq) '(6 8 10)))
- (should (equal (seq-filter #'test-sequences-oddp seq) '(7 9)))
- (should (equal (seq-filter (lambda (elt) nil) seq) '())))
- (with-test-sequences (seq '())
- (should (equal (seq-filter #'test-sequences-evenp seq) '()))))
-
-(ert-deftest test-seq-remove ()
- (with-test-sequences (seq '(6 7 8 9 10))
- (should (equal (seq-remove #'test-sequences-evenp seq) '(7 9)))
- (should (equal (seq-remove #'test-sequences-oddp seq) '(6 8 10)))
- (should (same-contents-p (seq-remove (lambda (elt) nil) seq) seq)))
- (with-test-sequences (seq '())
- (should (equal (seq-remove #'test-sequences-evenp seq) '()))))
-
-(ert-deftest test-seq-count ()
- (with-test-sequences (seq '(6 7 8 9 10))
- (should (equal (seq-count #'test-sequences-evenp seq) 3))
- (should (equal (seq-count #'test-sequences-oddp seq) 2))
- (should (equal (seq-count (lambda (elt) nil) seq) 0)))
- (with-test-sequences (seq '())
- (should (equal (seq-count #'test-sequences-evenp seq) 0))))
-
-(ert-deftest test-seq-reduce ()
- (with-test-sequences (seq '(1 2 3 4))
- (should (= (seq-reduce #'+ seq 0) 10))
- (should (= (seq-reduce #'+ seq 5) 15)))
- (with-test-sequences (seq '())
- (should (eq (seq-reduce #'+ seq 0) 0))
- (should (eq (seq-reduce #'+ seq 7) 7))))
-
-(ert-deftest test-seq-some ()
- (with-test-sequences (seq '(4 3 2 1))
- (should (seq-some #'test-sequences-evenp seq))
- (should (seq-some #'test-sequences-oddp seq))
- (should-not (seq-some (lambda (elt) (> elt 10)) seq)))
- (with-test-sequences (seq '())
- (should-not (seq-some #'test-sequences-oddp seq)))
- (should (seq-some #'null '(1 nil 2))))
-
-(ert-deftest test-seq-find ()
- (with-test-sequences (seq '(4 3 2 1))
- (should (= 4 (seq-find #'test-sequences-evenp seq)))
- (should (= 3 (seq-find #'test-sequences-oddp seq)))
- (should-not (seq-find (lambda (elt) (> elt 10)) seq)))
- (should-not (seq-find #'null '(1 nil 2)))
- (should-not (seq-find #'null '(1 nil 2) t))
- (should-not (seq-find #'null '(1 2 3)))
- (should (seq-find #'null '(1 2 3) 'sentinel)))
-
-(ert-deftest test-seq-contains ()
- (with-test-sequences (seq '(3 4 5 6))
- (should (seq-contains seq 3))
- (should-not (seq-contains seq 7)))
- (with-test-sequences (seq '())
- (should-not (seq-contains seq 3))
- (should-not (seq-contains seq nil))))
-
-(ert-deftest test-seq-every-p ()
- (with-test-sequences (seq '(43 54 22 1))
- (should (seq-every-p (lambda (elt) t) seq))
- (should-not (seq-every-p #'test-sequences-oddp seq))
- (should-not (seq-every-p #'test-sequences-evenp seq)))
- (with-test-sequences (seq '(42 54 22 2))
- (should (seq-every-p #'test-sequences-evenp seq))
- (should-not (seq-every-p #'test-sequences-oddp seq)))
- (with-test-sequences (seq '())
- (should (seq-every-p #'identity seq))
- (should (seq-every-p #'test-sequences-evenp seq))))
-
-(ert-deftest test-seq-empty-p ()
- (with-test-sequences (seq '(0))
- (should-not (seq-empty-p seq)))
- (with-test-sequences (seq '(0 1 2))
- (should-not (seq-empty-p seq)))
- (with-test-sequences (seq '())
- (should (seq-empty-p seq))))
-
-(ert-deftest test-seq-sort ()
- (should (equal (seq-sort #'< "cbaf") "abcf"))
- (should (equal (seq-sort #'< '(2 1 9 4)) '(1 2 4 9)))
- (should (equal (seq-sort #'< [2 1 9 4]) [1 2 4 9]))
- (should (equal (seq-sort #'< "") "")))
-
-(ert-deftest test-seq-uniq ()
- (with-test-sequences (seq '(2 4 6 8 6 4 3))
- (should (equal (seq-uniq seq) '(2 4 6 8 3))))
- (with-test-sequences (seq '(3 3 3 3 3))
- (should (equal (seq-uniq seq) '(3))))
- (with-test-sequences (seq '())
- (should (equal (seq-uniq seq) '()))))
-
-(ert-deftest test-seq-subseq ()
- (with-test-sequences (seq '(2 3 4 5))
- (should (equal (seq-subseq seq 0 4) seq))
- (should (same-contents-p (seq-subseq seq 2 4) '(4 5)))
- (should (same-contents-p (seq-subseq seq 1 3) '(3 4)))
- (should (same-contents-p (seq-subseq seq 1 -1) '(3 4))))
- (should (vectorp (seq-subseq [2 3 4 5] 2)))
- (should (stringp (seq-subseq "foo" 2 3)))
- (should (listp (seq-subseq '(2 3 4 4) 2 3)))
- (should-error (seq-subseq '(1 2 3) 4))
- (should-not (seq-subseq '(1 2 3) 3))
- (should (seq-subseq '(1 2 3) -3))
- (should-error (seq-subseq '(1 2 3) 1 4))
- (should (seq-subseq '(1 2 3) 1 3))
- (should-error (seq-subseq '() -1))
- (should-error (seq-subseq [] -1))
- (should-error (seq-subseq "" -1))
- (should-not (seq-subseq '() 0))
- (should-error (seq-subseq '() 0 -1)))
-
-(ert-deftest test-seq-concatenate ()
- (with-test-sequences (seq '(2 4 6))
- (should (equal (seq-concatenate 'string seq [8]) (string 2 4 6 8)))
- (should (equal (seq-concatenate 'list seq '(8 10)) '(2 4 6 8 10)))
- (should (equal (seq-concatenate 'vector seq '(8 10)) [2 4 6 8 10]))
- (should (equal (seq-concatenate 'vector nil '(8 10)) [8 10]))
- (should (equal (seq-concatenate 'vector seq nil) [2 4 6]))))
-
-(ert-deftest test-seq-mapcat ()
- (should (equal (seq-mapcat #'seq-reverse '((3 2 1) (6 5 4)))
- '(1 2 3 4 5 6)))
- (should (equal (seq-mapcat #'seq-reverse '[(3 2 1) (6 5 4)])
- '(1 2 3 4 5 6)))
- (should (equal (seq-mapcat #'seq-reverse '((3 2 1) (6 5 4)) 'vector)
- '[1 2 3 4 5 6])))
-
-(ert-deftest test-seq-partition ()
- (should (same-contents-p (seq-partition '(0 1 2 3 4 5 6 7) 3)
- '((0 1 2) (3 4 5) (6 7))))
- (should (same-contents-p (seq-partition '[0 1 2 3 4 5 6 7] 3)
- '([0 1 2] [3 4 5] [6 7])))
- (should (same-contents-p (seq-partition "Hello world" 2)
- '("He" "ll" "o " "wo" "rl" "d")))
- (should (equal (seq-partition '() 2) '()))
- (should (equal (seq-partition '(1 2 3) -1) '())))
-
-(ert-deftest test-seq-group-by ()
- (with-test-sequences (seq '(1 2 3 4))
- (should (equal (seq-group-by #'test-sequences-oddp seq)
- '((t 1 3) (nil 2 4)))))
- (should (equal (seq-group-by #'car '((a 1) (b 3) (c 4) (a 2)))
- '((b (b 3)) (c (c 4)) (a (a 1) (a 2))))))
-
-(ert-deftest test-seq-reverse ()
- (with-test-sequences (seq '(1 2 3 4))
- (should (same-contents-p (seq-reverse seq) '(4 3 2 1)))
- (should (equal (type-of (seq-reverse seq))
- (type-of seq)))))
-
-(ert-deftest test-seq-into ()
- (let* ((vector [1 2 3])
- (list (seq-into vector 'list)))
- (should (same-contents-p vector list))
- (should (listp list)))
- (let* ((list '(hello world))
- (vector (seq-into list 'vector)))
- (should (same-contents-p vector list))
- (should (vectorp vector)))
- (let* ((string "hello")
- (list (seq-into string 'list)))
- (should (same-contents-p string list))
- (should (stringp string)))
- (let* ((string "hello")
- (vector (seq-into string 'vector)))
- (should (same-contents-p string vector))
- (should (stringp string)))
- (let* ((list nil)
- (vector (seq-into list 'vector)))
- (should (same-contents-p list vector))
- (should (vectorp vector))))
-
-(ert-deftest test-seq-intersection ()
- (let ((v1 [2 3 4 5])
- (v2 [1 3 5 6 7]))
- (should (same-contents-p (seq-intersection v1 v2)
- '(3 5))))
- (let ((l1 '(2 3 4 5))
- (l2 '(1 3 5 6 7)))
- (should (same-contents-p (seq-intersection l1 l2)
- '(3 5))))
- (let ((v1 [2 4 6])
- (v2 [1 3 5]))
- (should (seq-empty-p (seq-intersection v1 v2)))))
-
-(ert-deftest test-seq-difference ()
- (let ((v1 [2 3 4 5])
- (v2 [1 3 5 6 7]))
- (should (same-contents-p (seq-difference v1 v2)
- '(2 4))))
- (let ((l1 '(2 3 4 5))
- (l2 '(1 3 5 6 7)))
- (should (same-contents-p (seq-difference l1 l2)
- '(2 4))))
- (let ((v1 [2 4 6])
- (v2 [2 4 6]))
- (should (seq-empty-p (seq-difference v1 v2)))))
-
-(ert-deftest test-seq-let ()
- (with-test-sequences (seq '(1 2 3 4))
- (seq-let (a b c d e) seq
- (should (= a 1))
- (should (= b 2))
- (should (= c 3))
- (should (= d 4))
- (should (null e)))
- (seq-let (a b &rest others) seq
- (should (= a 1))
- (should (= b 2))
- (should (same-contents-p others (seq-drop seq 2)))))
- (let ((seq '(1 (2 (3 (4))))))
- (seq-let (_ (_ (_ (a)))) seq
- (should (= a 4))))
- (let (seq)
- (seq-let (a b c) seq
- (should (null a))
- (should (null b))
- (should (null c)))))
-
-(ert-deftest test-seq-min-max ()
- (with-test-sequences (seq '(4 5 3 2 0 4))
- (should (= (seq-min seq) 0))
- (should (= (seq-max seq) 5))))
-
-(ert-deftest test-seq-into-sequence ()
- (with-test-sequences (seq '(1 2 3))
- (should (eq seq (seq-into-sequence seq)))
- (should-error (seq-into-sequence 2))))
-
-(ert-deftest test-seq-position ()
- (with-test-sequences (seq '(2 4 6))
- (should (null (seq-position seq 1)))
- (should (= (seq-position seq 4) 1)))
- (let ((seq '(a b c)))
- (should (null (seq-position seq 'd #'eq)))
- (should (= (seq-position seq 'a #'eq) 0))
- (should (null (seq-position seq (make-symbol "a") #'eq)))))
-
-(provide 'seq-tests)
-;;; seq-tests.el ends here
diff --git a/test/automated/sgml-mode-tests.el b/test/automated/sgml-mode-tests.el
deleted file mode 100644
index eeb5c7d60ae..00000000000
--- a/test/automated/sgml-mode-tests.el
+++ /dev/null
@@ -1,135 +0,0 @@
-;;; sgml-mode-tests.el --- Tests for sgml-mode
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Przemysław Wojnowski <esperanto@cumego.com>
-;; Keywords: tests
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'sgml-mode)
-(require 'ert)
-
-(defmacro sgml-with-content (content &rest body)
- "Insert CONTENT into a temporary `sgml-mode' buffer and execute BODY on it.
-The point is set to the beginning of the buffer."
- `(with-temp-buffer
- (sgml-mode)
- (insert ,content)
- (goto-char (point-min))
- ,@body))
-
-;;; sgml-delete-tag
-
-(ert-deftest sgml-delete-tag-should-not-delete-tags-when-wrong-args ()
- "Don't delete tag, when number of tags to delete is not positive number."
- (let ((content "<p>Valar Morghulis</p>"))
- (sgml-with-content
- content
- (sgml-delete-tag -1)
- (should (string= content (buffer-string)))
- (sgml-delete-tag 0)
- (should (string= content (buffer-string))))))
-
-(ert-deftest sgml-delete-tag-should-delete-tags-n-times ()
- ;; Delete only 1, when 1 available:
- (sgml-with-content
- "<br />"
- (sgml-delete-tag 1)
- (should (string= "" (buffer-string))))
- ;; Delete from position on whitespaces before tag:
- (sgml-with-content
- " \t\n<br />"
- (sgml-delete-tag 1)
- (should (string= "" (buffer-string))))
- ;; Delete from position on tag:
- (sgml-with-content
- "<br />"
- (goto-char 3)
- (sgml-delete-tag 1)
- (should (string= "" (buffer-string))))
- ;; Delete one by one:
- (sgml-with-content
- "<h1><p>You know nothing, Jon Snow.</p></h1>"
- (sgml-delete-tag 1)
- (should (string= "<p>You know nothing, Jon Snow.</p>" (buffer-string)))
- (sgml-delete-tag 1)
- (should (string= "You know nothing, Jon Snow." (buffer-string))))
- ;; Delete 2 at a time, when 2 available:
- (sgml-with-content
- "<h1><p>You know nothing, Jon Snow.</p></h1>"
- (sgml-delete-tag 2)
- (should (string= "You know nothing, Jon Snow." (buffer-string)))))
-
-(ert-deftest sgml-delete-tag-should-delete-unclosed-tag ()
- (sgml-with-content
- "<ul><li>Keep your stones connected.</ul>"
- (goto-char 5) ; position on "li" tag
- (sgml-delete-tag 1)
- (should (string= "<ul>Keep your stones connected.</ul>" (buffer-string)))))
-
-(ert-deftest sgml-delete-tag-should-signal-error-for-malformed-tags ()
- (let ((content "<h1><h2>Drakaris!</h1></h2>"))
- ;; Delete outside tag:
- (sgml-with-content
- content
- (sgml-delete-tag 1)
- (should (string= "<h2>Drakaris!</h2>" (buffer-string))))
- ;; Delete inner tag:
- (sgml-with-content
- content
- (goto-char 5) ; position the inner tag
- (sgml-delete-tag 1)
- (should (string= "<h1>Drakaris!</h1>" (buffer-string))))))
-
-(ert-deftest sgml-delete-tag-should-signal-error-when-deleting-too-much ()
- (let ((content "<emph>Drakaris!</emph>"))
- ;; No tags to delete:
- (sgml-with-content
- "Drakaris!"
- (should-error (sgml-delete-tag 1) :type 'error)
- (should (string= "Drakaris!" (buffer-string))))
- ;; Trying to delete 2 tags, when only 1 available:
- (sgml-with-content
- content
- (should-error (sgml-delete-tag 2) :type 'error)
- (should (string= "Drakaris!" (buffer-string))))
- ;; Trying to delete a tag, but not on/before a tag:
- (sgml-with-content
- content
- (goto-char 7) ; D in Drakaris
- (should-error (sgml-delete-tag 1) :type 'error)
- (should (string= content (buffer-string))))
- ;; Trying to delete a tag from position outside tag:
- (sgml-with-content
- content
- (goto-char (point-max))
- (should-error (sgml-delete-tag 1) :type 'error)
- (should (string= content (buffer-string))))))
-
-(ert-deftest sgml-delete-tag-bug-8203-should-not-delete-apostrophe ()
- :expected-result :failed
- (sgml-with-content
- "<title>Winter is comin'</title>"
- (sgml-delete-tag 1)
- (should (string= "Winter is comin'" (buffer-string)))))
-
-(provide 'sgml-mode-tests)
-;;; sgml-mode-tests.el ends here
diff --git a/test/automated/simple-test.el b/test/automated/simple-test.el
deleted file mode 100644
index 07b5eaa93e4..00000000000
--- a/test/automated/simple-test.el
+++ /dev/null
@@ -1,256 +0,0 @@
-;;; simple-test.el --- Tests for simple.el -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(require 'ert)
-
-(defmacro simple-test--dummy-buffer (&rest body)
- (declare (indent 0)
- (debug t))
- `(with-temp-buffer
- (emacs-lisp-mode)
- (setq indent-tabs-mode nil)
- (insert "(a b")
- (save-excursion (insert " c d)"))
- ,@body
- (cons (buffer-substring (point-min) (point))
- (buffer-substring (point) (point-max)))))
-
-
-(defmacro simple-test--transpositions (&rest body)
- (declare (indent 0)
- (debug t))
- `(with-temp-buffer
- (emacs-lisp-mode)
- (insert "(s1) (s2) (s3) (s4) (s5)")
- (backward-sexp 1)
- ,@body
- (cons (buffer-substring (point-min) (point))
- (buffer-substring (point) (point-max)))))
-
-
-;;; `newline'
-(ert-deftest newline ()
- (should-error (newline -1))
- (should (equal (simple-test--dummy-buffer (newline 1))
- '("(a b\n" . " c d)")))
- (should (equal (simple-test--dummy-buffer
- (electric-indent-mode -1)
- (call-interactively #'newline))
- '("(a b\n" . " c d)")))
- (should (equal (simple-test--dummy-buffer
- (let ((current-prefix-arg 5))
- (call-interactively #'newline)))
- '("(a b\n\n\n\n\n" . " c d)")))
- (should (equal (simple-test--dummy-buffer (newline 5))
- '("(a b\n\n\n\n\n" . " c d)")))
- (should (equal (simple-test--dummy-buffer
- (forward-char 1)
- (newline 1))
- '("(a b \n" . "c d)"))))
-
-(ert-deftest newline-indent ()
- (should (equal (simple-test--dummy-buffer
- (electric-indent-local-mode 1)
- (newline 1))
- '("(a b\n" . " c d)")))
- (should (equal (simple-test--dummy-buffer
- (electric-indent-local-mode 1)
- (newline 1 'interactive))
- '("(a b\n " . "c d)")))
- (should (equal (simple-test--dummy-buffer
- (electric-indent-local-mode 1)
- (let ((current-prefix-arg nil))
- (call-interactively #'newline)
- (call-interactively #'newline)))
- '("(a b\n\n " . "c d)")))
- (should (equal (simple-test--dummy-buffer
- (electric-indent-local-mode 1)
- (newline 5 'interactive))
- '("(a b\n\n\n\n\n " . "c d)")))
- (should (equal (simple-test--dummy-buffer
- (electric-indent-local-mode 1)
- (let ((current-prefix-arg 5))
- (call-interactively #'newline)))
- '("(a b\n\n\n\n\n " . "c d)")))
- (should (equal (simple-test--dummy-buffer
- (forward-char 1)
- (electric-indent-local-mode 1)
- (newline 1 'interactive))
- '("(a b\n " . "c d)"))))
-
-
-;;; `open-line'
-(ert-deftest open-line ()
- (should-error (open-line -1))
- (should-error (open-line))
- (should (equal (simple-test--dummy-buffer (open-line 1))
- '("(a b" . "\n c d)")))
- (should (equal (simple-test--dummy-buffer
- (electric-indent-mode -1)
- (call-interactively #'open-line))
- '("(a b" . "\n c d)")))
- (should (equal (simple-test--dummy-buffer
- (let ((current-prefix-arg 5))
- (call-interactively #'open-line)))
- '("(a b" . "\n\n\n\n\n c d)")))
- (should (equal (simple-test--dummy-buffer (open-line 5))
- '("(a b" . "\n\n\n\n\n c d)")))
- (should (equal (simple-test--dummy-buffer
- (forward-char 1)
- (open-line 1))
- '("(a b " . "\nc d)"))))
-
-(ert-deftest open-line-margin-and-prefix ()
- (should (equal (simple-test--dummy-buffer
- (let ((left-margin 10))
- (open-line 3)))
- '("(a b" . "\n\n\n c d)")))
- (should (equal (simple-test--dummy-buffer
- (forward-line 0)
- (let ((left-margin 2))
- (open-line 1)))
- '(" " . "\n (a b c d)")))
- (should (equal (simple-test--dummy-buffer
- (let ((fill-prefix "- - "))
- (open-line 1)))
- '("(a b" . "\n c d)")))
- (should (equal (simple-test--dummy-buffer
- (forward-line 0)
- (let ((fill-prefix "- - "))
- (open-line 1)))
- '("- - " . "\n(a b c d)"))))
-
-(ert-deftest open-line-indent ()
- (should (equal (simple-test--dummy-buffer
- (electric-indent-local-mode 1)
- (open-line 1))
- '("(a b" . "\n c d)")))
- (should (equal (simple-test--dummy-buffer
- (electric-indent-local-mode 1)
- (open-line 1 'interactive))
- '("(a b" . "\n c d)")))
- (should (equal (simple-test--dummy-buffer
- (electric-indent-local-mode 1)
- (let ((current-prefix-arg nil))
- (call-interactively #'open-line)
- (call-interactively #'open-line)))
- '("(a b" . "\n\n c d)")))
- (should (equal (simple-test--dummy-buffer
- (electric-indent-local-mode 1)
- (open-line 5 'interactive))
- '("(a b" . "\n\n\n\n\n c d)")))
- (should (equal (simple-test--dummy-buffer
- (electric-indent-local-mode 1)
- (let ((current-prefix-arg 5))
- (call-interactively #'open-line)))
- '("(a b" . "\n\n\n\n\n c d)")))
- (should (equal (simple-test--dummy-buffer
- (forward-char 1)
- (electric-indent-local-mode 1)
- (open-line 1 'interactive))
- '("(a b" . "\n c d)"))))
-
-(ert-deftest open-line-hook ()
- (let* ((x 0)
- (inc (lambda () (setq x (1+ x)))))
- (simple-test--dummy-buffer
- (add-hook 'post-self-insert-hook inc nil 'local)
- (open-line 1))
- (should (= x 0))
- (simple-test--dummy-buffer
- (add-hook 'post-self-insert-hook inc nil 'local)
- (open-line 1 'interactive))
- (should (= x 1))
-
- (unwind-protect
- (progn
- (add-hook 'post-self-insert-hook inc)
- (simple-test--dummy-buffer
- (open-line 1))
- (should (= x 1))
- (simple-test--dummy-buffer
- (open-line 10 'interactive))
- (should (= x 2)))
- (remove-hook 'post-self-insert-hook inc))))
-
-
-;;; `delete-trailing-whitespace'
-(ert-deftest simple-delete-trailing-whitespace ()
- "Test bug#21766: delete-whitespace sometimes deletes non-whitespace."
- (defvar python-indent-guess-indent-offset) ; to avoid a warning
- (let ((python (featurep 'python))
- (python-indent-guess-indent-offset nil)
- (delete-trailing-lines t))
- (unwind-protect
- (with-temp-buffer
- (python-mode)
- (insert (concat "query = \"\"\"WITH filtered AS \n"
- "WHERE \n"
- "\"\"\".format(fv_)\n"
- "\n"
- "\n"))
- (delete-trailing-whitespace)
- (should (equal (count-lines (point-min) (point-max)) 3)))
- ;; Let's clean up if running interactive
- (unless (or noninteractive python)
- (unload-feature 'python)))))
-
-
-;;; auto-boundary tests
-(ert-deftest undo-auto--boundary-timer ()
- (should
- undo-auto--current-boundary-timer))
-
-(ert-deftest undo-auto--boundaries-added ()
- ;; The change in the buffer should have caused addition
- ;; to undo-auto--undoably-changed-buffers.
- (should
- (with-temp-buffer
- (setq buffer-undo-list nil)
- (insert "hello")
- (member (current-buffer) undo-auto--undoably-changed-buffers)))
- ;; The head of buffer-undo-list should be the insertion event, and
- ;; therefore not nil
- (should
- (with-temp-buffer
- (setq buffer-undo-list nil)
- (insert "hello")
- (car buffer-undo-list)))
- ;; Now the head of the buffer-undo-list should be a boundary and so
- ;; nil. We have to call auto-boundary explicitly because we are out
- ;; of the command loop
- (should-not
- (with-temp-buffer
- (setq buffer-undo-list nil)
- (insert "hello")
- (car buffer-undo-list)
- (undo-auto--boundaries 'test))))
-
-;;; Transposition with negative args (bug#20698, bug#21885)
-(ert-deftest simple-transpose-subr ()
- (should (equal (simple-test--transpositions (transpose-sexps -1))
- '("(s1) (s2) (s4)" . " (s3) (s5)")))
- (should (equal (simple-test--transpositions (transpose-sexps -2))
- '("(s1) (s4)" . " (s2) (s3) (s5)"))))
-
-
-(provide 'simple-test)
-;;; simple-test.el ends here
diff --git a/test/automated/sort-tests.el b/test/automated/sort-tests.el
deleted file mode 100644
index 22acb83e26a..00000000000
--- a/test/automated/sort-tests.el
+++ /dev/null
@@ -1,106 +0,0 @@
-;;; sort-tests.el --- Tests for sort.el -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(require 'ert)
-(require 'sort)
-
-(defun sort-tests-random-word (n)
- (mapconcat (lambda (_) (string (let ((c (random 52)))
- (+ (if (> c 25) 71 65)
- c))))
- (make-list n nil) ""))
-
-(defun sort-tests--insert-words-sort-and-compare (words separator function reverse less-predicate)
- (with-temp-buffer
- (let ((aux words))
- (while aux
- (insert (pop aux))
- (when aux
- (insert separator))))
- ;; Final newline.
- (insert "\n")
- (funcall function reverse (point-min) (point-max))
- (let ((sorted-words
- (mapconcat #'identity
- (let ((x (sort (copy-sequence words) less-predicate)))
- (if reverse (reverse x) x))
- separator)))
- (should (string= (substring (buffer-string) 0 -1) sorted-words)))))
-
-;;; This function uses randomly generated tests and should satisfy
-;;; most needs for this lib.
-(cl-defun sort-tests-test-sorter-function (separator function &key generator less-pred noreverse)
- "Check that FUNCTION correctly sorts words separated by SEPARATOR.
-This checks whether it is equivalent to sorting a list of such
-words via LESS-PREDICATE, and then inserting them separated by
-SEPARATOR.
-LESS-PREDICATE defaults to `string-lessp'.
-GENERATOR is a function called with one argument that returns a
-word, it defaults to `sort-tests-random-word'.
-NOREVERSE means that the first arg of FUNCTION is not used for
-reversing the sort."
- (dotimes (n 20)
- ;; Sort n words of length n.
- (let ((words (mapcar (or generator #'sort-tests-random-word) (make-list n n)))
- (sort-fold-case nil)
- (less-pred (or less-pred #'string<)))
- (sort-tests--insert-words-sort-and-compare words separator function nil less-pred)
- (unless noreverse
- (sort-tests--insert-words-sort-and-compare
- words separator function 'reverse less-pred))
- (let ((less-pred-case (lambda (a b) (funcall less-pred (downcase a) (downcase b))))
- (sort-fold-case t))
- (sort-tests--insert-words-sort-and-compare words separator function nil less-pred-case)
- (unless noreverse
- (sort-tests--insert-words-sort-and-compare
- words separator function 'reverse less-pred-case))))))
-
-(ert-deftest sort-tests--lines ()
- (sort-tests-test-sorter-function "\n" #'sort-lines))
-
-(ert-deftest sort-tests--paragraphs ()
- (let ((paragraph-separate "[\s\t\f]*$"))
- (sort-tests-test-sorter-function "\n\n" #'sort-paragraphs)))
-
-(ert-deftest sort-tests--numeric-fields ()
- (cl-labels ((field-to-number (f) (string-to-number (car (split-string f)))))
- (sort-tests-test-sorter-function "\n" (lambda (_ l r) (sort-numeric-fields 1 l (1- r)))
- :noreverse t
- :generator (lambda (_) (format "%s %s" (random) (sort-tests-random-word 20)))
- :less-pred (lambda (a b) (< (field-to-number a)
- (field-to-number b))))))
-
-(ert-deftest sort-tests--fields-1 ()
- (cl-labels ((field-n (f n) (elt (split-string f) (1- n))))
- (sort-tests-test-sorter-function "\n" (lambda (_ l r) (sort-fields 1 l (1- r)))
- :noreverse t
- :generator (lambda (n) (concat (sort-tests-random-word n) " " (sort-tests-random-word n)))
- :less-pred (lambda (a b) (string< (field-n a 1) (field-n b 1))))))
-
-(ert-deftest sort-tests--fields-2 ()
- (cl-labels ((field-n (f n) (elt (split-string f) (1- n))))
- (sort-tests-test-sorter-function "\n" (lambda (_ l r) (sort-fields 2 l (1- r)))
- :noreverse t
- :generator (lambda (n) (concat (sort-tests-random-word n) " " (sort-tests-random-word n)))
- :less-pred (lambda (a b) (string< (field-n a 2) (field-n b 2))))))
-
-(provide 'sort-tests)
-;;; sort-tests.el ends here
diff --git a/test/automated/subr-tests.el b/test/automated/subr-tests.el
deleted file mode 100644
index ee8db593b49..00000000000
--- a/test/automated/subr-tests.el
+++ /dev/null
@@ -1,107 +0,0 @@
-;;; subr-tests.el --- Tests for subr.el
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Oleh Krehel <ohwoeowho@gmail.com>,
-;; Nicolas Petton <nicolas@petton.fr>
-;; Keywords:
-
-;; 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/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'ert)
-
-(ert-deftest let-when-compile ()
- ;; good case
- (should (equal (macroexpand '(let-when-compile ((foo (+ 2 3)))
- (setq bar (eval-when-compile (+ foo foo)))
- (setq boo (eval-when-compile (* foo foo)))))
- '(progn
- (setq bar (quote 10))
- (setq boo (quote 25)))))
- ;; bad case: `eval-when-compile' omitted, byte compiler should catch this
- (should (equal (macroexpand
- '(let-when-compile ((foo (+ 2 3)))
- (setq bar (+ foo foo))
- (setq boo (eval-when-compile (* foo foo)))))
- '(progn
- (setq bar (+ foo foo))
- (setq boo (quote 25)))))
- ;; something practical
- (should (equal (macroexpand
- '(let-when-compile ((keywords '("true" "false")))
- (font-lock-add-keywords
- 'c++-mode
- `((,(eval-when-compile
- (format "\\<%s\\>" (regexp-opt keywords)))
- 0 font-lock-keyword-face)))))
- '(font-lock-add-keywords
- (quote c++-mode)
- (list
- (cons (quote
- "\\<\\(?:\\(?:fals\\|tru\\)e\\)\\>")
- (quote
- (0 font-lock-keyword-face))))))))
-
-(ert-deftest string-comparison-test ()
- (should (string-lessp "abc" "acb"))
- (should (string-lessp "aBc" "abc"))
- (should (string-lessp "abc" "abcd"))
- (should (string-lessp "abc" "abcd"))
- (should-not (string-lessp "abc" "abc"))
- (should-not (string-lessp "" ""))
-
- (should (string-greaterp "acb" "abc"))
- (should (string-greaterp "abc" "aBc"))
- (should (string-greaterp "abcd" "abc"))
- (should (string-greaterp "abcd" "abc"))
- (should-not (string-greaterp "abc" "abc"))
- (should-not (string-greaterp "" ""))
-
- ;; Symbols are also accepted
- (should (string-lessp 'abc 'acb))
- (should (string-lessp "abc" 'acb))
- (should (string-greaterp 'acb 'abc))
- (should (string-greaterp "acb" 'abc)))
-
-(ert-deftest subr-test-when ()
- (should (equal (when t 1) 1))
- (should (equal (when t 2) 2))
- (should (equal (when nil 1) nil))
- (should (equal (when nil 2) nil))
- (should (equal (when t 'x 1) 1))
- (should (equal (when t 'x 2) 2))
- (should (equal (when nil 'x 1) nil))
- (should (equal (when nil 'x 2) nil))
- (let ((x 1))
- (should-not (when nil
- (setq x (1+ x))
- x))
- (should (= x 1))
- (should (= 2 (when t
- (setq x (1+ x))
- x)))
- (should (= x 2)))
- (should (equal (macroexpand-all '(when a b c d))
- '(if a (progn b c d)))))
-
-(provide 'subr-tests)
-;;; subr-tests.el ends here
diff --git a/test/automated/subr-x-tests.el b/test/automated/subr-x-tests.el
deleted file mode 100644
index bdd3dffe02a..00000000000
--- a/test/automated/subr-x-tests.el
+++ /dev/null
@@ -1,526 +0,0 @@
-;;; subr-x-tests.el --- Testing the extended lisp routines
-
-;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
-
-;; Author: Fabián E. Gallina <fgallina@gnu.org>
-;; Keywords:
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'ert)
-(require 'subr-x)
-
-
-;; if-let tests
-
-(ert-deftest subr-x-test-if-let-single-binding-expansion ()
- "Test single bindings are expanded properly."
- (should (equal
- (macroexpand
- '(if-let (a 1)
- (- a)
- "no"))
- '(let* ((a (and t 1)))
- (if a
- (- a)
- "no"))))
- (should (equal
- (macroexpand
- '(if-let (a)
- (- a)
- "no"))
- '(let* ((a (and t nil)))
- (if a
- (- a)
- "no")))))
-
-(ert-deftest subr-x-test-if-let-single-symbol-expansion ()
- "Test single symbol bindings are expanded properly."
- (should (equal
- (macroexpand
- '(if-let (a)
- (- a)
- "no"))
- '(let* ((a (and t nil)))
- (if a
- (- a)
- "no"))))
- (should (equal
- (macroexpand
- '(if-let (a b c)
- (- a)
- "no"))
- '(let* ((a (and t nil))
- (b (and a nil))
- (c (and b nil)))
- (if c
- (- a)
- "no"))))
- (should (equal
- (macroexpand
- '(if-let (a (b 2) c)
- (- a)
- "no"))
- '(let* ((a (and t nil))
- (b (and a 2))
- (c (and b nil)))
- (if c
- (- a)
- "no")))))
-
-(ert-deftest subr-x-test-if-let-nil-related-expansion ()
- "Test nil is processed properly."
- (should (equal
- (macroexpand
- '(if-let (nil)
- (- a)
- "no"))
- '(let* ((nil (and t nil)))
- (if nil
- (- a)
- "no"))))
- (should (equal
- (macroexpand
- '(if-let ((nil))
- (- a)
- "no"))
- '(let* ((nil (and t nil)))
- (if nil
- (- a)
- "no"))))
- (should (equal
- (macroexpand
- '(if-let ((a 1) (nil) (b 2))
- (- a)
- "no"))
- '(let* ((a (and t 1))
- (nil (and a nil))
- (b (and nil 2)))
- (if b
- (- a)
- "no"))))
- (should (equal
- (macroexpand
- '(if-let ((a 1) nil (b 2))
- (- a)
- "no"))
- '(let* ((a (and t 1))
- (nil (and a nil))
- (b (and nil 2)))
- (if b
- (- a)
- "no")))))
-
-(ert-deftest subr-x-test-if-let-malformed-binding ()
- "Test malformed bindings trigger errors."
- (should-error (macroexpand
- '(if-let (_ (a 1 1) (b 2) (c 3) d)
- (- a)
- "no"))
- :type 'error)
- (should-error (macroexpand
- '(if-let (_ (a 1) (b 2 2) (c 3) d)
- (- a)
- "no"))
- :type 'error)
- (should-error (macroexpand
- '(if-let (_ (a 1) (b 2) (c 3 3) d)
- (- a)
- "no"))
- :type 'error)
- (should-error (macroexpand
- '(if-let ((a 1 1))
- (- a)
- "no"))
- :type 'error))
-
-(ert-deftest subr-x-test-if-let-true ()
- "Test `if-let' with truthy bindings."
- (should (equal
- (if-let (a 1)
- a
- "no")
- 1))
- (should (equal
- (if-let ((a 1) (b 2) (c 3))
- (list a b c)
- "no")
- (list 1 2 3))))
-
-(ert-deftest subr-x-test-if-let-false ()
- "Test `if-let' with falsie bindings."
- (should (equal
- (if-let (a nil)
- (list a b c)
- "no")
- "no"))
- (should (equal
- (if-let ((a nil) (b 2) (c 3))
- (list a b c)
- "no")
- "no"))
- (should (equal
- (if-let ((a 1) (b nil) (c 3))
- (list a b c)
- "no")
- "no"))
- (should (equal
- (if-let ((a 1) (b 2) (c nil))
- (list a b c)
- "no")
- "no"))
- (should (equal
- (if-let (z (a 1) (b 2) (c 3))
- (list a b c)
- "no")
- "no"))
- (should (equal
- (if-let ((a 1) (b 2) (c 3) d)
- (list a b c)
- "no")
- "no")))
-
-(ert-deftest subr-x-test-if-let-bound-references ()
- "Test `if-let' bindings can refer to already bound symbols."
- (should (equal
- (if-let ((a (1+ 0)) (b (1+ a)) (c (1+ b)))
- (list a b c)
- "no")
- (list 1 2 3))))
-
-(ert-deftest subr-x-test-if-let-and-laziness-is-preserved ()
- "Test `if-let' respects `and' laziness."
- (let (a-called b-called c-called)
- (should (equal
- (if-let ((a nil)
- (b (setq b-called t))
- (c (setq c-called t)))
- "yes"
- (list a-called b-called c-called))
- (list nil nil nil))))
- (let (a-called b-called c-called)
- (should (equal
- (if-let ((a (setq a-called t))
- (b nil)
- (c (setq c-called t)))
- "yes"
- (list a-called b-called c-called))
- (list t nil nil))))
- (let (a-called b-called c-called)
- (should (equal
- (if-let ((a (setq a-called t))
- (b (setq b-called t))
- (c nil)
- (d (setq c-called t)))
- "yes"
- (list a-called b-called c-called))
- (list t t nil)))))
-
-
-;; when-let tests
-
-(ert-deftest subr-x-test-when-let-body-expansion ()
- "Test body allows for multiple sexps wrapping with progn."
- (should (equal
- (macroexpand
- '(when-let (a 1)
- (message "opposite")
- (- a)))
- '(let* ((a (and t 1)))
- (if a
- (progn
- (message "opposite")
- (- a)))))))
-
-(ert-deftest subr-x-test-when-let-single-binding-expansion ()
- "Test single bindings are expanded properly."
- (should (equal
- (macroexpand
- '(when-let (a 1)
- (- a)))
- '(let* ((a (and t 1)))
- (if a
- (- a)))))
- (should (equal
- (macroexpand
- '(when-let (a)
- (- a)))
- '(let* ((a (and t nil)))
- (if a
- (- a))))))
-
-(ert-deftest subr-x-test-when-let-single-symbol-expansion ()
- "Test single symbol bindings are expanded properly."
- (should (equal
- (macroexpand
- '(when-let (a)
- (- a)))
- '(let* ((a (and t nil)))
- (if a
- (- a)))))
- (should (equal
- (macroexpand
- '(when-let (a b c)
- (- a)))
- '(let* ((a (and t nil))
- (b (and a nil))
- (c (and b nil)))
- (if c
- (- a)))))
- (should (equal
- (macroexpand
- '(when-let (a (b 2) c)
- (- a)))
- '(let* ((a (and t nil))
- (b (and a 2))
- (c (and b nil)))
- (if c
- (- a))))))
-
-(ert-deftest subr-x-test-when-let-nil-related-expansion ()
- "Test nil is processed properly."
- (should (equal
- (macroexpand
- '(when-let (nil)
- (- a)))
- '(let* ((nil (and t nil)))
- (if nil
- (- a)))))
- (should (equal
- (macroexpand
- '(when-let ((nil))
- (- a)))
- '(let* ((nil (and t nil)))
- (if nil
- (- a)))))
- (should (equal
- (macroexpand
- '(when-let ((a 1) (nil) (b 2))
- (- a)))
- '(let* ((a (and t 1))
- (nil (and a nil))
- (b (and nil 2)))
- (if b
- (- a)))))
- (should (equal
- (macroexpand
- '(when-let ((a 1) nil (b 2))
- (- a)))
- '(let* ((a (and t 1))
- (nil (and a nil))
- (b (and nil 2)))
- (if b
- (- a))))))
-
-(ert-deftest subr-x-test-when-let-malformed-binding ()
- "Test malformed bindings trigger errors."
- (should-error (macroexpand
- '(when-let (_ (a 1 1) (b 2) (c 3) d)
- (- a)))
- :type 'error)
- (should-error (macroexpand
- '(when-let (_ (a 1) (b 2 2) (c 3) d)
- (- a)))
- :type 'error)
- (should-error (macroexpand
- '(when-let (_ (a 1) (b 2) (c 3 3) d)
- (- a)))
- :type 'error)
- (should-error (macroexpand
- '(when-let ((a 1 1))
- (- a)))
- :type 'error))
-
-(ert-deftest subr-x-test-when-let-true ()
- "Test `when-let' with truthy bindings."
- (should (equal
- (when-let (a 1)
- a)
- 1))
- (should (equal
- (when-let ((a 1) (b 2) (c 3))
- (list a b c))
- (list 1 2 3))))
-
-(ert-deftest subr-x-test-when-let-false ()
- "Test `when-let' with falsie bindings."
- (should (equal
- (when-let (a nil)
- (list a b c)
- "no")
- nil))
- (should (equal
- (when-let ((a nil) (b 2) (c 3))
- (list a b c)
- "no")
- nil))
- (should (equal
- (when-let ((a 1) (b nil) (c 3))
- (list a b c)
- "no")
- nil))
- (should (equal
- (when-let ((a 1) (b 2) (c nil))
- (list a b c)
- "no")
- nil))
- (should (equal
- (when-let (z (a 1) (b 2) (c 3))
- (list a b c)
- "no")
- nil))
- (should (equal
- (when-let ((a 1) (b 2) (c 3) d)
- (list a b c)
- "no")
- nil)))
-
-(ert-deftest subr-x-test-when-let-bound-references ()
- "Test `when-let' bindings can refer to already bound symbols."
- (should (equal
- (when-let ((a (1+ 0)) (b (1+ a)) (c (1+ b)))
- (list a b c))
- (list 1 2 3))))
-
-(ert-deftest subr-x-test-when-let-and-laziness-is-preserved ()
- "Test `when-let' respects `and' laziness."
- (let (a-called b-called c-called)
- (should (equal
- (progn
- (when-let ((a nil)
- (b (setq b-called t))
- (c (setq c-called t)))
- "yes")
- (list a-called b-called c-called))
- (list nil nil nil))))
- (let (a-called b-called c-called)
- (should (equal
- (progn
- (when-let ((a (setq a-called t))
- (b nil)
- (c (setq c-called t)))
- "yes")
- (list a-called b-called c-called))
- (list t nil nil))))
- (let (a-called b-called c-called)
- (should (equal
- (progn
- (when-let ((a (setq a-called t))
- (b (setq b-called t))
- (c nil)
- (d (setq c-called t)))
- "yes")
- (list a-called b-called c-called))
- (list t t nil)))))
-
-
-;; Thread first tests
-
-(ert-deftest subr-x-test-thread-first-no-forms ()
- "Test `thread-first' with no forms expands to the first form."
- (should (equal (macroexpand '(thread-first 5)) 5))
- (should (equal (macroexpand '(thread-first (+ 1 2))) '(+ 1 2))))
-
-(ert-deftest subr-x-test-thread-first-function-names-are-threaded ()
- "Test `thread-first' wraps single function names."
- (should (equal (macroexpand
- '(thread-first 5
- -))
- '(- 5)))
- (should (equal (macroexpand
- '(thread-first (+ 1 2)
- -))
- '(- (+ 1 2)))))
-
-(ert-deftest subr-x-test-thread-first-expansion ()
- "Test `thread-first' expands correctly."
- (should (equal
- (macroexpand '(thread-first
- 5
- (+ 20)
- (/ 25)
- -
- (+ 40)))
- '(+ (- (/ (+ 5 20) 25)) 40))))
-
-(ert-deftest subr-x-test-thread-first-examples ()
- "Test several `thread-first' examples."
- (should (equal (thread-first (+ 40 2)) 42))
- (should (equal (thread-first
- 5
- (+ 20)
- (/ 25)
- -
- (+ 40)) 39))
- (should (equal (thread-first
- "this-is-a-string"
- (split-string "-")
- (nbutlast 2)
- (append (list "good")))
- (list "this" "is" "good"))))
-
-;; Thread last tests
-
-(ert-deftest subr-x-test-thread-last-no-forms ()
- "Test `thread-last' with no forms expands to the first form."
- (should (equal (macroexpand '(thread-last 5)) 5))
- (should (equal (macroexpand '(thread-last (+ 1 2))) '(+ 1 2))))
-
-(ert-deftest subr-x-test-thread-last-function-names-are-threaded ()
- "Test `thread-last' wraps single function names."
- (should (equal (macroexpand
- '(thread-last 5
- -))
- '(- 5)))
- (should (equal (macroexpand
- '(thread-last (+ 1 2)
- -))
- '(- (+ 1 2)))))
-
-(ert-deftest subr-x-test-thread-last-expansion ()
- "Test `thread-last' expands correctly."
- (should (equal
- (macroexpand '(thread-last
- 5
- (+ 20)
- (/ 25)
- -
- (+ 40)))
- '(+ 40 (- (/ 25 (+ 20 5)))))))
-
-(ert-deftest subr-x-test-thread-last-examples ()
- "Test several `thread-last' examples."
- (should (equal (thread-last (+ 40 2)) 42))
- (should (equal (thread-last
- 5
- (+ 20)
- (/ 25)
- -
- (+ 40)) 39))
- (should (equal (thread-last
- (list 1 -2 3 -4 5)
- (mapcar #'abs)
- (cl-reduce #'+)
- (format "abs sum is: %s"))
- "abs sum is: 15")))
-
-
-(provide 'subr-x-tests)
-;;; subr-x-tests.el ends here
diff --git a/test/automated/subword-tests.el b/test/automated/subword-tests.el
deleted file mode 100644
index bedb1523999..00000000000
--- a/test/automated/subword-tests.el
+++ /dev/null
@@ -1,81 +0,0 @@
-;;; subword-tests.el --- Testing the subword rules
-
-;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
-
-;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
-;; Keywords:
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'ert)
-(require 'subword)
-
-(defconst subword-tests-strings
- '("ABC^" ;;Bug#13758
- "ABC^ ABC^Foo^ ABC^-Foo^ toto^ ABC^"))
-
-(ert-deftest subword-tests ()
- "Test the `subword-mode' rules."
- (with-temp-buffer
- (dolist (str subword-tests-strings)
- (erase-buffer)
- (insert str)
- (goto-char (point-min))
- (while (search-forward "^" nil t)
- (replace-match ""))
- (goto-char (point-min))
- (while (not (eobp))
- (subword-forward 1)
- (insert "^"))
- (should (equal (buffer-string) str)))))
-
-(ert-deftest subword-tests2 ()
- "Test that motion in subword-mode stops at the right places."
-
- (let* ((line "fooBarBAZ quXD g_TESTThingAbc word BLAH test")
- (fwrd "* * * * * * * * * * * * *")
- (bkwd "* * * * * * * * * * * * *"))
-
- (with-temp-buffer
- (subword-mode 1)
- (insert line)
-
- ;; Test forward motion.
-
- (goto-char (point-min))
- (let ((stops (make-string (length fwrd) ?\ )))
- (while (progn
- (aset stops (1- (point)) ?\*)
- (not (eobp)))
- (forward-word))
- (should (equal stops fwrd)))
-
- ;; Test backward motion.
-
- (goto-char (point-max))
- (let ((stops (make-string (length bkwd) ?\ )))
- (while (progn
- (aset stops (1- (point)) ?\*)
- (not (bobp)))
- (backward-word))
- (should (equal stops bkwd))))))
-
-(provide 'subword-tests)
-;;; subword-tests.el ends here
diff --git a/test/automated/syntax-tests.el b/test/automated/syntax-tests.el
deleted file mode 100644
index b884c3ef5b8..00000000000
--- a/test/automated/syntax-tests.el
+++ /dev/null
@@ -1,97 +0,0 @@
-;;; syntax-tests.el --- Testing syntax rules and basic movement -*- lexical-binding: t -*-
-
-;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
-
-;; Author: Daniel Colascione <dancol@dancol.org>
-;; Keywords:
-
-;; This program 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.
-
-;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-(require 'ert)
-(require 'cl-lib)
-
-(defun run-up-list-test (fn data start instructions)
- (cl-labels ((posof (thing)
- (and (symbolp thing)
- (= (length (symbol-name thing)) 1)
- (- (aref (symbol-name thing) 0) ?a -1))))
- (with-temp-buffer
- (set-syntax-table (make-syntax-table))
- ;; Use a syntax table in which single quote is a string
- ;; character so that we can embed the test data in a lisp string
- ;; literal.
- (modify-syntax-entry ?\' "\"")
- (insert data)
- (goto-char (posof start))
- (dolist (instruction instructions)
- (cond ((posof instruction)
- (funcall fn)
- (should (eql (point) (posof instruction))))
- ((symbolp instruction)
- (should-error (funcall fn)
- :type instruction))
- (t (cl-assert nil nil "unknown ins")))))))
-
-(defmacro define-up-list-test (name fn data start &rest expected)
- `(ert-deftest ,name ()
- (run-up-list-test ,fn ,data ',start ',expected)))
-
-(define-up-list-test up-list-basic
- (lambda () (up-list))
- (or "(1 1 (1 1) 1 (1 1) 1)")
- ;; abcdefghijklmnopqrstuv
- i k v scan-error)
-
-(define-up-list-test up-list-with-forward-sexp-function
- (lambda ()
- (let ((forward-sexp-function
- (lambda (&optional arg)
- (let ((forward-sexp-function nil))
- (forward-sexp arg)))))
- (up-list)))
- (or "(1 1 (1 1) 1 (1 1) 1)")
- ;; abcdefghijklmnopqrstuv
- i k v scan-error)
-
-(define-up-list-test up-list-out-of-string
- (lambda () (up-list 1 t))
- (or "1 (1 '2 2 (2 2 2' 1) 1")
- ;; abcdefghijklmnopqrstuvwxy
- o r u scan-error)
-
-(define-up-list-test up-list-cross-string
- (lambda () (up-list 1 t))
- (or "(1 '2 ( 2' 1 '2 ) 2' 1)")
- ;; abcdefghijklmnopqrstuvwxy
- i r u x scan-error)
-
-(define-up-list-test up-list-no-cross-string
- (lambda () (up-list 1 t t))
- (or "(1 '2 ( 2' 1 '2 ) 2' 1)")
- ;; abcdefghijklmnopqrstuvwxy
- i k x scan-error)
-
-(define-up-list-test backward-up-list-basic
- (lambda () (backward-up-list))
- (or "(1 1 (1 1) 1 (1 1) 1)")
- ;; abcdefghijklmnopqrstuv
- i f a scan-error)
-
-(provide 'syntax-tests)
-;;; syntax-tests.el ends here
diff --git a/test/automated/tabulated-list-test.el b/test/automated/tabulated-list-test.el
deleted file mode 100644
index 9aa62ee59e5..00000000000
--- a/test/automated/tabulated-list-test.el
+++ /dev/null
@@ -1,118 +0,0 @@
-;;; tabulated-list-test.el --- Tests for emacs-lisp/tabulated-list.el -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Artur Malabarba <bruce.connor.am@gmail.com>
-
-;; 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 'tabulated-list)
-(require 'ert)
-
-(defconst tabulated-list--test-entries
- '(("zzzz-game" ["zzzz-game" "zzzz-game" "2113" "installed" " play zzzz in Emacs"])
- ("4clojure" ["4clojure" "4clojure" "1507" "obsolete" " Open and evaluate 4clojure.com questions"])
- ("abc-mode" ["abc-mode" "abc-mode" "944" "available" " Major mode for editing abc music files"])
- ("mode" ["mode" "mode" "1128" "installed" " A simple mode for editing Actionscript 3 files"])))
-
-(defun tabulated-list--test-sort-car (a b)
- (string< (car a) (car b)))
-
-(defconst tabulated-list--test-format
- [("name" 10 tabulated-list--test-sort-car)
- ("name-2" 10 t)
- ("Version" 9 nil)
- ("Status" 10 )
- ("Description" 0 nil)])
-
-(defmacro tabulated-list--test-with-buffer (&rest body)
- `(with-temp-buffer
- (tabulated-list-mode)
- (setq tabulated-list-entries (copy-alist tabulated-list--test-entries))
- (setq tabulated-list-format tabulated-list--test-format)
- (setq tabulated-list-padding 7)
- (tabulated-list-init-header)
- (tabulated-list-print)
- ,@body))
-
-
-;;; Tests
-(ert-deftest tabulated-list-print ()
- (tabulated-list--test-with-buffer
- ;; Basic printing.
- (should (string= (buffer-substring-no-properties (point-min) (point-max))
- " zzzz-game zzzz-game 2113 installed play zzzz in Emacs
- 4clojure 4clojure 1507 obsolete Open and evaluate 4clojure.com questions
- abc-mode abc-mode 944 available Major mode for editing abc music files
- mode mode 1128 installed A simple mode for editing Actionscript 3 files\n"))
- ;; Preserve position.
- (forward-line 3)
- (let ((pos (thing-at-point 'line)))
- (pop tabulated-list-entries)
- (tabulated-list-print t)
- (should (equal (thing-at-point 'line) pos))
- (should (string= (buffer-substring-no-properties (point-min) (point-max))
- " 4clojure 4clojure 1507 obsolete Open and evaluate 4clojure.com questions
- abc-mode abc-mode 944 available Major mode for editing abc music files
- mode mode 1128 installed A simple mode for editing Actionscript 3 files\n"))
- ;; Check the UPDATE argument
- (pop tabulated-list-entries)
- (setf (cdr (car tabulated-list-entries)) (list ["x" "x" "944" "available" " XX"]))
- (tabulated-list-print t t)
- (should (string= (buffer-substring-no-properties (point-min) (point-max))
- " x x 944 available XX
- mode mode 1128 installed A simple mode for editing Actionscript 3 files\n"))
- (should (equal (thing-at-point 'line) pos)))))
-
-(ert-deftest tabulated-list-sort ()
- (tabulated-list--test-with-buffer
- ;; Basic sorting
- (goto-char (point-min))
- (skip-chars-forward "[:blank:]")
- (tabulated-list-sort)
- (let ((text (buffer-substring-no-properties (point-min) (point-max))))
- (should (string= text " 4clojure 4clojure 1507 obsolete Open and evaluate 4clojure.com questions
- abc-mode abc-mode 944 available Major mode for editing abc music files
- mode mode 1128 installed A simple mode for editing Actionscript 3 files
- zzzz-game zzzz-game 2113 installed play zzzz in Emacs\n"))
-
- (skip-chars-forward "^[:blank:]")
- (skip-chars-forward "[:blank:]")
- (should (equal (get-text-property (point) 'tabulated-list-column-name)
- "name-2"))
- (tabulated-list-sort)
- ;; Check a `t' as the sorting predicate.
- (should (string= text (buffer-substring-no-properties (point-min) (point-max))))
- ;; Invert.
- (tabulated-list-sort 1)
- (should (string= (buffer-substring-no-properties (point-min) (point-max))
- " zzzz-game zzzz-game 2113 installed play zzzz in Emacs
- mode mode 1128 installed A simple mode for editing Actionscript 3 files
- abc-mode abc-mode 944 available Major mode for editing abc music files
- 4clojure 4clojure 1507 obsolete Open and evaluate 4clojure.com questions\n"))
- ;; Again
- (tabulated-list-sort 1)
- (should (string= text (buffer-substring-no-properties (point-min) (point-max)))))
- ;; Check that you can't sort some cols.
- (skip-chars-forward "^[:blank:]")
- (skip-chars-forward "[:blank:]")
- (should-error (tabulated-list-sort) :type 'user-error)
- (should-error (tabulated-list-sort 4) :type 'user-error)))
-
-(provide 'tabulated-list-test)
-;;; tabulated-list-test.el ends here
diff --git a/test/automated/textprop-tests.el b/test/automated/textprop-tests.el
deleted file mode 100644
index 0baa911421b..00000000000
--- a/test/automated/textprop-tests.el
+++ /dev/null
@@ -1,69 +0,0 @@
-;;; textprop-tests.el --- Test suite for text properties.
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Wolfgang Jenkner <wjenkner@inode.at>
-;; Keywords: 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)
-
-(ert-deftest textprop-tests-format ()
- "Test `format' with text properties."
- ;; See Bug#21351.
- (should (equal-including-properties
- (format #("mouse-1, RET: %s -- w: copy %s"
- 12 20 (face minibuffer-prompt)
- 21 30 (face minibuffer-prompt))
- "visit" "link")
- #("mouse-1, RET: visit -- w: copy link"
- 12 23 (face minibuffer-prompt)
- 24 35 (face minibuffer-prompt)))))
-
-(ert-deftest textprop-tests-font-lock--remove-face-from-text-property ()
- "Test `font-lock--remove-face-from-text-property'."
- (let* ((string "foobar")
- (stack (list string))
- (faces '(bold (:foreground "red") underline)))
- ;; Build each string in `stack' by adding a face to the previous
- ;; string.
- (let ((faces (reverse faces)))
- (push (copy-sequence (car stack)) stack)
- (put-text-property 0 3 'font-lock-face (pop faces) (car stack))
- (push (copy-sequence (car stack)) stack)
- (put-text-property 3 6 'font-lock-face (pop faces) (car stack))
- (push (copy-sequence (car stack)) stack)
- (font-lock-prepend-text-property 2 5
- 'font-lock-face (pop faces) (car stack)))
- ;; Check that removing the corresponding face from each string
- ;; yields the previous string in `stack'.
- (while faces
- ;; (message "%S" (car stack))
- (should (equal-including-properties
- (progn
- (font-lock--remove-face-from-text-property 0 6
- 'font-lock-face
- (pop faces)
- (car stack))
- (pop stack))
- (car stack))))
- ;; Sanity check.
- ;; (message "%S" (car stack))
- (should (and (equal-including-properties (pop stack) string)
- (null stack)))))
diff --git a/test/automated/thingatpt.el b/test/automated/thingatpt.el
deleted file mode 100644
index 12312388143..00000000000
--- a/test/automated/thingatpt.el
+++ /dev/null
@@ -1,87 +0,0 @@
-;;; thingatpt.el --- tests for thing-at-point.
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; 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)
-
-(defvar thing-at-point-test-data
- '(("http://1.gnu.org" 1 url "http://1.gnu.org")
- ("http://2.gnu.org" 6 url "http://2.gnu.org")
- ("http://3.gnu.org" 19 url "http://3.gnu.org")
- ("https://4.gnu.org" 1 url "https://4.gnu.org")
- ("A geo URI (geo:3.14159,-2.71828)." 12 url "geo:3.14159,-2.71828")
- ("Visit http://5.gnu.org now." 5 url nil)
- ("Visit http://6.gnu.org now." 7 url "http://6.gnu.org")
- ("Visit http://7.gnu.org now." 22 url "http://7.gnu.org")
- ("Visit http://8.gnu.org now." 22 url "http://8.gnu.org")
- ("Visit http://9.gnu.org now." 24 url nil)
- ;; Invalid URIs
- ("<<<<" 2 url nil)
- ("<>" 1 url nil)
- ("<url:>" 1 url nil)
- ("http://" 1 url nil)
- ;; Invalid schema
- ("foo://www.gnu.org" 1 url nil)
- ("foohttp://www.gnu.org" 1 url nil)
- ;; Non alphanumeric characters can be found in URIs
- ("ftp://example.net/~foo!;#bar=baz&goo=bob" 3 url "ftp://example.net/~foo!;#bar=baz&goo=bob")
- ("bzr+ssh://user@example.net:5/a%20d,5" 34 url "bzr+ssh://user@example.net:5/a%20d,5")
- ;; <url:...> markup
- ("Url: <url:foo://1.example.com>..." 8 url "foo://1.example.com")
- ("Url: <url:foo://2.example.com>..." 30 url "foo://2.example.com")
- ("Url: <url:foo://www.gnu.org/a bc>..." 20 url "foo://www.gnu.org/a bc")
- ;; Hack used by thing-at-point: drop punctuation at end of URI.
- ("Go to http://www.gnu.org, for details" 7 url "http://www.gnu.org")
- ("Go to http://www.gnu.org." 24 url "http://www.gnu.org")
- ;; Standard URI delimiters
- ("Go to \"http://10.gnu.org\"." 8 url "http://10.gnu.org")
- ("Go to \"http://11.gnu.org/\"." 26 url "http://11.gnu.org/")
- ("Go to <http://12.gnu.org> now." 8 url "http://12.gnu.org")
- ("Go to <http://13.gnu.org> now." 24 url "http://13.gnu.org")
- ;; Parenthesis handling (non-standard)
- ("http://example.com/a(b)c" 21 url "http://example.com/a(b)c")
- ("http://example.com/a(b)" 21 url "http://example.com/a(b)")
- ("(http://example.com/abc)" 2 url "http://example.com/abc")
- ("This (http://example.com/a(b))" 7 url "http://example.com/a(b)")
- ("This (http://example.com/a(b))" 30 url "http://example.com/a(b)")
- ("This (http://example.com/a(b))" 5 url nil)
- ("http://example.com/ab)c" 4 url "http://example.com/ab)c")
- ;; URL markup, lacking schema
- ("<url:foo@example.com>" 1 url "mailto:foo@example.com")
- ("<url:ftp.example.net/abc/>" 1 url "ftp://ftp.example.net/abc/"))
- "List of thing-at-point tests.
-Each list element should have the form
-
- (STRING POS THING RESULT)
-
-where STRING is a string of buffer contents, POS is the value of
-point, THING is a symbol argument for `thing-at-point', and
-RESULT should be the result of calling `thing-at-point' from that
-position to retrieve THING.")
-
-(ert-deftest thing-at-point-tests ()
- "Test the file-local variables implementation."
- (dolist (test thing-at-point-test-data)
- (with-temp-buffer
- (insert (nth 0 test))
- (goto-char (nth 1 test))
- (should (equal (thing-at-point (nth 2 test)) (nth 3 test))))))
-
-;;; thingatpt.el ends here
diff --git a/test/automated/thunk-tests.el b/test/automated/thunk-tests.el
deleted file mode 100644
index 7abbd299ead..00000000000
--- a/test/automated/thunk-tests.el
+++ /dev/null
@@ -1,55 +0,0 @@
-;;; thunk-tests.el --- Tests for thunk.el -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Nicolas Petton <nicolas@petton.fr>
-;; Maintainer: emacs-devel@gnu.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/>.
-
-;;; Commentary:
-
-;; Tests for thunk.el
-
-;;; Code:
-
-(require 'ert)
-(require 'thunk)
-
-(ert-deftest thunk-should-be-lazy ()
- (let (x)
- (thunk-delay (setq x t))
- (should (null x))))
-
-(ert-deftest thunk-can-be-evaluated ()
- (let* (x
- (thunk (thunk-delay (setq x t))))
- (should-not (thunk-evaluated-p thunk))
- (should (null x))
- (thunk-force thunk)
- (should (thunk-evaluated-p thunk))
- (should x)))
-
-(ert-deftest thunk-evaluation-is-cached ()
- (let* ((x 0)
- (thunk (thunk-delay (setq x (1+ x)))))
- (thunk-force thunk)
- (should (= x 1))
- (thunk-force thunk)
- (should (= x 1))))
-
-(provide 'thunk-tests)
-;;; thunk-tests.el ends here
diff --git a/test/automated/tildify-tests.el b/test/automated/tildify-tests.el
deleted file mode 100644
index 788abe7f731..00000000000
--- a/test/automated/tildify-tests.el
+++ /dev/null
@@ -1,264 +0,0 @@
-;;; tildify-test.el --- ERT tests for tildify.el -*- lexical-binding: t -*-
-
-;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
-
-;; Author: Michal Nazarewicz <mina86@mina86.com>
-;; Version: 4.5
-;; Keywords: text, TeX, SGML, wp
-
-;; 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/>.
-
-;;; Commentary:
-
-;; This package defines regression tests for the tildify package.
-
-;;; Code:
-
-(require 'ert)
-(require 'tildify)
-
-(defun tildify-test--example-sentence (space)
- "Return an example sentence with SPACE where hard space is required."
- (concat "Lorem ipsum v" space "dolor sit amet, a" space
- "consectetur adipiscing elit."))
-
-
-(defun tildify-test--example-html (sentence &optional with-nbsp is-xml)
- "Return an example HTML code.
-SENTENCE is placed where spaces should not be replaced with hard spaces, and
-WITH-NBSP is placed where spaces should be replaced with hard spaces. If the
-latter is missing, SENTENCE will be used in all placeholder positions.
-If IS-XML is non-nil, <pre> tag is not treated specially."
- (let ((with-nbsp (or with-nbsp sentence)))
- (concat "<p>" with-nbsp "</p>\n"
- "<pre>" (if is-xml with-nbsp sentence) "</pre>\n"
- "<! -- " sentence " -- >\n"
- "<p>" with-nbsp "</p>\n"
- "<" sentence ">\n")))
-
-
-(defun tildify-test--test (modes input expected)
- "Test tildify running in MODES.
-INPUT is the initial content of the buffer and EXPECTED is expected result
-after `tildify-buffer' is run."
- (with-temp-buffer
- (setq-local buffer-file-coding-system 'utf-8)
- (dolist (mode modes)
- (erase-buffer)
- (funcall mode)
- (let ((header (concat "Testing `tildify-buffer' in "
- (symbol-name mode) "\n")))
- (insert header input)
- (tildify-buffer t)
- (should (string-equal (concat header expected) (buffer-string))))
- (erase-buffer)
- (let ((header (concat "Testing `tildify-region' in "
- (symbol-name mode) "\n")))
- (insert header input)
- (tildify-region (point-min) (point-max) t)
- (should (string-equal (concat header expected) (buffer-string)))))))
-
-(ert-deftest tildify-test-html ()
- "Tests tildification in an HTML document"
- (let* ((sentence (tildify-test--example-sentence " "))
- (with-nbsp (tildify-test--example-sentence " ")))
- (tildify-test--test '(html-mode sgml-mode)
- (tildify-test--example-html sentence sentence)
- (tildify-test--example-html sentence with-nbsp))))
-
-(ert-deftest tildify-test-xml ()
- "Tests tildification in an XML document"
- (let* ((sentence (tildify-test--example-sentence " "))
- (with-nbsp (tildify-test--example-sentence " ")))
- (tildify-test--test '(nxml-mode)
- (tildify-test--example-html sentence sentence t)
- (tildify-test--example-html sentence with-nbsp t))))
-
-
-(defun tildify-test--example-tex (sentence &optional with-nbsp)
- "Return an example (La)Tex code.
-SENTENCE is placed where spaces should not be replaced with hard spaces, and
-WITH-NBSP is placed where spaces should be replaced with hard spaces. If the
-latter is missing, SENTENCE will be used in all placeholder positions."
- (let ((with-nbsp (or with-nbsp sentence)))
- (concat with-nbsp "\n"
- "\\begin{verbatim}\n" sentence "\n\\end{verbatim}\n"
- "\\verb#" sentence "#\n"
- "$$" sentence "$$\n"
- "$" sentence "$\n"
- "\\[" sentence "\\]\n"
- "\\v A % " sentence "\n"
- with-nbsp "\n")))
-
-(ert-deftest tildify-test-tex ()
- "Tests tildification in a (La)TeX document"
- (let* ((sentence (tildify-test--example-sentence " "))
- (with-nbsp (tildify-test--example-sentence "~")))
- (tildify-test--test '(tex-mode latex-mode plain-tex-mode)
- (tildify-test--example-tex sentence sentence)
- (tildify-test--example-tex sentence with-nbsp))))
-
-
-(ert-deftest tildify-test-find-env-end-re-bug ()
- "Tests generation of end-regex using mix of indexes and strings"
- (with-temp-buffer
- (insert "foo whatever end-foo")
- (goto-char (point-min))
- (should (string-equal "end-foo"
- (tildify--find-env "foo\\|bar"
- '(("foo\\|bar" . ("end-" 0))))))))
-
-
-(ert-deftest tildify-test-find-env-group-index-bug ()
- "Tests generation of match-string indexes"
- (with-temp-buffer
- (let ((pairs '(("start-\\(foo\\|bar\\)" . ("end-" 1))
- ("open-\\(foo\\|bar\\)" . ("close-" 1))))
- (beg-re "start-\\(foo\\|bar\\)\\|open-\\(foo\\|bar\\)"))
- (insert "open-foo whatever close-foo")
- (goto-char (point-min))
- (should (string-equal "close-foo" (tildify--find-env beg-re pairs))))))
-
-
-(defmacro with-test-foreach (expected &rest body)
- "Helper macro for testing foreach functions.
-BODY has access to pairs variable and called lambda."
- (declare (indent 1))
- (let ((got (make-symbol "got")))
- `(with-temp-buffer
- (insert "1 /- 2 -/ 3 V~ 4 ~ 5 /- 6 -/ 7")
- (let* ((pairs '(("/-" . "-/") ("V\\(.\\)" . (1))))
- (,got "")
- (called (lambda (s e)
- (setq ,got (concat ,got (buffer-substring s e))))))
- (setq-local tildify-foreach-region-function
- (apply-partially 'tildify-foreach-ignore-environments
- pairs))
- ,@body
- (should (string-equal ,expected ,got))))))
-
-(ert-deftest tildify-test-foreach-ignore-environments ()
- "Basic test of `tildify-foreach-ignore-environments'"
- (with-test-foreach "1 3 5 7"
- (tildify-foreach-ignore-environments pairs called (point-min) (point-max))))
-
-
-(ert-deftest tildify-test-foreach-ignore-environments-early-return ()
- "Test whether `tildify-foreach-ignore-environments' returns early
-The function must terminate as soon as callback returns nil."
- (with-test-foreach "1 "
- (tildify-foreach-ignore-environments
- pairs (lambda (start end) (funcall called start end) nil)
- (point-min) (point-max))))
-
-(ert-deftest tildify-test-foreach-region ()
- "Basic test of `tildify--foreach-region'"
- (with-test-foreach "1 3 5 7"
- (tildify--foreach-region called (point-min) (point-max))))
-
-(ert-deftest tildify-test-foreach-region-early-return ()
- "Test whether `tildify--foreach-ignore' returns early
-The function must terminate as soon as callback returns nil."
- (with-test-foreach "1 "
- (tildify--foreach-region (lambda (start end) (funcall called start end) nil)
- (point-min) (point-max))))
-
-(ert-deftest tildify-test-foreach-region-limit-region ()
- "Test whether `tildify--foreach-ignore' limits callback to given region"
- (with-test-foreach "3 "
- (tildify--foreach-region called
- (+ (point-min) 10) (+ (point-min) 16))) ; start at "3" end past "4"
- (with-test-foreach "3 5"
- (tildify--foreach-region called
- (+ (point-min) 10) (+ (point-min) 20)))) ; start at "3" end past "5"
-
-
-(defun tildify-space-test--test (modes nbsp env-open &optional set-space-string)
- (with-temp-buffer
- (setq-local buffer-file-coding-system 'utf-8)
- (dolist (mode modes)
- (funcall mode)
- (when set-space-string
- (setq-local tildify-space-string nbsp))
- (let ((header (concat "Testing `tildify-space' in "
- (symbol-name mode) "\n")))
- ;; Replace space with hard space.
- (erase-buffer)
- (insert header "Lorem v ")
- (should (tildify-space))
- (should (string-equal (concat header "Lorem v" nbsp) (buffer-string)))
- ;; Inside and ignore environment, replacing does not happen.
- (erase-buffer)
- (insert header env-open "Lorem v ")
- (should (not (tildify-space)))
- (should (string-equal (concat header env-open "Lorem v ")
- (buffer-string)))))))
-
-(ert-deftest tildify-space-test-html ()
- "Tests auto-tildification in an HTML document"
- (tildify-space-test--test '(html-mode sgml-mode) " " "<pre>"))
-
-(ert-deftest tildify-space-test-html-nbsp ()
- "Tests auto-tildification in an HTML document"
- (tildify-space-test--test '(html-mode sgml-mode) "&nbsp;" "<pre>" t))
-
-(ert-deftest tildify-space-test-xml ()
- "Tests auto-tildification in an XML document"
- (tildify-space-test--test '(nxml-mode) " " "<! -- "))
-
-(ert-deftest tildify-space-test-tex ()
- "Tests tildification in a TeX document"
- (tildify-space-test--test '(tex-mode latex-mode plain-tex-mode)
- "~" "\\verb# "))
-
-
-(defun tildify-space-undo-test--test
- (modes nbsp env-open &optional set-space-string)
- (with-temp-buffer
- (setq-local buffer-file-coding-system 'utf-8)
- (dolist (mode modes)
- (funcall mode)
- (when set-space-string
- (setq-local tildify-space-string nbsp))
- (let ((header (concat "Testing double-space-undos in "
- (symbol-name mode) "\n")))
- (erase-buffer)
- (insert header "Lorem v" nbsp " ")
- (should (not (tildify-space)))
- (should (string-equal (concat header "Lorem v ") (buffer-string)))))))
-
-(ert-deftest tildify-space-undo-test-html ()
- "Tests auto-tildification in an HTML document"
- (tildify-space-undo-test--test '(html-mode sgml-mode) " " "<pre>"))
-
-(ert-deftest tildify-space-undo-test-html-nbsp ()
- "Tests auto-tildification in an HTML document"
- (tildify-space-undo-test--test '(html-mode sgml-mode) "&nbsp;" "<pre>" t))
-
-(ert-deftest tildify-space-undo-test-xml ()
- "Tests auto-tildification in an XML document"
- (tildify-space-undo-test--test '(nxml-mode) " " "<! -- "))
-
-(ert-deftest tildify-space-undo-test-tex ()
- "Tests tildification in a TeX document"
- (tildify-space-undo-test--test '(tex-mode latex-mode plain-tex-mode)
- "~" "\\verb# "))
-
-
-
-(provide 'tildify-tests)
-
-;;; tildify-tests.el ends here
diff --git a/test/automated/timer-tests.el b/test/automated/timer-tests.el
deleted file mode 100644
index b006b398a81..00000000000
--- a/test/automated/timer-tests.el
+++ /dev/null
@@ -1,42 +0,0 @@
-;;; timer-tests.el --- tests for timers -*- lexical-binding:t -*-
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; 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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(ert-deftest timer-tests-sit-for ()
- (let ((timer-ran nil)
- ;; Want sit-for behavior when interactive
- (noninteractive nil))
- (run-at-time '(0 0 0 0)
- nil
- (lambda () (setq timer-ran t)))
- ;; The test assumes run-at-time didn't take the liberty of firing
- ;; the timer, so assert the test's assumption
- (should (not timer-ran))
- (sit-for 0 t)
- (should timer-ran)))
-
-(ert-deftest timer-tests-debug-timer-check ()
- ;; This function exists only if --enable-checking.
- (if (fboundp 'debug-timer-check)
- (should (debug-timer-check)) t))
-
-;;; timer-tests.el ends here
diff --git a/test/automated/tramp-tests.el b/test/automated/tramp-tests.el
deleted file mode 100644
index c5cab7d5991..00000000000
--- a/test/automated/tramp-tests.el
+++ /dev/null
@@ -1,2255 +0,0 @@
-;;; tramp-tests.el --- Tests of remote file access
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Michael Albinus <michael.albinus@gmx.de>
-
-;; This program 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.
-;;
-;; This program 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 this program. If not, see `http://www.gnu.org/licenses/'.
-
-;;; Commentary:
-
-;; The tests require a recent ert.el from Emacs 24.4.
-
-;; Some of the tests require access to a remote host files. Since
-;; this could be problematic, a mock-up connection method "mock" is
-;; used. Emulating a remote connection, it simply calls "sh -i".
-;; Tramp's file name handlers still run, so this test is sufficient
-;; except for connection establishing.
-
-;; If you want to test a real Tramp connection, set
-;; $REMOTE_TEMPORARY_FILE_DIRECTORY to a suitable value in order to
-;; overwrite the default value. If you want to skip tests accessing a
-;; remote host, set this environment variable to "/dev/null" or
-;; whatever is appropriate on your system.
-
-;; A whole test run can be performed calling the command `tramp-test-all'.
-
-;;; Code:
-
-(require 'ert)
-(require 'tramp)
-(require 'vc)
-(require 'vc-bzr)
-(require 'vc-git)
-(require 'vc-hg)
-
-(declare-function tramp-find-executable "tramp-sh")
-(declare-function tramp-get-remote-path "tramp-sh")
-(declare-function tramp-get-remote-stat "tramp-sh")
-(declare-function tramp-get-remote-perl "tramp-sh")
-(defvar tramp-copy-size-limit)
-(defvar tramp-persistency-file-name)
-(defvar tramp-remote-process-environment)
-
-;; There is no default value on w32 systems, which could work out of the box.
-(defconst tramp-test-temporary-file-directory
- (cond
- ((getenv "REMOTE_TEMPORARY_FILE_DIRECTORY"))
- ((eq system-type 'windows-nt) null-device)
- (t (add-to-list
- 'tramp-methods
- '("mock"
- (tramp-login-program "sh")
- (tramp-login-args (("-i")))
- (tramp-remote-shell "/bin/sh")
- (tramp-remote-shell-args ("-c"))
- (tramp-connection-timeout 10)))
- (format "/mock::%s" temporary-file-directory)))
- "Temporary directory for Tramp tests.")
-
-(setq password-cache-expiry nil
- tramp-verbose 0
- tramp-copy-size-limit nil
- tramp-message-show-message nil
- tramp-persistency-file-name nil)
-
-;; This shall happen on hydra only.
-(when (getenv "NIX_STORE")
- (add-to-list 'tramp-remote-path 'tramp-own-remote-path))
-
-(defvar tramp--test-enabled-checked nil
- "Cached result of `tramp--test-enabled'.
-If the function did run, the value is a cons cell, the `cdr'
-being the result.")
-
-(defun tramp--test-enabled ()
- "Whether remote file access is enabled."
- (unless (consp tramp--test-enabled-checked)
- (setq
- tramp--test-enabled-checked
- (cons
- t (ignore-errors
- (and
- (file-remote-p tramp-test-temporary-file-directory)
- (file-directory-p tramp-test-temporary-file-directory)
- (file-writable-p tramp-test-temporary-file-directory))))))
-
- (when (cdr tramp--test-enabled-checked)
- ;; Cleanup connection.
- (ignore-errors
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)))
-
- ;; Return result.
- (cdr tramp--test-enabled-checked))
-
-(defun tramp--test-make-temp-name (&optional local)
- "Create a temporary file name for test."
- (expand-file-name
- (make-temp-name "tramp-test")
- (if local temporary-file-directory tramp-test-temporary-file-directory)))
-
-(defmacro tramp--instrument-test-case (verbose &rest body)
- "Run BODY with `tramp-verbose' equal VERBOSE.
-Print the the content of the Tramp debug buffer, if BODY does not
-eval properly in `should', `should-not' or `should-error'. BODY
-shall not contain a timeout."
- (declare (indent 1) (debug (natnump body)))
- `(let ((tramp-verbose ,verbose)
- (tramp-message-show-message t)
- (tramp-debug-on-error t)
- (debug-ignored-errors
- (cons "^make-symbolic-link not supported$" debug-ignored-errors)))
- (unwind-protect
- (progn ,@body)
- (when (> tramp-verbose 3)
- (with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
- (with-current-buffer (tramp-get-connection-buffer v)
- (message "%s" (buffer-string)))
- (with-current-buffer (tramp-get-debug-buffer v)
- (message "%s" (buffer-string))))))))
-
-(ert-deftest tramp-test00-availability ()
- "Test availability of Tramp functions."
- :expected-result (if (tramp--test-enabled) :passed :failed)
- (message "Remote directory: `%s'" tramp-test-temporary-file-directory)
- (should (ignore-errors
- (and
- (file-remote-p tramp-test-temporary-file-directory)
- (file-directory-p tramp-test-temporary-file-directory)
- (file-writable-p tramp-test-temporary-file-directory)))))
-
-(ert-deftest tramp-test01-file-name-syntax ()
- "Check remote file name syntax."
- ;; Simple cases.
- (should (tramp-tramp-file-p "/method::"))
- (should (tramp-tramp-file-p "/host:"))
- (should (tramp-tramp-file-p "/user@:"))
- (should (tramp-tramp-file-p "/user@host:"))
- (should (tramp-tramp-file-p "/method:host:"))
- (should (tramp-tramp-file-p "/method:user@:"))
- (should (tramp-tramp-file-p "/method:user@host:"))
- (should (tramp-tramp-file-p "/method:user@email@host:"))
-
- ;; Using a port.
- (should (tramp-tramp-file-p "/host#1234:"))
- (should (tramp-tramp-file-p "/user@host#1234:"))
- (should (tramp-tramp-file-p "/method:host#1234:"))
- (should (tramp-tramp-file-p "/method:user@host#1234:"))
-
- ;; Using an IPv4 address.
- (should (tramp-tramp-file-p "/1.2.3.4:"))
- (should (tramp-tramp-file-p "/user@1.2.3.4:"))
- (should (tramp-tramp-file-p "/method:1.2.3.4:"))
- (should (tramp-tramp-file-p "/method:user@1.2.3.4:"))
-
- ;; Using an IPv6 address.
- (should (tramp-tramp-file-p "/[]:"))
- (should (tramp-tramp-file-p "/[::1]:"))
- (should (tramp-tramp-file-p "/user@[::1]:"))
- (should (tramp-tramp-file-p "/method:[::1]:"))
- (should (tramp-tramp-file-p "/method:user@[::1]:"))
-
- ;; Local file name part.
- (should (tramp-tramp-file-p "/host:/:"))
- (should (tramp-tramp-file-p "/method:::"))
- (should (tramp-tramp-file-p "/method::/path/to/file"))
- (should (tramp-tramp-file-p "/method::file"))
-
- ;; Multihop.
- (should (tramp-tramp-file-p "/method1:|method2::"))
- (should (tramp-tramp-file-p "/method1:host1|host2:"))
- (should (tramp-tramp-file-p "/method1:host1|method2:host2:"))
- (should (tramp-tramp-file-p "/method1:user1@host1|method2:user2@host2:"))
- (should (tramp-tramp-file-p
- "/method1:user1@host1|method2:user2@host2|method3:user3@host3:"))
-
- ;; No strings.
- (should-not (tramp-tramp-file-p nil))
- (should-not (tramp-tramp-file-p 'symbol))
- ;; "/:" suppresses file name handlers.
- (should-not (tramp-tramp-file-p "/::"))
- (should-not (tramp-tramp-file-p "/:@:"))
- (should-not (tramp-tramp-file-p "/:[]:"))
- ;; Multihops require a method.
- (should-not (tramp-tramp-file-p "/host1|host2:"))
- ;; Methods or hostnames shall be at least two characters on MS Windows.
- (when (memq system-type '(cygwin windows-nt))
- (should-not (tramp-tramp-file-p "/c:/path/to/file"))
- (should-not (tramp-tramp-file-p "/c::/path/to/file"))))
-
-(ert-deftest tramp-test02-file-name-dissect ()
- "Check remote file name components."
- (let ((tramp-default-method "default-method")
- (tramp-default-user "default-user")
- (tramp-default-host "default-host"))
- ;; Expand `tramp-default-user' and `tramp-default-host'.
- (should (string-equal
- (file-remote-p "/method::")
- (format "/%s:%s@%s:" "method" "default-user" "default-host")))
- (should (string-equal (file-remote-p "/method::" 'method) "method"))
- (should (string-equal (file-remote-p "/method::" 'user) "default-user"))
- (should (string-equal (file-remote-p "/method::" 'host) "default-host"))
- (should (string-equal (file-remote-p "/method::" 'localname) ""))
- (should (string-equal (file-remote-p "/method::" 'hop) nil))
-
- ;; Expand `tramp-default-method' and `tramp-default-user'.
- (should (string-equal
- (file-remote-p "/host:")
- (format "/%s:%s@%s:" "default-method" "default-user" "host")))
- (should (string-equal (file-remote-p "/host:" 'method) "default-method"))
- (should (string-equal (file-remote-p "/host:" 'user) "default-user"))
- (should (string-equal (file-remote-p "/host:" 'host) "host"))
- (should (string-equal (file-remote-p "/host:" 'localname) ""))
- (should (string-equal (file-remote-p "/host:" 'hop) nil))
-
- ;; Expand `tramp-default-method' and `tramp-default-host'.
- (should (string-equal
- (file-remote-p "/user@:")
- (format "/%s:%s@%s:" "default-method""user" "default-host")))
- (should (string-equal (file-remote-p "/user@:" 'method) "default-method"))
- (should (string-equal (file-remote-p "/user@:" 'user) "user"))
- (should (string-equal (file-remote-p "/user@:" 'host) "default-host"))
- (should (string-equal (file-remote-p "/user@:" 'localname) ""))
- (should (string-equal (file-remote-p "/user@:" 'hop) nil))
-
- ;; Expand `tramp-default-method'.
- (should (string-equal
- (file-remote-p "/user@host:")
- (format "/%s:%s@%s:" "default-method" "user" "host")))
- (should (string-equal
- (file-remote-p "/user@host:" 'method) "default-method"))
- (should (string-equal (file-remote-p "/user@host:" 'user) "user"))
- (should (string-equal (file-remote-p "/user@host:" 'host) "host"))
- (should (string-equal (file-remote-p "/user@host:" 'localname) ""))
- (should (string-equal (file-remote-p "/user@host:" 'hop) nil))
-
- ;; Expand `tramp-default-user'.
- (should (string-equal
- (file-remote-p "/method:host:")
- (format "/%s:%s@%s:" "method" "default-user" "host")))
- (should (string-equal (file-remote-p "/method:host:" 'method) "method"))
- (should (string-equal (file-remote-p "/method:host:" 'user) "default-user"))
- (should (string-equal (file-remote-p "/method:host:" 'host) "host"))
- (should (string-equal (file-remote-p "/method:host:" 'localname) ""))
- (should (string-equal (file-remote-p "/method:host:" 'hop) nil))
-
- ;; Expand `tramp-default-host'.
- (should (string-equal
- (file-remote-p "/method:user@:")
- (format "/%s:%s@%s:" "method" "user" "default-host")))
- (should (string-equal (file-remote-p "/method:user@:" 'method) "method"))
- (should (string-equal (file-remote-p "/method:user@:" 'user) "user"))
- (should (string-equal (file-remote-p "/method:user@:" 'host)
- "default-host"))
- (should (string-equal (file-remote-p "/method:user@:" 'localname) ""))
- (should (string-equal (file-remote-p "/method:user@:" 'hop) nil))
-
- ;; No expansion.
- (should (string-equal
- (file-remote-p "/method:user@host:")
- (format "/%s:%s@%s:" "method" "user" "host")))
- (should (string-equal
- (file-remote-p "/method:user@host:" 'method) "method"))
- (should (string-equal (file-remote-p "/method:user@host:" 'user) "user"))
- (should (string-equal (file-remote-p "/method:user@host:" 'host) "host"))
- (should (string-equal (file-remote-p "/method:user@host:" 'localname) ""))
- (should (string-equal (file-remote-p "/method:user@host:" 'hop) nil))
-
- ;; No expansion.
- (should (string-equal
- (file-remote-p "/method:user@email@host:")
- (format "/%s:%s@%s:" "method" "user@email" "host")))
- (should (string-equal
- (file-remote-p "/method:user@email@host:" 'method) "method"))
- (should (string-equal
- (file-remote-p "/method:user@email@host:" 'user) "user@email"))
- (should (string-equal
- (file-remote-p "/method:user@email@host:" 'host) "host"))
- (should (string-equal
- (file-remote-p "/method:user@email@host:" 'localname) ""))
- (should (string-equal
- (file-remote-p "/method:user@email@host:" 'hop) nil))
-
- ;; Expand `tramp-default-method' and `tramp-default-user'.
- (should (string-equal
- (file-remote-p "/host#1234:")
- (format "/%s:%s@%s:" "default-method" "default-user" "host#1234")))
- (should (string-equal
- (file-remote-p "/host#1234:" 'method) "default-method"))
- (should (string-equal (file-remote-p "/host#1234:" 'user) "default-user"))
- (should (string-equal (file-remote-p "/host#1234:" 'host) "host#1234"))
- (should (string-equal (file-remote-p "/host#1234:" 'localname) ""))
- (should (string-equal (file-remote-p "/host#1234:" 'hop) nil))
-
- ;; Expand `tramp-default-method'.
- (should (string-equal
- (file-remote-p "/user@host#1234:")
- (format "/%s:%s@%s:" "default-method" "user" "host#1234")))
- (should (string-equal
- (file-remote-p "/user@host#1234:" 'method) "default-method"))
- (should (string-equal (file-remote-p "/user@host#1234:" 'user) "user"))
- (should (string-equal (file-remote-p "/user@host#1234:" 'host) "host#1234"))
- (should (string-equal (file-remote-p "/user@host#1234:" 'localname) ""))
- (should (string-equal (file-remote-p "/user@host#1234:" 'hop) nil))
-
- ;; Expand `tramp-default-user'.
- (should (string-equal
- (file-remote-p "/method:host#1234:")
- (format "/%s:%s@%s:" "method" "default-user" "host#1234")))
- (should (string-equal
- (file-remote-p "/method:host#1234:" 'method) "method"))
- (should (string-equal
- (file-remote-p "/method:host#1234:" 'user) "default-user"))
- (should (string-equal
- (file-remote-p "/method:host#1234:" 'host) "host#1234"))
- (should (string-equal (file-remote-p "/method:host#1234:" 'localname) ""))
- (should (string-equal (file-remote-p "/method:host#1234:" 'hop) nil))
-
- ;; No expansion.
- (should (string-equal
- (file-remote-p "/method:user@host#1234:")
- (format "/%s:%s@%s:" "method" "user" "host#1234")))
- (should (string-equal
- (file-remote-p "/method:user@host#1234:" 'method) "method"))
- (should (string-equal
- (file-remote-p "/method:user@host#1234:" 'user) "user"))
- (should (string-equal
- (file-remote-p "/method:user@host#1234:" 'host) "host#1234"))
- (should (string-equal
- (file-remote-p "/method:user@host#1234:" 'localname) ""))
- (should (string-equal
- (file-remote-p "/method:user@host#1234:" 'hop) nil))
-
- ;; Expand `tramp-default-method' and `tramp-default-user'.
- (should (string-equal
- (file-remote-p "/1.2.3.4:")
- (format "/%s:%s@%s:" "default-method" "default-user" "1.2.3.4")))
- (should (string-equal (file-remote-p "/1.2.3.4:" 'method) "default-method"))
- (should (string-equal (file-remote-p "/1.2.3.4:" 'user) "default-user"))
- (should (string-equal (file-remote-p "/1.2.3.4:" 'host) "1.2.3.4"))
- (should (string-equal (file-remote-p "/1.2.3.4:" 'localname) ""))
- (should (string-equal (file-remote-p "/1.2.3.4:" 'hop) nil))
-
- ;; Expand `tramp-default-method'.
- (should (string-equal
- (file-remote-p "/user@1.2.3.4:")
- (format "/%s:%s@%s:" "default-method" "user" "1.2.3.4")))
- (should (string-equal
- (file-remote-p "/user@1.2.3.4:" 'method) "default-method"))
- (should (string-equal (file-remote-p "/user@1.2.3.4:" 'user) "user"))
- (should (string-equal (file-remote-p "/user@1.2.3.4:" 'host) "1.2.3.4"))
- (should (string-equal (file-remote-p "/user@1.2.3.4:" 'localname) ""))
- (should (string-equal (file-remote-p "/user@1.2.3.4:" 'hop) nil))
-
- ;; Expand `tramp-default-user'.
- (should (string-equal
- (file-remote-p "/method:1.2.3.4:")
- (format "/%s:%s@%s:" "method" "default-user" "1.2.3.4")))
- (should (string-equal (file-remote-p "/method:1.2.3.4:" 'method) "method"))
- (should (string-equal
- (file-remote-p "/method:1.2.3.4:" 'user) "default-user"))
- (should (string-equal (file-remote-p "/method:1.2.3.4:" 'host) "1.2.3.4"))
- (should (string-equal (file-remote-p "/method:1.2.3.4:" 'localname) ""))
- (should (string-equal (file-remote-p "/method:1.2.3.4:" 'hop) nil))
-
- ;; No expansion.
- (should (string-equal
- (file-remote-p "/method:user@1.2.3.4:")
- (format "/%s:%s@%s:" "method" "user" "1.2.3.4")))
- (should (string-equal
- (file-remote-p "/method:user@1.2.3.4:" 'method) "method"))
- (should (string-equal (file-remote-p "/method:user@1.2.3.4:" 'user) "user"))
- (should (string-equal
- (file-remote-p "/method:user@1.2.3.4:" 'host) "1.2.3.4"))
- (should (string-equal
- (file-remote-p "/method:user@1.2.3.4:" 'localname) ""))
- (should (string-equal
- (file-remote-p "/method:user@1.2.3.4:" 'hop) nil))
-
- ;; Expand `tramp-default-method', `tramp-default-user' and
- ;; `tramp-default-host'.
- (should (string-equal
- (file-remote-p "/[]:")
- (format
- "/%s:%s@%s:" "default-method" "default-user" "default-host")))
- (should (string-equal (file-remote-p "/[]:" 'method) "default-method"))
- (should (string-equal (file-remote-p "/[]:" 'user) "default-user"))
- (should (string-equal (file-remote-p "/[]:" 'host) "default-host"))
- (should (string-equal (file-remote-p "/[]:" 'localname) ""))
- (should (string-equal (file-remote-p "/[]:" 'hop) nil))
-
- ;; Expand `tramp-default-method' and `tramp-default-user'.
- (let ((tramp-default-host "::1"))
- (should (string-equal
- (file-remote-p "/[]:")
- (format "/%s:%s@%s:" "default-method" "default-user" "[::1]")))
- (should (string-equal (file-remote-p "/[]:" 'method) "default-method"))
- (should (string-equal (file-remote-p "/[]:" 'user) "default-user"))
- (should (string-equal (file-remote-p "/[]:" 'host) "::1"))
- (should (string-equal (file-remote-p "/[]:" 'localname) ""))
- (should (string-equal (file-remote-p "/[]:" 'hop) nil)))
-
- ;; Expand `tramp-default-method' and `tramp-default-user'.
- (should (string-equal
- (file-remote-p "/[::1]:")
- (format "/%s:%s@%s:" "default-method" "default-user" "[::1]")))
- (should (string-equal (file-remote-p "/[::1]:" 'method) "default-method"))
- (should (string-equal (file-remote-p "/[::1]:" 'user) "default-user"))
- (should (string-equal (file-remote-p "/[::1]:" 'host) "::1"))
- (should (string-equal (file-remote-p "/[::1]:" 'localname) ""))
- (should (string-equal (file-remote-p "/[::1]:" 'hop) nil))
-
- ;; Expand `tramp-default-method'.
- (should (string-equal
- (file-remote-p "/user@[::1]:")
- (format "/%s:%s@%s:" "default-method" "user" "[::1]")))
- (should (string-equal
- (file-remote-p "/user@[::1]:" 'method) "default-method"))
- (should (string-equal (file-remote-p "/user@[::1]:" 'user) "user"))
- (should (string-equal (file-remote-p "/user@[::1]:" 'host) "::1"))
- (should (string-equal (file-remote-p "/user@[::1]:" 'localname) ""))
- (should (string-equal (file-remote-p "/user@[::1]:" 'hop) nil))
-
- ;; Expand `tramp-default-user'.
- (should (string-equal
- (file-remote-p "/method:[::1]:")
- (format "/%s:%s@%s:" "method" "default-user" "[::1]")))
- (should (string-equal (file-remote-p "/method:[::1]:" 'method) "method"))
- (should (string-equal
- (file-remote-p "/method:[::1]:" 'user) "default-user"))
- (should (string-equal (file-remote-p "/method:[::1]:" 'host) "::1"))
- (should (string-equal (file-remote-p "/method:[::1]:" 'localname) ""))
- (should (string-equal (file-remote-p "/method:[::1]:" 'hop) nil))
-
- ;; No expansion.
- (should (string-equal
- (file-remote-p "/method:user@[::1]:")
- (format "/%s:%s@%s:" "method" "user" "[::1]")))
- (should (string-equal
- (file-remote-p "/method:user@[::1]:" 'method) "method"))
- (should (string-equal (file-remote-p "/method:user@[::1]:" 'user) "user"))
- (should (string-equal (file-remote-p "/method:user@[::1]:" 'host) "::1"))
- (should (string-equal
- (file-remote-p "/method:user@[::1]:" 'localname) ""))
- (should (string-equal (file-remote-p "/method:user@[::1]:" 'hop) nil))
-
- ;; Local file name part.
- (should (string-equal (file-remote-p "/host:/:" 'localname) "/:"))
- (should (string-equal (file-remote-p "/method:::" 'localname) ":"))
- (should (string-equal (file-remote-p "/method:: " 'localname) " "))
- (should (string-equal (file-remote-p "/method::file" 'localname) "file"))
- (should (string-equal
- (file-remote-p "/method::/path/to/file" 'localname)
- "/path/to/file"))
-
- ;; Multihop.
- (should
- (string-equal
- (file-remote-p "/method1:user1@host1|method2:user2@host2:/path/to/file")
- (format "/%s:%s@%s|%s:%s@%s:"
- "method1" "user1" "host1" "method2" "user2" "host2")))
- (should
- (string-equal
- (file-remote-p
- "/method1:user1@host1|method2:user2@host2:/path/to/file" 'method)
- "method2"))
- (should
- (string-equal
- (file-remote-p
- "/method1:user1@host1|method2:user2@host2:/path/to/file" 'user)
- "user2"))
- (should
- (string-equal
- (file-remote-p
- "/method1:user1@host1|method2:user2@host2:/path/to/file" 'host)
- "host2"))
- (should
- (string-equal
- (file-remote-p
- "/method1:user1@host1|method2:user2@host2:/path/to/file" 'localname)
- "/path/to/file"))
- (should
- (string-equal
- (file-remote-p
- "/method1:user1@host1|method2:user2@host2:/path/to/file" 'hop)
- (format "%s:%s@%s|"
- "method1" "user1" "host1")))
-
- (should
- (string-equal
- (file-remote-p
- "/method1:user1@host1|method2:user2@host2|method3:user3@host3:/path/to/file")
- (format "/%s:%s@%s|%s:%s@%s|%s:%s@%s:"
- "method1" "user1" "host1"
- "method2" "user2" "host2"
- "method3" "user3" "host3")))
- (should
- (string-equal
- (file-remote-p
- "/method1:user1@host1|method2:user2@host2|method3:user3@host3:/path/to/file"
- 'method)
- "method3"))
- (should
- (string-equal
- (file-remote-p
- "/method1:user1@host1|method2:user2@host2|method3:user3@host3:/path/to/file"
- 'user)
- "user3"))
- (should
- (string-equal
- (file-remote-p
- "/method1:user1@host1|method2:user2@host2|method3:user3@host3:/path/to/file"
- 'host)
- "host3"))
- (should
- (string-equal
- (file-remote-p
- "/method1:user1@host1|method2:user2@host2|method3:user3@host3:/path/to/file"
- 'localname)
- "/path/to/file"))
- (should
- (string-equal
- (file-remote-p
- "/method1:user1@host1|method2:user2@host2|method3:user3@host3:/path/to/file"
- 'hop)
- (format "%s:%s@%s|%s:%s@%s|"
- "method1" "user1" "host1" "method2" "user2" "host2")))))
-
-(ert-deftest tramp-test03-file-name-defaults ()
- "Check default values for some methods."
- ;; Default values in tramp-adb.el.
- (should (string-equal (file-remote-p "/adb::" 'host) ""))
- ;; Default values in tramp-ftp.el.
- (should (string-equal (file-remote-p "/ftp.host:" 'method) "ftp"))
- (dolist (u '("ftp" "anonymous"))
- (should (string-equal (file-remote-p (format "/%s@:" u) 'method) "ftp")))
- ;; Default values in tramp-gvfs.el.
- (when (and (load "tramp-gvfs" 'noerror 'nomessage)
- (symbol-value 'tramp-gvfs-enabled))
- (should (string-equal (file-remote-p "/synce::" 'user) nil)))
- ;; Default values in tramp-gw.el.
- (dolist (m '("tunnel" "socks"))
- (should
- (string-equal (file-remote-p (format "/%s::" m) 'user) (user-login-name))))
- ;; Default values in tramp-sh.el.
- (dolist (h `("127.0.0.1" "[::1]" "localhost" "localhost6" ,(system-name)))
- (should (string-equal (file-remote-p (format "/root@%s:" h) 'method) "su")))
- (dolist (m '("su" "sudo" "ksu"))
- (should (string-equal (file-remote-p (format "/%s::" m) 'user) "root")))
- (dolist (m '("rcp" "remcp" "rsh" "telnet" "krlogin" "fcp"))
- (should
- (string-equal (file-remote-p (format "/%s::" m) 'user) (user-login-name))))
- ;; Default values in tramp-smb.el.
- (should (string-equal (file-remote-p "/user%domain@host:" 'method) "smb"))
- (should (string-equal (file-remote-p "/smb::" 'user) nil)))
-
-(ert-deftest tramp-test04-substitute-in-file-name ()
- "Check `substitute-in-file-name'."
- (should (string-equal (substitute-in-file-name "/method:host://foo") "/foo"))
- (should
- (string-equal
- (substitute-in-file-name "/method:host:/path//foo") "/method:host:/foo"))
- (should
- (string-equal (substitute-in-file-name "/method:host:/path///foo") "/foo"))
- (should
- (string-equal
- (substitute-in-file-name "/method:host:/path/~/foo") "/method:host:~/foo"))
- (should
- (string-equal (substitute-in-file-name "/method:host:/path//~/foo") "~/foo"))
- (let (process-environment)
- (should
- (string-equal
- (substitute-in-file-name "/method:host:/path/$FOO")
- "/method:host:/path/$FOO"))
- (setenv "FOO" "bla")
- (should
- (string-equal
- (substitute-in-file-name "/method:host:/path/$FOO")
- "/method:host:/path/bla"))
- (should
- (string-equal
- (substitute-in-file-name "/method:host:/path/$$FOO")
- "/method:host:/path/$FOO"))))
-
-(ert-deftest tramp-test05-expand-file-name ()
- "Check `expand-file-name'."
- (should
- (string-equal
- (expand-file-name "/method:host:/path/./file") "/method:host:/path/file"))
- (should
- (string-equal
- (expand-file-name "/method:host:/path/../file") "/method:host:/file")))
-
-(ert-deftest tramp-test06-directory-file-name ()
- "Check `directory-file-name'.
-This checks also `file-name-as-directory', `file-name-directory',
-`file-name-nondirectory' and `unhandled-file-name-directory'."
- (should
- (string-equal
- (directory-file-name "/method:host:/path/to/file")
- "/method:host:/path/to/file"))
- (should
- (string-equal
- (directory-file-name "/method:host:/path/to/file/")
- "/method:host:/path/to/file"))
- (should
- (string-equal
- (file-name-as-directory "/method:host:/path/to/file")
- "/method:host:/path/to/file/"))
- (should
- (string-equal
- (file-name-as-directory "/method:host:/path/to/file/")
- "/method:host:/path/to/file/"))
- (should
- (string-equal
- (file-name-directory "/method:host:/path/to/file")
- "/method:host:/path/to/"))
- (should
- (string-equal
- (file-name-directory "/method:host:/path/to/file/")
- "/method:host:/path/to/file/"))
- (should
- (string-equal (file-name-nondirectory "/method:host:/path/to/file") "file"))
- (should
- (string-equal (file-name-nondirectory "/method:host:/path/to/file/") ""))
- (should-not
- (unhandled-file-name-directory "/method:host:/path/to/file")))
-
-(ert-deftest tramp-test07-file-exists-p ()
- "Check `file-exist-p', `write-region' and `delete-file'."
- (skip-unless (tramp--test-enabled))
-
- (let ((tmp-name (tramp--test-make-temp-name)))
- (should-not (file-exists-p tmp-name))
- (write-region "foo" nil tmp-name)
- (should (file-exists-p tmp-name))
- (delete-file tmp-name)
- (should-not (file-exists-p tmp-name))))
-
-(ert-deftest tramp-test08-file-local-copy ()
- "Check `file-local-copy'."
- (skip-unless (tramp--test-enabled))
-
- (let ((tmp-name1 (tramp--test-make-temp-name))
- tmp-name2)
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name1)
- (should (setq tmp-name2 (file-local-copy tmp-name1)))
- (with-temp-buffer
- (insert-file-contents tmp-name2)
- (should (string-equal (buffer-string) "foo")))
- ;; Check also that a file transfer with compression works.
- (let ((default-directory tramp-test-temporary-file-directory)
- (tramp-copy-size-limit 4)
- (tramp-inline-compress-start-size 2))
- (delete-file tmp-name2)
- (should (setq tmp-name2 (file-local-copy tmp-name1)))))
-
- ;; Cleanup.
- (ignore-errors
- (delete-file tmp-name1)
- (delete-file tmp-name2)))))
-
-(ert-deftest tramp-test09-insert-file-contents ()
- "Check `insert-file-contents'."
- (skip-unless (tramp--test-enabled))
-
- (let ((tmp-name (tramp--test-make-temp-name)))
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name)
- (with-temp-buffer
- (insert-file-contents tmp-name)
- (should (string-equal (buffer-string) "foo"))
- (insert-file-contents tmp-name)
- (should (string-equal (buffer-string) "foofoo"))
- ;; Insert partly.
- (insert-file-contents tmp-name nil 1 3)
- (should (string-equal (buffer-string) "oofoofoo"))
- ;; Replace.
- (insert-file-contents tmp-name nil nil nil 'replace)
- (should (string-equal (buffer-string) "foo"))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name)))))
-
-(ert-deftest tramp-test10-write-region ()
- "Check `write-region'."
- (skip-unless (tramp--test-enabled))
-
- (let ((tmp-name (tramp--test-make-temp-name)))
- (unwind-protect
- (progn
- (with-temp-buffer
- (insert "foo")
- (write-region nil nil tmp-name))
- (with-temp-buffer
- (insert-file-contents tmp-name)
- (should (string-equal (buffer-string) "foo")))
- ;; Append.
- (with-temp-buffer
- (insert "bla")
- (write-region nil nil tmp-name 'append))
- (with-temp-buffer
- (insert-file-contents tmp-name)
- (should (string-equal (buffer-string) "foobla")))
- ;; Write string.
- (write-region "foo" nil tmp-name)
- (with-temp-buffer
- (insert-file-contents tmp-name)
- (should (string-equal (buffer-string) "foo")))
- ;; Write partly.
- (with-temp-buffer
- (insert "123456789")
- (write-region 3 5 tmp-name))
- (with-temp-buffer
- (insert-file-contents tmp-name)
- (should (string-equal (buffer-string) "34"))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name)))))
-
-(ert-deftest tramp-test11-copy-file ()
- "Check `copy-file'."
- (skip-unless (tramp--test-enabled))
-
- (let ((tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (tramp--test-make-temp-name))
- (tmp-name3 (tramp--test-make-temp-name))
- (tmp-name4 (tramp--test-make-temp-name 'local))
- (tmp-name5 (tramp--test-make-temp-name 'local)))
-
- ;; Copy on remote side.
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name1)
- (copy-file tmp-name1 tmp-name2)
- (should (file-exists-p tmp-name2))
- (with-temp-buffer
- (insert-file-contents tmp-name2)
- (should (string-equal (buffer-string) "foo")))
- (should-error (copy-file tmp-name1 tmp-name2))
- (copy-file tmp-name1 tmp-name2 'ok)
- (make-directory tmp-name3)
- (copy-file tmp-name1 tmp-name3)
- (should
- (file-exists-p
- (expand-file-name (file-name-nondirectory tmp-name1) tmp-name3))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name1))
- (ignore-errors (delete-file tmp-name2))
- (ignore-errors (delete-directory tmp-name3 'recursive)))
-
- ;; Copy from remote side to local side.
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name1)
- (copy-file tmp-name1 tmp-name4)
- (should (file-exists-p tmp-name4))
- (with-temp-buffer
- (insert-file-contents tmp-name4)
- (should (string-equal (buffer-string) "foo")))
- (should-error (copy-file tmp-name1 tmp-name4))
- (copy-file tmp-name1 tmp-name4 'ok)
- (make-directory tmp-name5)
- (copy-file tmp-name1 tmp-name5)
- (should
- (file-exists-p
- (expand-file-name (file-name-nondirectory tmp-name1) tmp-name5))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name1))
- (ignore-errors (delete-file tmp-name4))
- (ignore-errors (delete-directory tmp-name5 'recursive)))
-
- ;; Copy from local side to remote side.
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name4 nil 'nomessage)
- (copy-file tmp-name4 tmp-name1)
- (should (file-exists-p tmp-name1))
- (with-temp-buffer
- (insert-file-contents tmp-name1)
- (should (string-equal (buffer-string) "foo")))
- (should-error (copy-file tmp-name4 tmp-name1))
- (copy-file tmp-name4 tmp-name1 'ok)
- (make-directory tmp-name3)
- (copy-file tmp-name4 tmp-name3)
- (should
- (file-exists-p
- (expand-file-name (file-name-nondirectory tmp-name4) tmp-name3))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name1))
- (ignore-errors (delete-file tmp-name4))
- (ignore-errors (delete-directory tmp-name3 'recursive)))))
-
-(ert-deftest tramp-test12-rename-file ()
- "Check `rename-file'."
- (skip-unless (tramp--test-enabled))
-
- (let ((tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (tramp--test-make-temp-name))
- (tmp-name3 (tramp--test-make-temp-name))
- (tmp-name4 (tramp--test-make-temp-name 'local))
- (tmp-name5 (tramp--test-make-temp-name 'local)))
-
- ;; Rename on remote side.
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name1)
- (rename-file tmp-name1 tmp-name2)
- (should-not (file-exists-p tmp-name1))
- (should (file-exists-p tmp-name2))
- (with-temp-buffer
- (insert-file-contents tmp-name2)
- (should (string-equal (buffer-string) "foo")))
- (write-region "foo" nil tmp-name1)
- (should-error (rename-file tmp-name1 tmp-name2))
- (rename-file tmp-name1 tmp-name2 'ok)
- (should-not (file-exists-p tmp-name1))
- (write-region "foo" nil tmp-name1)
- (make-directory tmp-name3)
- (rename-file tmp-name1 tmp-name3)
- (should-not (file-exists-p tmp-name1))
- (should
- (file-exists-p
- (expand-file-name (file-name-nondirectory tmp-name1) tmp-name3))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name1))
- (ignore-errors (delete-file tmp-name2))
- (ignore-errors (delete-directory tmp-name3 'recursive)))
-
- ;; Rename from remote side to local side.
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name1)
- (rename-file tmp-name1 tmp-name4)
- (should-not (file-exists-p tmp-name1))
- (should (file-exists-p tmp-name4))
- (with-temp-buffer
- (insert-file-contents tmp-name4)
- (should (string-equal (buffer-string) "foo")))
- (write-region "foo" nil tmp-name1)
- (should-error (rename-file tmp-name1 tmp-name4))
- (rename-file tmp-name1 tmp-name4 'ok)
- (should-not (file-exists-p tmp-name1))
- (write-region "foo" nil tmp-name1)
- (make-directory tmp-name5)
- (rename-file tmp-name1 tmp-name5)
- (should-not (file-exists-p tmp-name1))
- (should
- (file-exists-p
- (expand-file-name (file-name-nondirectory tmp-name1) tmp-name5))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name1))
- (ignore-errors (delete-file tmp-name4))
- (ignore-errors (delete-directory tmp-name5 'recursive)))
-
- ;; Rename from local side to remote side.
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name4 nil 'nomessage)
- (rename-file tmp-name4 tmp-name1)
- (should-not (file-exists-p tmp-name4))
- (should (file-exists-p tmp-name1))
- (with-temp-buffer
- (insert-file-contents tmp-name1)
- (should (string-equal (buffer-string) "foo")))
- (write-region "foo" nil tmp-name4 nil 'nomessage)
- (should-error (rename-file tmp-name4 tmp-name1))
- (rename-file tmp-name4 tmp-name1 'ok)
- (should-not (file-exists-p tmp-name4))
- (write-region "foo" nil tmp-name4 nil 'nomessage)
- (make-directory tmp-name3)
- (rename-file tmp-name4 tmp-name3)
- (should-not (file-exists-p tmp-name4))
- (should
- (file-exists-p
- (expand-file-name (file-name-nondirectory tmp-name4) tmp-name3))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name1))
- (ignore-errors (delete-file tmp-name4))
- (ignore-errors (delete-directory tmp-name3 'recursive)))))
-
-(ert-deftest tramp-test13-make-directory ()
- "Check `make-directory'.
-This tests also `file-directory-p' and `file-accessible-directory-p'."
- (skip-unless (tramp--test-enabled))
-
- (let* ((tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (expand-file-name "foo/bar" tmp-name1)))
- (unwind-protect
- (progn
- (make-directory tmp-name1)
- (should (file-directory-p tmp-name1))
- (should (file-accessible-directory-p tmp-name1))
- (should-error (make-directory tmp-name2) :type 'file-error)
- (make-directory tmp-name2 'parents)
- (should (file-directory-p tmp-name2))
- (should (file-accessible-directory-p tmp-name2)))
-
- ;; Cleanup.
- (ignore-errors (delete-directory tmp-name1 'recursive)))))
-
-(ert-deftest tramp-test14-delete-directory ()
- "Check `delete-directory'."
- (skip-unless (tramp--test-enabled))
-
- (let ((tmp-name (tramp--test-make-temp-name)))
- ;; Delete empty directory.
- (make-directory tmp-name)
- (should (file-directory-p tmp-name))
- (delete-directory tmp-name)
- (should-not (file-directory-p tmp-name))
- ;; Delete non-empty directory.
- (make-directory tmp-name)
- (write-region "foo" nil (expand-file-name "bla" tmp-name))
- (should-error (delete-directory tmp-name) :type 'file-error)
- (delete-directory tmp-name 'recursive)
- (should-not (file-directory-p tmp-name))))
-
-(ert-deftest tramp-test15-copy-directory ()
- "Check `copy-directory'."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (not
- (eq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- 'tramp-smb-file-name-handler)))
-
- (let* ((tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (tramp--test-make-temp-name))
- (tmp-name3 (expand-file-name
- (file-name-nondirectory tmp-name1) tmp-name2))
- (tmp-name4 (expand-file-name "foo" tmp-name1))
- (tmp-name5 (expand-file-name "foo" tmp-name2))
- (tmp-name6 (expand-file-name "foo" tmp-name3)))
- (unwind-protect
- (progn
- ;; Copy empty directory.
- (make-directory tmp-name1)
- (write-region "foo" nil tmp-name4)
- (should (file-directory-p tmp-name1))
- (should (file-exists-p tmp-name4))
- (copy-directory tmp-name1 tmp-name2)
- (should (file-directory-p tmp-name2))
- (should (file-exists-p tmp-name5))
- ;; Target directory does exist already.
- (copy-directory tmp-name1 tmp-name2)
- (should (file-directory-p tmp-name3))
- (should (file-exists-p tmp-name6)))
-
- ;; Cleanup.
- (ignore-errors
- (delete-directory tmp-name1 'recursive)
- (delete-directory tmp-name2 'recursive)))))
-
-(ert-deftest tramp-test16-directory-files ()
- "Check `directory-files'."
- (skip-unless (tramp--test-enabled))
-
- (let* ((tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (expand-file-name "bla" tmp-name1))
- (tmp-name3 (expand-file-name "foo" tmp-name1)))
- (unwind-protect
- (progn
- (make-directory tmp-name1)
- (write-region "foo" nil tmp-name2)
- (write-region "bla" nil tmp-name3)
- (should (file-directory-p tmp-name1))
- (should (file-exists-p tmp-name2))
- (should (file-exists-p tmp-name3))
- (should (equal (directory-files tmp-name1) '("." ".." "bla" "foo")))
- (should (equal (directory-files tmp-name1 'full)
- `(,(concat tmp-name1 "/.")
- ,(concat tmp-name1 "/..")
- ,tmp-name2 ,tmp-name3)))
- (should (equal (directory-files
- tmp-name1 nil directory-files-no-dot-files-regexp)
- '("bla" "foo")))
- (should (equal (directory-files
- tmp-name1 'full directory-files-no-dot-files-regexp)
- `(,tmp-name2 ,tmp-name3))))
-
- ;; Cleanup.
- (ignore-errors (delete-directory tmp-name1 'recursive)))))
-
-(ert-deftest tramp-test17-insert-directory ()
- "Check `insert-directory'."
- (skip-unless (tramp--test-enabled))
-
- (let* ((tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (expand-file-name "foo" tmp-name1))
- ;; We test for the summary line. Keyword "total" could be localized.
- (process-environment
- (append '("LANG=C" "LANGUAGE=C" "LC_ALL=C") process-environment)))
- (unwind-protect
- (progn
- (make-directory tmp-name1)
- (write-region "foo" nil tmp-name2)
- (should (file-directory-p tmp-name1))
- (should (file-exists-p tmp-name2))
- (with-temp-buffer
- (insert-directory tmp-name1 nil)
- (goto-char (point-min))
- (should (looking-at-p (regexp-quote tmp-name1))))
- (with-temp-buffer
- (insert-directory tmp-name1 "-al")
- (goto-char (point-min))
- (should (looking-at-p (format "^.+ %s$" (regexp-quote tmp-name1)))))
- (with-temp-buffer
- (insert-directory (file-name-as-directory tmp-name1) "-al")
- (goto-char (point-min))
- (should
- (looking-at-p (format "^.+ %s/$" (regexp-quote tmp-name1)))))
- (with-temp-buffer
- (insert-directory
- (file-name-as-directory tmp-name1) "-al" nil 'full-directory-p)
- (goto-char (point-min))
- (should
- (looking-at-p
- (concat
- ;; There might be a summary line.
- "\\(total.+[[:digit:]]+\n\\)?"
- ;; We don't know in which order ".", ".." and "foo" appear.
- "\\(.+ \\(\\.?\\.\\|foo\\)\n\\)\\{3\\}")))))
-
- ;; Cleanup.
- (ignore-errors (delete-directory tmp-name1 'recursive)))))
-
-(ert-deftest tramp-test18-file-attributes ()
- "Check `file-attributes'.
-This tests also `file-readable-p' and `file-regular-p'."
- (skip-unless (tramp--test-enabled))
-
- ;; We must use `file-truename' for the temporary directory, because
- ;; it could be located on a symlinked directory. This would let the
- ;; test fail.
- (let* ((tramp-test-temporary-file-directory
- (file-truename tramp-test-temporary-file-directory))
- (tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (tramp--test-make-temp-name))
- ;; File name with "//".
- (tmp-name3
- (format
- "%s%s"
- (file-remote-p tmp-name1)
- (replace-regexp-in-string
- "/" "//" (file-remote-p tmp-name1 'localname))))
- attr)
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name1)
- (should (file-exists-p tmp-name1))
- (setq attr (file-attributes tmp-name1))
- (should (consp attr))
- (should (file-exists-p tmp-name1))
- (should (file-readable-p tmp-name1))
- (should (file-regular-p tmp-name1))
- ;; We do not test inodes and device numbers.
- (should (null (car attr)))
- (should (numberp (nth 1 attr))) ;; Link.
- (should (numberp (nth 2 attr))) ;; Uid.
- (should (numberp (nth 3 attr))) ;; Gid.
- ;; Last access time.
- (should (stringp (current-time-string (nth 4 attr))))
- ;; Last modification time.
- (should (stringp (current-time-string (nth 5 attr))))
- ;; Last status change time.
- (should (stringp (current-time-string (nth 6 attr))))
- (should (numberp (nth 7 attr))) ;; Size.
- (should (stringp (nth 8 attr))) ;; Modes.
-
- (setq attr (file-attributes tmp-name1 'string))
- (should (stringp (nth 2 attr))) ;; Uid.
- (should (stringp (nth 3 attr))) ;; Gid.
-
- (condition-case err
- (progn
- (make-symbolic-link tmp-name1 tmp-name2)
- (should (file-exists-p tmp-name2))
- (should (file-symlink-p tmp-name2))
- (setq attr (file-attributes tmp-name2))
- (should (string-equal
- (car attr)
- (file-remote-p (file-truename tmp-name1) 'localname)))
- (delete-file tmp-name2))
- (file-error
- (should (string-equal (error-message-string err)
- "make-symbolic-link not supported"))))
-
- ;; Check, that "//" in symlinks are handled properly.
- (with-temp-buffer
- (let ((default-directory tramp-test-temporary-file-directory))
- (shell-command
- (format
- "ln -s %s %s"
- (tramp-file-name-localname (tramp-dissect-file-name tmp-name3))
- (tramp-file-name-localname (tramp-dissect-file-name tmp-name2)))
- t)))
- (when (file-symlink-p tmp-name2)
- (setq attr (file-attributes tmp-name2))
- (should
- (string-equal
- (car attr)
- (tramp-file-name-localname (tramp-dissect-file-name tmp-name3))))
- (delete-file tmp-name2))
-
- (delete-file tmp-name1)
- (make-directory tmp-name1)
- (should (file-exists-p tmp-name1))
- (should (file-readable-p tmp-name1))
- (should-not (file-regular-p tmp-name1))
- (setq attr (file-attributes tmp-name1))
- (should (eq (car attr) t)))
-
- ;; Cleanup.
- (ignore-errors (delete-directory tmp-name1))
- (ignore-errors (delete-file tmp-name1))
- (ignore-errors (delete-file tmp-name2)))))
-
-(ert-deftest tramp-test19-directory-files-and-attributes ()
- "Check `directory-files-and-attributes'."
- (skip-unless (tramp--test-enabled))
-
- ;; `directory-files-and-attributes' contains also values for "../".
- ;; Ensure that this doesn't change during tests, for
- ;; example due to handling temporary files.
- (let* ((tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (expand-file-name "bla" tmp-name1))
- attr)
- (unwind-protect
- (progn
- (make-directory tmp-name1)
- (should (file-directory-p tmp-name1))
- (make-directory tmp-name2)
- (should (file-directory-p tmp-name2))
- (write-region "foo" nil (expand-file-name "foo" tmp-name2))
- (write-region "bar" nil (expand-file-name "bar" tmp-name2))
- (write-region "boz" nil (expand-file-name "boz" tmp-name2))
- (setq attr (directory-files-and-attributes tmp-name2))
- (should (consp attr))
- ;; Dumb remote shells without perl(1) or stat(1) are not
- ;; able to return the date correctly. They say "don't know".
- (dolist (elt attr)
- (unless
- (equal
- (nth 5
- (file-attributes (expand-file-name (car elt) tmp-name2)))
- '(0 0))
- (should
- (equal (file-attributes (expand-file-name (car elt) tmp-name2))
- (cdr elt)))))
- (setq attr (directory-files-and-attributes tmp-name2 'full))
- (dolist (elt attr)
- (unless (equal (nth 5 (file-attributes (car elt))) '(0 0))
- (should
- (equal (file-attributes (car elt)) (cdr elt)))))
- (setq attr (directory-files-and-attributes tmp-name2 nil "^b"))
- (should (equal (mapcar 'car attr) '("bar" "boz"))))
-
- ;; Cleanup.
- (ignore-errors (delete-directory tmp-name1 'recursive)))))
-
-(ert-deftest tramp-test20-file-modes ()
- "Check `file-modes'.
-This tests also `file-executable-p', `file-writable-p' and `set-file-modes'."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (not
- (memq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- '(tramp-adb-file-name-handler
- tramp-gvfs-file-name-handler
- tramp-smb-file-name-handler))))
-
- (let ((tmp-name (tramp--test-make-temp-name)))
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name)
- (should (file-exists-p tmp-name))
- (set-file-modes tmp-name #o777)
- (should (= (file-modes tmp-name) #o777))
- (should (file-executable-p tmp-name))
- (should (file-writable-p tmp-name))
- (set-file-modes tmp-name #o444)
- (should (= (file-modes tmp-name) #o444))
- (should-not (file-executable-p tmp-name))
- ;; A file is always writable for user "root".
- (unless (zerop (nth 2 (file-attributes tmp-name)))
- (should-not (file-writable-p tmp-name))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name)))))
-
-(ert-deftest tramp-test21-file-links ()
- "Check `file-symlink-p'.
-This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
- (skip-unless (tramp--test-enabled))
-
- ;; We must use `file-truename' for the temporary directory, because
- ;; it could be located on a symlinked directory. This would let the
- ;; test fail.
- (let* ((tramp-test-temporary-file-directory
- (file-truename tramp-test-temporary-file-directory))
- (tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (tramp--test-make-temp-name))
- (tmp-name3 (tramp--test-make-temp-name 'local)))
-
- ;; Check `make-symbolic-link'.
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name1)
- (should (file-exists-p tmp-name1))
- ;; Method "smb" supports `make-symbolic-link' only if the
- ;; remote host has CIFS capabilities. tramp-adb.el and
- ;; tramp-gvfs.el do not support symbolic links at all.
- (condition-case err
- (make-symbolic-link tmp-name1 tmp-name2)
- (file-error
- (skip-unless
- (not (string-equal (error-message-string err)
- "make-symbolic-link not supported")))))
- (should (file-symlink-p tmp-name2))
- (should-error (make-symbolic-link tmp-name1 tmp-name2))
- (make-symbolic-link tmp-name1 tmp-name2 'ok-if-already-exists)
- (should (file-symlink-p tmp-name2))
- ;; `tmp-name3' is a local file name.
- (should-error (make-symbolic-link tmp-name1 tmp-name3)))
-
- ;; Cleanup.
- (ignore-errors
- (delete-file tmp-name1)
- (delete-file tmp-name2)))
-
- ;; Check `add-name-to-file'.
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name1)
- (should (file-exists-p tmp-name1))
- (add-name-to-file tmp-name1 tmp-name2)
- (should-not (file-symlink-p tmp-name2))
- (should-error (add-name-to-file tmp-name1 tmp-name2))
- (add-name-to-file tmp-name1 tmp-name2 'ok-if-already-exists)
- (should-not (file-symlink-p tmp-name2))
- ;; `tmp-name3' is a local file name.
- (should-error (add-name-to-file tmp-name1 tmp-name3)))
-
- ;; Cleanup.
- (ignore-errors
- (delete-file tmp-name1)
- (delete-file tmp-name2)))
-
- ;; Check `file-truename'.
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name1)
- (should (file-exists-p tmp-name1))
- (make-symbolic-link tmp-name1 tmp-name2)
- (should (file-symlink-p tmp-name2))
- (should-not (string-equal tmp-name2 (file-truename tmp-name2)))
- (should
- (string-equal (file-truename tmp-name1) (file-truename tmp-name2)))
- (should (file-equal-p tmp-name1 tmp-name2)))
- (ignore-errors
- (delete-file tmp-name1)
- (delete-file tmp-name2)))
-
- ;; `file-truename' shall preserve trailing link of directories.
- (unless (file-symlink-p tramp-test-temporary-file-directory)
- (let* ((dir1 (directory-file-name tramp-test-temporary-file-directory))
- (dir2 (file-name-as-directory dir1)))
- (should (string-equal (file-truename dir1) (expand-file-name dir1)))
- (should (string-equal (file-truename dir2) (expand-file-name dir2)))))))
-
-(ert-deftest tramp-test22-file-times ()
- "Check `set-file-times' and `file-newer-than-file-p'."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (not
- (memq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- '(tramp-gvfs-file-name-handler tramp-smb-file-name-handler))))
-
- (let ((tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (tramp--test-make-temp-name))
- (tmp-name3 (tramp--test-make-temp-name)))
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name1)
- (should (file-exists-p tmp-name1))
- (should (consp (nth 5 (file-attributes tmp-name1))))
- ;; '(0 0) means don't know, and will be replaced by
- ;; `current-time'. Therefore, we use '(0 1).
- ;; We skip the test, if the remote handler is not able to
- ;; set the correct time.
- (skip-unless (set-file-times tmp-name1 '(0 1)))
- ;; Dumb remote shells without perl(1) or stat(1) are not
- ;; able to return the date correctly. They say "don't know".
- (unless (equal (nth 5 (file-attributes tmp-name1)) '(0 0))
- (should (equal (nth 5 (file-attributes tmp-name1)) '(0 1)))
- (write-region "bla" nil tmp-name2)
- (should (file-exists-p tmp-name2))
- (should (file-newer-than-file-p tmp-name2 tmp-name1))
- ;; `tmp-name3' does not exist.
- (should (file-newer-than-file-p tmp-name2 tmp-name3))
- (should-not (file-newer-than-file-p tmp-name3 tmp-name1))))
-
- ;; Cleanup.
- (ignore-errors
- (delete-file tmp-name1)
- (delete-file tmp-name2)))))
-
-(ert-deftest tramp-test23-visited-file-modtime ()
- "Check `set-visited-file-modtime' and `verify-visited-file-modtime'."
- (skip-unless (tramp--test-enabled))
-
- (let ((tmp-name (tramp--test-make-temp-name)))
- (unwind-protect
- (progn
- (write-region "foo" nil tmp-name)
- (should (file-exists-p tmp-name))
- (with-temp-buffer
- (insert-file-contents tmp-name)
- (should (verify-visited-file-modtime))
- (set-visited-file-modtime '(0 1))
- (should (verify-visited-file-modtime))
- (should (equal (visited-file-modtime) '(0 1 0 0)))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name)))))
-
-(ert-deftest tramp-test24-file-name-completion ()
- "Check `file-name-completion' and `file-name-all-completions'."
- (skip-unless (tramp--test-enabled))
-
- (let ((tmp-name (tramp--test-make-temp-name)))
- (unwind-protect
- (progn
- (make-directory tmp-name)
- (should (file-directory-p tmp-name))
- (write-region "foo" nil (expand-file-name "foo" tmp-name))
- (write-region "bar" nil (expand-file-name "bold" tmp-name))
- (make-directory (expand-file-name "boz" tmp-name))
- (should (equal (file-name-completion "fo" tmp-name) "foo"))
- (should (equal (file-name-completion "b" tmp-name) "bo"))
- (should
- (equal (file-name-completion "b" tmp-name 'file-directory-p) "boz/"))
- (should (equal (file-name-all-completions "fo" tmp-name) '("foo")))
- (should
- (equal (sort (file-name-all-completions "b" tmp-name) 'string-lessp)
- '("bold" "boz/"))))
-
- ;; Cleanup.
- (ignore-errors (delete-directory tmp-name 'recursive)))))
-
-(ert-deftest tramp-test25-load ()
- "Check `load'."
- (skip-unless (tramp--test-enabled))
-
- (let ((tmp-name (tramp--test-make-temp-name)))
- (unwind-protect
- (progn
- (load tmp-name 'noerror 'nomessage)
- (should-not (featurep 'tramp-test-load))
- (write-region "(provide 'tramp-test-load)" nil tmp-name)
- ;; `load' in lread.c does not pass `must-suffix'. Why?
- ;(should-error (load tmp-name nil 'nomessage 'nosuffix 'must-suffix))
- (load tmp-name nil 'nomessage 'nosuffix)
- (should (featurep 'tramp-test-load)))
-
- ;; Cleanup.
- (ignore-errors
- (and (featurep 'tramp-test-load) (unload-feature 'tramp-test-load))
- (delete-file tmp-name)))))
-
-(ert-deftest tramp-test26-process-file ()
- "Check `process-file'."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (not
- (memq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- '(tramp-gvfs-file-name-handler tramp-smb-file-name-handler))))
-
- (let* ((tmp-name (tramp--test-make-temp-name))
- (fnnd (file-name-nondirectory tmp-name))
- (default-directory tramp-test-temporary-file-directory)
- kill-buffer-query-functions)
- (unwind-protect
- (progn
- ;; We cannot use "/bin/true" and "/bin/false"; those paths
- ;; do not exist on hydra.
- (should (zerop (process-file "true")))
- (should-not (zerop (process-file "false")))
- (should-not (zerop (process-file "binary-does-not-exist")))
- (with-temp-buffer
- (write-region "foo" nil tmp-name)
- (should (file-exists-p tmp-name))
- (should (zerop (process-file "ls" nil t nil fnnd)))
- ;; `ls' could produce colorized output.
- (goto-char (point-min))
- (while (re-search-forward tramp-color-escape-sequence-regexp nil t)
- (replace-match "" nil nil))
- (should (string-equal (format "%s\n" fnnd) (buffer-string)))
- (should-not (get-buffer-window (current-buffer) t))
-
- ;; Second run. The output must be appended.
- (should (zerop (process-file "ls" nil t t fnnd)))
- ;; `ls' could produce colorized output.
- (goto-char (point-min))
- (while (re-search-forward tramp-color-escape-sequence-regexp nil t)
- (replace-match "" nil nil))
- (should
- (string-equal (format "%s\n%s\n" fnnd fnnd) (buffer-string)))
- ;; A non-nil DISPLAY must not raise the buffer.
- (should-not (get-buffer-window (current-buffer) t))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name)))))
-
-(ert-deftest tramp-test27-start-file-process ()
- "Check `start-file-process'."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (not
- (memq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- '(tramp-adb-file-name-handler
- tramp-gvfs-file-name-handler
- tramp-smb-file-name-handler))))
-
- (let ((default-directory tramp-test-temporary-file-directory)
- (tmp-name (tramp--test-make-temp-name))
- kill-buffer-query-functions proc)
- (unwind-protect
- (with-temp-buffer
- (setq proc (start-file-process "test1" (current-buffer) "cat"))
- (should (processp proc))
- (should (equal (process-status proc) 'run))
- (process-send-string proc "foo")
- (process-send-eof proc)
- ;; Read output.
- (with-timeout (10 (ert-fail "`start-file-process' timed out"))
- (while (< (- (point-max) (point-min)) (length "foo"))
- (accept-process-output proc 1)))
- (should (string-equal (buffer-string) "foo")))
-
- ;; Cleanup.
- (ignore-errors (delete-process proc)))
-
- (unwind-protect
- (with-temp-buffer
- (write-region "foo" nil tmp-name)
- (should (file-exists-p tmp-name))
- (setq proc
- (start-file-process
- "test2" (current-buffer)
- "cat" (file-name-nondirectory tmp-name)))
- (should (processp proc))
- ;; Read output.
- (with-timeout (10 (ert-fail "`start-file-process' timed out"))
- (while (< (- (point-max) (point-min)) (length "foo"))
- (accept-process-output proc 1)))
- (should (string-equal (buffer-string) "foo")))
-
- ;; Cleanup.
- (ignore-errors
- (delete-process proc)
- (delete-file tmp-name)))
-
- (unwind-protect
- (with-temp-buffer
- (setq proc (start-file-process "test3" (current-buffer) "cat"))
- (should (processp proc))
- (should (equal (process-status proc) 'run))
- (set-process-filter
- proc
- (lambda (p s) (with-current-buffer (process-buffer p) (insert s))))
- (process-send-string proc "foo")
- (process-send-eof proc)
- ;; Read output.
- (with-timeout (10 (ert-fail "`start-file-process' timed out"))
- (while (< (- (point-max) (point-min)) (length "foo"))
- (accept-process-output proc 1)))
- (should (string-equal (buffer-string) "foo")))
-
- ;; Cleanup.
- (ignore-errors (delete-process proc)))))
-
-(ert-deftest tramp-test28-shell-command ()
- "Check `shell-command'."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (not
- (memq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- '(tramp-adb-file-name-handler
- tramp-gvfs-file-name-handler
- tramp-smb-file-name-handler))))
-
- (let ((tmp-name (tramp--test-make-temp-name))
- (default-directory tramp-test-temporary-file-directory)
- kill-buffer-query-functions)
- (unwind-protect
- (with-temp-buffer
- (write-region "foo" nil tmp-name)
- (should (file-exists-p tmp-name))
- (shell-command
- (format "ls %s" (file-name-nondirectory tmp-name)) (current-buffer))
- ;; `ls' could produce colorized output.
- (goto-char (point-min))
- (while (re-search-forward tramp-color-escape-sequence-regexp nil t)
- (replace-match "" nil nil))
- (should
- (string-equal
- (format "%s\n" (file-name-nondirectory tmp-name)) (buffer-string))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name)))
-
- (unwind-protect
- (with-temp-buffer
- (write-region "foo" nil tmp-name)
- (should (file-exists-p tmp-name))
- (async-shell-command
- (format "ls %s" (file-name-nondirectory tmp-name)) (current-buffer))
- (set-process-sentinel (get-buffer-process (current-buffer)) nil)
- ;; Read output.
- (with-timeout (10 (ert-fail "`async-shell-command' timed out"))
- (while (< (- (point-max) (point-min))
- (1+ (length (file-name-nondirectory tmp-name))))
- (accept-process-output (get-buffer-process (current-buffer)) 1)))
- ;; `ls' could produce colorized output.
- (goto-char (point-min))
- (while (re-search-forward tramp-color-escape-sequence-regexp nil t)
- (replace-match "" nil nil))
- ;; There might be a nasty "Process *Async Shell* finished" message.
- (goto-char (point-min))
- (forward-line)
- (narrow-to-region (point-min) (point))
- (should
- (string-equal
- (format "%s\n" (file-name-nondirectory tmp-name)) (buffer-string))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name)))
-
- (unwind-protect
- (with-temp-buffer
- (write-region "foo" nil tmp-name)
- (should (file-exists-p tmp-name))
- (async-shell-command "read line; ls $line" (current-buffer))
- (set-process-sentinel (get-buffer-process (current-buffer)) nil)
- (process-send-string
- (get-buffer-process (current-buffer))
- (format "%s\n" (file-name-nondirectory tmp-name)))
- ;; Read output.
- (with-timeout (10 (ert-fail "`async-shell-command' timed out"))
- (while (< (- (point-max) (point-min))
- (1+ (length (file-name-nondirectory tmp-name))))
- (accept-process-output (get-buffer-process (current-buffer)) 1)))
- ;; `ls' could produce colorized output.
- (goto-char (point-min))
- (while (re-search-forward tramp-color-escape-sequence-regexp nil t)
- (replace-match "" nil nil))
- ;; There might be a nasty "Process *Async Shell* finished" message.
- (goto-char (point-min))
- (forward-line)
- (narrow-to-region (point-min) (point))
- (should
- (string-equal
- (format "%s\n" (file-name-nondirectory tmp-name)) (buffer-string))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name)))))
-
-(ert-deftest tramp-test29-vc-registered ()
- "Check `vc-registered'."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (eq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- 'tramp-sh-file-name-handler))
-
- (let* ((default-directory tramp-test-temporary-file-directory)
- (tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (expand-file-name "foo" tmp-name1))
- (tramp-remote-process-environment tramp-remote-process-environment)
- (vc-handled-backends
- (with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
- (cond
- ((tramp-find-executable v vc-bzr-program (tramp-get-remote-path v))
- (setq tramp-remote-process-environment
- (cons (format "BZR_HOME=%s"
- (file-remote-p tmp-name1 'localname))
- tramp-remote-process-environment))
- ;; We must force a reconnect, in order to activate $BZR_HOME.
- (tramp-cleanup-connection
- (tramp-dissect-file-name tramp-test-temporary-file-directory)
- nil 'keep-password)
- '(Bzr))
- ((tramp-find-executable v vc-git-program (tramp-get-remote-path v))
- '(Git))
- ((tramp-find-executable v vc-hg-program (tramp-get-remote-path v))
- '(Hg))
- (t nil)))))
- (skip-unless vc-handled-backends)
- (message "%s" vc-handled-backends)
-
- (unwind-protect
- (progn
- (make-directory tmp-name1)
- (write-region "foo" nil tmp-name2)
- (should (file-directory-p tmp-name1))
- (should (file-exists-p tmp-name2))
- (should-not (vc-registered tmp-name1))
- (should-not (vc-registered tmp-name2))
-
- (let ((default-directory tmp-name1))
- ;; Create empty repository, and register the file.
- (vc-create-repo (car vc-handled-backends))
- ;; The structure of VC-FILESET is not documented. Let's
- ;; hope it won't change.
- (condition-case nil
- (vc-register
- (list (car vc-handled-backends)
- (list (file-name-nondirectory tmp-name2))))
- ;; `vc-register' has changed its arguments in Emacs 25.1.
- (error
- (vc-register
- nil (list (car vc-handled-backends)
- (list (file-name-nondirectory tmp-name2)))))))
- (should (vc-registered tmp-name2)))
-
- ;; Cleanup.
- (ignore-errors (delete-directory tmp-name1 'recursive)))))
-
-(ert-deftest tramp-test30-make-auto-save-file-name ()
- "Check `make-auto-save-file-name'."
- (skip-unless (tramp--test-enabled))
-
- (let ((tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (tramp--test-make-temp-name)))
-
- (unwind-protect
- (progn
- ;; Use default `auto-save-file-name-transforms' mechanism.
- (let (tramp-auto-save-directory)
- (with-temp-buffer
- (setq buffer-file-name tmp-name1)
- (should
- (string-equal
- (make-auto-save-file-name)
- ;; This is taken from original `make-auto-save-file-name'.
- (expand-file-name
- (format
- "#%s#"
- (subst-char-in-string
- ?/ ?! (replace-regexp-in-string "!" "!!" tmp-name1)))
- temporary-file-directory)))))
-
- ;; No mapping.
- (let (tramp-auto-save-directory auto-save-file-name-transforms)
- (with-temp-buffer
- (setq buffer-file-name tmp-name1)
- (should
- (string-equal
- (make-auto-save-file-name)
- (expand-file-name
- (format "#%s#" (file-name-nondirectory tmp-name1))
- tramp-test-temporary-file-directory)))))
-
- ;; Use default `tramp-auto-save-directory' mechanism.
- (let ((tramp-auto-save-directory tmp-name2))
- (with-temp-buffer
- (setq buffer-file-name tmp-name1)
- (should
- (string-equal
- (make-auto-save-file-name)
- ;; This is taken from Tramp.
- (expand-file-name
- (format
- "#%s#"
- (tramp-subst-strs-in-string
- '(("_" . "|")
- ("/" . "_a")
- (":" . "_b")
- ("|" . "__")
- ("[" . "_l")
- ("]" . "_r"))
- tmp-name1))
- tmp-name2)))
- (should (file-directory-p tmp-name2))))
-
- ;; Relative file names shall work, too.
- (let ((tramp-auto-save-directory "."))
- (with-temp-buffer
- (setq buffer-file-name tmp-name1
- default-directory tmp-name2)
- (should
- (string-equal
- (make-auto-save-file-name)
- ;; This is taken from Tramp.
- (expand-file-name
- (format
- "#%s#"
- (tramp-subst-strs-in-string
- '(("_" . "|")
- ("/" . "_a")
- (":" . "_b")
- ("|" . "__")
- ("[" . "_l")
- ("]" . "_r"))
- tmp-name1))
- tmp-name2)))
- (should (file-directory-p tmp-name2)))))
-
- ;; Cleanup.
- (ignore-errors (delete-file tmp-name1))
- (ignore-errors (delete-directory tmp-name2 'recursive)))))
-
-(defun tramp--test-adb-p ()
- "Check, whether the remote host runs Android.
-This requires restrictions of file name syntax."
- (tramp-adb-file-name-p tramp-test-temporary-file-directory))
-
-(defun tramp--test-ftp-p ()
- "Check, whether an FTP-like method is used.
-This does not support globbing characters in file names (yet)."
- ;; Globbing characters are ??, ?* and ?\[.
- (and (eq (tramp-find-foreign-file-name-handler
- tramp-test-temporary-file-directory)
- 'tramp-sh-file-name-handler)
- (string-match
- "ftp$" (file-remote-p tramp-test-temporary-file-directory 'method))))
-
-(defun tramp--test-gvfs-p ()
- "Check, whether the remote host runs a GVFS based method.
-This requires restrictions of file name syntax."
- (tramp-gvfs-file-name-p tramp-test-temporary-file-directory))
-
-(defun tramp--test-smb-or-windows-nt-p ()
- "Check, whether the locale or remote host runs MS Windows.
-This requires restrictions of file name syntax."
- (or (eq system-type 'windows-nt)
- (tramp-smb-file-name-p tramp-test-temporary-file-directory)))
-
-(defun tramp--test-hpux-p ()
- "Check, whether the remote host runs HP-UX.
-Several special characters do not work properly there."
- ;; We must refill the cache. `file-truename' does it.
- (with-parsed-tramp-file-name
- (file-truename tramp-test-temporary-file-directory) nil
- (string-match "^HP-UX" (tramp-get-connection-property v "uname" ""))))
-
-(defun tramp--test-check-files (&rest files)
- "Run a simple but comprehensive test over every file in FILES."
- ;; We must use `file-truename' for the temporary directory, because
- ;; it could be located on a symlinked directory. This would let the
- ;; test fail.
- (let* ((tramp-test-temporary-file-directory
- (file-truename tramp-test-temporary-file-directory))
- (tmp-name1 (tramp--test-make-temp-name))
- (tmp-name2 (tramp--test-make-temp-name 'local))
- (files (delq nil files)))
- (unwind-protect
- (progn
- (make-directory tmp-name1)
- (make-directory tmp-name2)
- (dolist (elt files)
- (let* ((file1 (expand-file-name elt tmp-name1))
- (file2 (expand-file-name elt tmp-name2))
- (file3 (expand-file-name (concat elt "foo") tmp-name1)))
- (write-region elt nil file1)
- (should (file-exists-p file1))
-
- ;; Check file contents.
- (with-temp-buffer
- (insert-file-contents file1)
- (should (string-equal (buffer-string) elt)))
-
- ;; Copy file both directions.
- (copy-file file1 tmp-name2)
- (should (file-exists-p file2))
- (delete-file file1)
- (should-not (file-exists-p file1))
- (copy-file file2 tmp-name1)
- (should (file-exists-p file1))
-
- ;; Method "smb" supports `make-symbolic-link' only if the
- ;; remote host has CIFS capabilities. tramp-adb.el and
- ;; tramp-gvfs.el do not support symbolic links at all.
- (condition-case err
- (progn
- (make-symbolic-link file1 file3)
- (should (file-symlink-p file3))
- (should
- (string-equal
- (expand-file-name file1) (file-truename file3)))
- (should
- (string-equal
- (car (file-attributes file3))
- (file-remote-p (file-truename file1) 'localname)))
- ;; Check file contents.
- (with-temp-buffer
- (insert-file-contents file3)
- (should (string-equal (buffer-string) elt)))
- (delete-file file3))
- (file-error
- (should (string-equal (error-message-string err)
- "make-symbolic-link not supported"))))))
-
- ;; Check file names.
- (should (equal (directory-files
- tmp-name1 nil directory-files-no-dot-files-regexp)
- (sort (copy-sequence files) 'string-lessp)))
- (should (equal (directory-files
- tmp-name2 nil directory-files-no-dot-files-regexp)
- (sort (copy-sequence files) 'string-lessp)))
-
- ;; `substitute-in-file-name' could return different values.
- ;; For `adb', there could be strange file permissions
- ;; preventing overwriting a file. We don't care in this
- ;; testcase.
- (dolist (elt files)
- (let ((file1
- (substitute-in-file-name (expand-file-name elt tmp-name1)))
- (file2
- (substitute-in-file-name (expand-file-name elt tmp-name2))))
- (ignore-errors (write-region elt nil file1))
- (should (file-exists-p file1))
- (ignore-errors (write-region elt nil file2 nil 'nomessage))
- (should (file-exists-p file2))))
-
- (should (equal (directory-files
- tmp-name1 nil directory-files-no-dot-files-regexp)
- (directory-files
- tmp-name2 nil directory-files-no-dot-files-regexp)))
-
- ;; Check directory creation. We use a subdirectory "foo"
- ;; in order to avoid conflicts with previous file name tests.
- (dolist (elt files)
- (let* ((elt1 (concat elt "foo"))
- (file1 (expand-file-name (concat "foo/" elt) tmp-name1))
- (file2 (expand-file-name elt file1))
- (file3 (expand-file-name elt1 file1)))
- (make-directory file1 'parents)
- (should (file-directory-p file1))
- (write-region elt nil file2)
- (should (file-exists-p file2))
- (should
- (equal
- (directory-files file1 nil directory-files-no-dot-files-regexp)
- `(,elt)))
- (should
- (equal
- (caar (directory-files-and-attributes
- file1 nil directory-files-no-dot-files-regexp))
- elt))
-
- ;; Check symlink in `directory-files-and-attributes'.
- (condition-case err
- (progn
- (make-symbolic-link file2 file3)
- (should (file-symlink-p file3))
- (should
- (string-equal
- (caar (directory-files-and-attributes
- file1 nil (regexp-quote elt1)))
- elt1))
- (should
- (string-equal
- (cadr (car (directory-files-and-attributes
- file1 nil (regexp-quote elt1))))
- (file-remote-p (file-truename file2) 'localname)))
- (delete-file file3)
- (should-not (file-exists-p file3)))
- (file-error
- (should (string-equal (error-message-string err)
- "make-symbolic-link not supported"))))
-
- (delete-file file2)
- (should-not (file-exists-p file2))
- (delete-directory file1)
- (should-not (file-exists-p file1)))))
-
- ;; Cleanup.
- (ignore-errors (delete-directory tmp-name1 'recursive))
- (ignore-errors (delete-directory tmp-name2 'recursive)))))
-
-(defun tramp--test-special-characters ()
- "Perform the test in `tramp-test31-special-characters*'."
- ;; Newlines, slashes and backslashes in file names are not
- ;; supported. So we don't test. And we don't test the tab
- ;; character on Windows or Cygwin, because the backslash is
- ;; interpreted as a path separator, preventing "\t" from being
- ;; expanded to <TAB>.
- (tramp--test-check-files
- (if (or (tramp--test-gvfs-p) (tramp--test-smb-or-windows-nt-p))
- "foo bar baz"
- (if (or (tramp--test-adb-p) (eq system-type 'cygwin))
- " foo bar baz "
- " foo\tbar baz\t"))
- "$foo$bar$$baz$"
- "-foo-bar-baz-"
- "%foo%bar%baz%"
- "&foo&bar&baz&"
- (unless (or (tramp--test-ftp-p)
- (tramp--test-gvfs-p)
- (tramp--test-smb-or-windows-nt-p))
- "?foo?bar?baz?")
- (unless (or (tramp--test-ftp-p)
- (tramp--test-gvfs-p)
- (tramp--test-smb-or-windows-nt-p))
- "*foo*bar*baz*")
- (if (or (tramp--test-gvfs-p) (tramp--test-smb-or-windows-nt-p))
- "'foo'bar'baz'"
- "'foo\"bar'baz\"")
- "#foo~bar#baz~"
- (if (or (tramp--test-gvfs-p) (tramp--test-smb-or-windows-nt-p))
- "!foo!bar!baz!"
- "!foo|bar!baz|")
- (if (or (tramp--test-gvfs-p) (tramp--test-smb-or-windows-nt-p))
- ";foo;bar;baz;"
- ":foo;bar:baz;")
- (unless (or (tramp--test-gvfs-p) (tramp--test-smb-or-windows-nt-p))
- "<foo>bar<baz>")
- "(foo)bar(baz)"
- (unless (or (tramp--test-ftp-p) (tramp--test-gvfs-p)) "[foo]bar[baz]")
- "{foo}bar{baz}"))
-
-;; These tests are inspired by Bug#17238.
-(ert-deftest tramp-test31-special-characters ()
- "Check special characters in file names."
- (skip-unless (tramp--test-enabled))
-
- (tramp--test-special-characters))
-
-(ert-deftest tramp-test31-special-characters-with-stat ()
- "Check special characters in file names.
-Use the `stat' command."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (eq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- 'tramp-sh-file-name-handler))
- (with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
- (skip-unless (tramp-get-remote-stat v)))
-
- (let ((tramp-connection-properties
- (append
- `((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
- "perl" nil))
- tramp-connection-properties)))
- (tramp--test-special-characters)))
-
-(ert-deftest tramp-test31-special-characters-with-perl ()
- "Check special characters in file names.
-Use the `perl' command."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (eq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- 'tramp-sh-file-name-handler))
- (with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
- (skip-unless (tramp-get-remote-perl v)))
-
- (let ((tramp-connection-properties
- (append
- `((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
- "stat" nil))
- tramp-connection-properties)))
- (tramp--test-special-characters)))
-
-(ert-deftest tramp-test31-special-characters-with-ls ()
- "Check special characters in file names.
-Use the `ls' command."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (eq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- 'tramp-sh-file-name-handler))
-
- (let ((tramp-connection-properties
- (append
- `((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
- "perl" nil)
- (,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
- "stat" nil))
- tramp-connection-properties)))
- (tramp--test-special-characters)))
-
-(defun tramp--test-utf8 ()
- "Perform the test in `tramp-test32-utf8*'."
- (let ((coding-system-for-read 'utf-8)
- (coding-system-for-write 'utf-8)
- (file-name-coding-system 'utf-8))
- (tramp--test-check-files
- (unless (tramp--test-hpux-p) "Γυρίστε το Γαλαξία με Ώτο Στοπ")
- (unless (tramp--test-hpux-p)
- "أصبح بوسعك الآن تنزيل نسخة كاملة من موسوعة ويكيبيديا العربية لتصفحها بلا اتصال بالإنترنت")
- "银河系漫游指南系列"
- "Автостопом по гала́ктике")))
-
-(ert-deftest tramp-test32-utf8 ()
- "Check UTF8 encoding in file names and file contents."
- (skip-unless (tramp--test-enabled))
-
- (tramp--test-utf8))
-
-(ert-deftest tramp-test32-utf8-with-stat ()
- "Check UTF8 encoding in file names and file contents.
-Use the `stat' command."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (eq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- 'tramp-sh-file-name-handler))
- (with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
- (skip-unless (tramp-get-remote-stat v)))
-
- (let ((tramp-connection-properties
- (append
- `((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
- "perl" nil))
- tramp-connection-properties)))
- (tramp--test-utf8)))
-
-(ert-deftest tramp-test32-utf8-with-perl ()
- "Check UTF8 encoding in file names and file contents.
-Use the `perl' command."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (eq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- 'tramp-sh-file-name-handler))
- (with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
- (skip-unless (tramp-get-remote-perl v)))
-
- (let ((tramp-connection-properties
- (append
- `((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
- "stat" nil))
- tramp-connection-properties)))
- (tramp--test-utf8)))
-
-(ert-deftest tramp-test32-utf8-with-ls ()
- "Check UTF8 encoding in file names and file contents.
-Use the `ls' command."
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (eq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- 'tramp-sh-file-name-handler))
-
- (let ((tramp-connection-properties
- (append
- `((,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
- "perl" nil)
- (,(regexp-quote (file-remote-p tramp-test-temporary-file-directory))
- "stat" nil))
- tramp-connection-properties)))
- (tramp--test-utf8)))
-
-;; This test is inspired by Bug#16928.
-(ert-deftest tramp-test33-asynchronous-requests ()
- "Check parallel asynchronous requests.
-Such requests could arrive from timers, process filters and
-process sentinels. They shall not disturb each other."
- ;; Mark as failed until bug has been fixed.
- :expected-result :failed
- (skip-unless (tramp--test-enabled))
- (skip-unless
- (eq
- (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
- 'tramp-sh-file-name-handler))
-
- ;; Keep instrumentation verbosity 0 until Tramp bug is fixed. This
- ;; has the side effect, that this test fails instead to abort. Good
- ;; for hydra.
- (tramp--instrument-test-case 0
- (let* ((tmp-name (tramp--test-make-temp-name))
- (default-directory tmp-name)
- (remote-file-name-inhibit-cache t)
- timer buffers kill-buffer-query-functions)
-
- (unwind-protect
- (progn
- (make-directory tmp-name)
-
- ;; Setup a timer in order to raise an ordinary command again
- ;; and again. `vc-registered' is well suited, because there
- ;; are many checks.
- (setq
- timer
- (run-at-time
- 0 1
- (lambda ()
- (when buffers
- (vc-registered
- (buffer-name (nth (random (length buffers)) buffers)))))))
-
- ;; Create temporary buffers. The number of buffers
- ;; corresponds to the number of processes; it could be
- ;; increased in order to make pressure on Tramp.
- (dotimes (i 5)
- (add-to-list 'buffers (generate-new-buffer "*temp*")))
-
- ;; Open asynchronous processes. Set process sentinel.
- (dolist (buf buffers)
- (async-shell-command "read line; touch $line; echo $line" buf)
- (set-process-sentinel
- (get-buffer-process buf)
- (lambda (proc _state)
- (delete-file (buffer-name (process-buffer proc))))))
-
- ;; Send a string. Use a random order of the buffers. Mix
- ;; with regular operation.
- (let ((buffers (copy-sequence buffers))
- buf)
- (while buffers
- (setq buf (nth (random (length buffers)) buffers))
- (process-send-string
- (get-buffer-process buf) (format "'%s'\n" buf))
- (file-attributes (buffer-name buf))
- (setq buffers (delq buf buffers))))
-
- ;; Wait until the whole output has been read.
- (with-timeout ((* 10 (length buffers))
- (ert-fail "`async-shell-command' timed out"))
- (let ((buffers (copy-sequence buffers))
- buf)
- (while buffers
- (setq buf (nth (random (length buffers)) buffers))
- (if (ignore-errors
- (memq (process-status (get-buffer-process buf))
- '(run open)))
- (accept-process-output (get-buffer-process buf) 0.1)
- (setq buffers (delq buf buffers))))))
-
- ;; Check.
- (dolist (buf buffers)
- (with-current-buffer buf
- (should
- (string-equal (format "'%s'\n" buf) (buffer-string)))))
- (should-not
- (directory-files tmp-name nil directory-files-no-dot-files-regexp)))
-
- ;; Cleanup.
- (ignore-errors (cancel-timer timer))
- (ignore-errors (delete-directory tmp-name 'recursive))
- (dolist (buf buffers)
- (ignore-errors (kill-buffer buf)))))))
-
-(ert-deftest tramp-test34-recursive-load ()
- "Check that Tramp does not fail due to recursive load."
- (skip-unless (tramp--test-enabled))
-
- (dolist (code
- (list
- (format
- "(expand-file-name %S)"
- tramp-test-temporary-file-directory)
- (format
- "(let ((default-directory %S)) (expand-file-name %S))"
- tramp-test-temporary-file-directory
- temporary-file-directory)))
- (should-not
- (string-match
- "Recursive load"
- (shell-command-to-string
- (format
- "%s -batch -Q -L %s --eval %s"
- (expand-file-name invocation-name invocation-directory)
- (mapconcat 'shell-quote-argument load-path " -L ")
- (shell-quote-argument code)))))))
-
-(ert-deftest tramp-test35-unload ()
- "Check that Tramp and its subpackages unload completely.
-Since it unloads Tramp, it shall be the last test to run."
- ;; Mark as failed until all symbols are unbound.
- :expected-result (if (featurep 'tramp) :failed :passed)
- (when (featurep 'tramp)
- (unload-feature 'tramp 'force)
- ;; No Tramp feature must be left.
- (should-not (featurep 'tramp))
- (should-not (all-completions "tramp" (delq 'tramp-tests features)))
- ;; `file-name-handler-alist' must be clean.
- (should-not (all-completions "tramp" (mapcar 'cdr file-name-handler-alist)))
- ;; There shouldn't be left a bound symbol. We do not regard our
- ;; test symbols, and the Tramp unload hooks.
- (mapatoms
- (lambda (x)
- (and (or (boundp x) (functionp x))
- (string-match "^tramp" (symbol-name x))
- (not (string-match "^tramp--?test" (symbol-name x)))
- (not (string-match "unload-hook$" (symbol-name x)))
- (ert-fail (format "`%s' still bound" x)))))
- ;; There shouldn't be left a hook function containing a Tramp
- ;; function. We do not regard the Tramp unload hooks.
- (mapatoms
- (lambda (x)
- (and (boundp x)
- (string-match "-hooks?$" (symbol-name x))
- (not (string-match "unload-hook$" (symbol-name x)))
- (consp (symbol-value x))
- (ignore-errors (all-completions "tramp" (symbol-value x)))
- (ert-fail (format "Hook `%s' still contains Tramp function" x)))))))
-
-;; TODO:
-
-;; * dired-compress-file
-;; * dired-uncache
-;; * file-acl
-;; * file-ownership-preserved-p
-;; * file-selinux-context
-;; * find-backup-file-name
-;; * set-file-acl
-;; * set-file-selinux-context
-
-;; * Work on skipped tests. Make a comment, when it is impossible.
-;; * Fix `tramp-test15-copy-directory' for `smb'. Using tar in a pipe
-;; doesn't work well when an interactive password must be provided.
-;; * Fix `tramp-test27-start-file-process' on MS Windows (`process-send-eof'?).
-;; * Fix Bug#16928. Set expected error of `tramp-test33-asynchronous-requests'.
-;; * Fix `tramp-test35-unload' (Not all symbols are unbound). Set
-;; expected error.
-
-(defun tramp-test-all (&optional interactive)
- "Run all tests for \\[tramp]."
- (interactive "p")
- (funcall
- (if interactive 'ert-run-tests-interactively 'ert-run-tests-batch) "^tramp"))
-
-(provide 'tramp-tests)
-;;; tramp-tests.el ends here
diff --git a/test/automated/undo-tests.el b/test/automated/undo-tests.el
deleted file mode 100644
index f462b269337..00000000000
--- a/test/automated/undo-tests.el
+++ /dev/null
@@ -1,448 +0,0 @@
-;;; undo-tests.el --- Tests of primitive-undo
-
-;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
-
-;; Author: Aaron S. Hawley <aaron.s.hawley@gmail.com>
-
-;; This program 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.
-;;
-;; This program 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 this program. If not, see `http://www.gnu.org/licenses/'.
-
-;;; Commentary:
-
-;; Profiling when the code was translate from C to Lisp on 2012-12-24.
-
-;;; C
-
-;; (elp-instrument-function 'primitive-undo)
-;; (load-file "undo-test.elc")
-;; (benchmark 100 '(let ((undo-test5-error nil)) (undo-test-all)))
-;; Elapsed time: 305.218000s (104.841000s in 14804 GCs)
-;; M-x elp-results
-;; Function Name Call Count Elapsed Time Average Time
-;; primitive-undo 2600 3.4889999999 0.0013419230
-
-;;; Lisp
-
-;; (load-file "primundo.elc")
-;; (elp-instrument-function 'primitive-undo)
-;; (benchmark 100 '(undo-test-all))
-;; Elapsed time: 295.974000s (104.582000s in 14704 GCs)
-;; M-x elp-results
-;; Function Name Call Count Elapsed Time Average Time
-;; primitive-undo 2700 3.6869999999 0.0013655555
-
-;;; Code:
-
-(require 'ert)
-
-(ert-deftest undo-test0 ()
- "Test basics of \\[undo]."
- (with-temp-buffer
- (buffer-enable-undo)
- (condition-case err
- (undo)
- (error
- (unless (string= "No further undo information"
- (cadr err))
- (error err))))
- (undo-boundary)
- (insert "This")
- (undo-boundary)
- (erase-buffer)
- (undo-boundary)
- (insert "That")
- (undo-boundary)
- (forward-word -1)
- (undo-boundary)
- (insert "With ")
- (undo-boundary)
- (forward-word -1)
- (undo-boundary)
- (kill-word 1)
- (undo-boundary)
- (put-text-property (point-min) (point-max) 'face 'bold)
- (undo-boundary)
- (remove-text-properties (point-min) (point-max) '(face default))
- (undo-boundary)
- (set-buffer-multibyte (not enable-multibyte-characters))
- (undo-boundary)
- (undo)
- (should
- (equal (should-error (undo-more nil))
- '(wrong-type-argument number-or-marker-p nil)))
- (undo-more 7)
- (should (string-equal "" (buffer-string)))))
-
-(ert-deftest undo-test1 ()
- "Test undo of \\[undo] command (redo)."
- (with-temp-buffer
- (buffer-enable-undo)
- (undo-boundary)
- (insert "This")
- (undo-boundary)
- (erase-buffer)
- (undo-boundary)
- (insert "That")
- (undo-boundary)
- (forward-word -1)
- (undo-boundary)
- (insert "With ")
- (undo-boundary)
- (forward-word -1)
- (undo-boundary)
- (kill-word 1)
- (undo-boundary)
- (facemenu-add-face 'bold (point-min) (point-max))
- (undo-boundary)
- (set-buffer-multibyte (not enable-multibyte-characters))
- (undo-boundary)
- (should
- (string-equal (buffer-string)
- (progn
- (undo)
- (undo-more 4)
- (undo)
- ;(undo-more -4)
- (buffer-string))))))
-
-(ert-deftest undo-test2 ()
- "Test basic redoing with \\[undo] command."
- (with-temp-buffer
- (buffer-enable-undo)
- (undo-boundary)
- (insert "One")
- (undo-boundary)
- (insert " Zero")
- (undo-boundary)
- (push-mark nil t)
- (delete-region (save-excursion
- (forward-word -1)
- (point)) (point))
- (undo-boundary)
- (beginning-of-line)
- (insert "Zero")
- (undo-boundary)
- (undo)
- (should
- (string-equal (buffer-string)
- (progn
- (undo-more 2)
- (undo)
- (buffer-string))))))
-
-(ert-deftest undo-test4 ()
- "Test \\[undo] of \\[flush-lines]."
- (with-temp-buffer
- (buffer-enable-undo)
- (dotimes (i 1048576)
- (if (zerop (% i 2))
- (insert "Evenses")
- (insert "Oddses")))
- (undo-boundary)
- (should
- ;; Avoid string-equal because ERT will save the `buffer-string'
- ;; to the explanation. Using `not' will record nil or non-nil.
- (not
- (null
- (string-equal (buffer-string)
- (progn
- (flush-lines "oddses" (point-min) (point-max))
- (undo-boundary)
- (undo)
- (undo)
- (buffer-string))))))))
-
-(ert-deftest undo-test5 ()
- "Test basic redoing with \\[undo] command."
- (with-temp-buffer
- (buffer-enable-undo)
- (undo-boundary)
- (insert "AYE")
- (undo-boundary)
- (insert " BEE")
- (undo-boundary)
- (setq buffer-undo-list (cons '(0.0 bogus) buffer-undo-list))
- (push-mark nil t)
- (delete-region (save-excursion
- (forward-word -1)
- (point)) (point))
- (undo-boundary)
- (beginning-of-line)
- (insert "CEE")
- (undo-boundary)
- (undo)
- (setq buffer-undo-list (cons "bogus" buffer-undo-list))
- (should
- (string-equal
- (buffer-string)
- (progn
- (if (and (boundp 'undo-test5-error) (not undo-test5-error))
- (progn
- (should (null (undo-more 2)))
- (should (undo)))
- ;; Errors are generated by new Lisp version of
- ;; `primitive-undo' not by built-in C version.
- (should
- (equal (should-error (undo-more 2))
- '(error "Unrecognized entry in undo list (0.0 bogus)")))
- (should
- (equal (should-error (undo))
- '(error "Unrecognized entry in undo list \"bogus\""))))
- (buffer-string))))))
-
-;; http://debbugs.gnu.org/14824
-(ert-deftest undo-test-buffer-modified ()
- "Test undoing marks buffer unmodified."
- (with-temp-buffer
- (buffer-enable-undo)
- (insert "1")
- (undo-boundary)
- (set-buffer-modified-p nil)
- (insert "2")
- (undo)
- (should-not (buffer-modified-p))))
-
-(ert-deftest undo-test-file-modified ()
- "Test undoing marks buffer visiting file unmodified."
- (let ((tempfile (make-temp-file "undo-test")))
- (unwind-protect
- (progn
- (with-current-buffer (find-file-noselect tempfile)
- (insert "1")
- (undo-boundary)
- (set-buffer-modified-p nil)
- (insert "2")
- (undo)
- (should-not (buffer-modified-p))))
- (delete-file tempfile))))
-
-(ert-deftest undo-test-region-not-most-recent ()
- "Test undo in region of an edit not the most recent."
- (with-temp-buffer
- (buffer-enable-undo)
- (transient-mark-mode 1)
- (insert "1111")
- (undo-boundary)
- (goto-char 2)
- (insert "2")
- (forward-char 2)
- (undo-boundary)
- (insert "3")
- (undo-boundary)
- ;; Highlight around "2", not "3"
- (push-mark (+ 3 (point-min)) t t)
- (setq mark-active t)
- (goto-char (point-min))
- (undo)
- (should (string= (buffer-string)
- "11131"))))
-
-(ert-deftest undo-test-region-deletion ()
- "Test undoing a deletion to demonstrate bug 17235."
- (with-temp-buffer
- (buffer-enable-undo)
- (transient-mark-mode 1)
- (insert "12345")
- (search-backward "4")
- (undo-boundary)
- (delete-forward-char 1)
- (search-backward "1")
- (undo-boundary)
- (insert "xxxx")
- (undo-boundary)
- (insert "yy")
- (search-forward "35")
- (undo-boundary)
- ;; Select "35"
- (push-mark (point) t t)
- (setq mark-active t)
- (forward-char -2)
- (undo) ; Expect "4" to come back
- (should (string= (buffer-string)
- "xxxxyy12345"))))
-
-(ert-deftest undo-test-region-example ()
- "The same example test case described in comments for
-undo-make-selective-list."
- ;; buf pos:
- ;; 123456789 buffer-undo-list undo-deltas
- ;; --------- ---------------- -----------
- ;; aaa (1 . 4) (1 . -3)
- ;; aaba (3 . 4) N/A (in region)
- ;; ccaaba (1 . 3) (1 . -2)
- ;; ccaabaddd (7 . 10) (7 . -3)
- ;; ccaabdd ("ad" . 6) (6 . 2)
- ;; ccaabaddd (6 . 8) (6 . -2)
- ;; | |<-- region: "caab", from 2 to 6
- (with-temp-buffer
- (buffer-enable-undo)
- (transient-mark-mode 1)
- (insert "aaa")
- (goto-char 3)
- (undo-boundary)
- (insert "b")
- (goto-char 1)
- (undo-boundary)
- (insert "cc")
- (goto-char 7)
- (undo-boundary)
- (insert "ddd")
- (search-backward "ad")
- (undo-boundary)
- (delete-forward-char 2)
- (undo-boundary)
- ;; Select "dd"
- (push-mark (point) t t)
- (setq mark-active t)
- (goto-char (point-max))
- (undo)
- (undo-boundary)
- (should (string= (buffer-string)
- "ccaabaddd"))
- ;; Select "caab"
- (push-mark 2 t t)
- (setq mark-active t)
- (goto-char 6)
- (undo)
- (undo-boundary)
- (should (string= (buffer-string)
- "ccaaaddd"))))
-
-(ert-deftest undo-test-region-eob ()
- "Test undo in region of a deletion at EOB, demonstrating bug 16411."
- (with-temp-buffer
- (buffer-enable-undo)
- (transient-mark-mode 1)
- (insert "This sentence corrupted?")
- (undo-boundary)
- ;; Same as recipe at
- ;; http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16411
- (insert "aaa")
- (undo-boundary)
- (undo)
- ;; Select entire buffer
- (push-mark (point) t t)
- (setq mark-active t)
- (goto-char (point-min))
- ;; Should undo the undo of "aaa", ie restore it.
- (undo)
- (should (string= (buffer-string)
- "This sentence corrupted?aaa"))))
-
-(ert-deftest undo-test-marker-adjustment-nominal ()
- "Test nominal behavior of marker adjustments."
- (with-temp-buffer
- (buffer-enable-undo)
- (insert "abcdefg")
- (undo-boundary)
- (let ((m (make-marker)))
- (set-marker m 2 (current-buffer))
- (goto-char (point-min))
- (delete-forward-char 3)
- (undo-boundary)
- (should (= (point-min) (marker-position m)))
- (undo)
- (undo-boundary)
- (should (= 2 (marker-position m))))))
-
-(ert-deftest undo-test-region-t-marker ()
- "Test undo in region containing marker with t insertion-type."
- (with-temp-buffer
- (buffer-enable-undo)
- (transient-mark-mode 1)
- (insert "abcdefg")
- (undo-boundary)
- (let ((m (make-marker)))
- (set-marker-insertion-type m t)
- (set-marker m (point-min) (current-buffer)) ; m at a
- (goto-char (+ 2 (point-min)))
- (push-mark (point) t t)
- (setq mark-active t)
- (goto-char (point-min))
- (delete-forward-char 1) ;; delete region covering "ab"
- (undo-boundary)
- (should (= (point-min) (marker-position m)))
- ;; Resurrect "ab". m's insertion type means the reinsertion
- ;; moves it forward 2, and then the marker adjustment returns it
- ;; to its rightful place.
- (undo)
- (undo-boundary)
- (should (= (point-min) (marker-position m))))))
-
-(ert-deftest undo-test-marker-adjustment-moved ()
- "Test marker adjustment behavior when the marker moves.
-Demonstrates bug 16818."
- (with-temp-buffer
- (buffer-enable-undo)
- (insert "abcdefghijk")
- (undo-boundary)
- (let ((m (make-marker)))
- (set-marker m 2 (current-buffer)) ; m at b
- (goto-char (point-min))
- (delete-forward-char 3) ; m at d
- (undo-boundary)
- (set-marker m 4) ; m at g
- (undo)
- (undo-boundary)
- ;; m still at g, but shifted 3 because deletion undone
- (should (= 7 (marker-position m))))))
-
-(ert-deftest undo-test-region-mark-adjustment ()
- "Test that the mark's marker adjustment in undo history doesn't
-obstruct undo in region from finding the correct change group.
-Demonstrates bug 16818."
- (with-temp-buffer
- (buffer-enable-undo)
- (transient-mark-mode 1)
- (insert "First line\n")
- (insert "Second line\n")
- (undo-boundary)
-
- (goto-char (point-min))
- (insert "aaa")
- (undo-boundary)
-
- (undo)
- (undo-boundary)
-
- (goto-char (point-max))
- (insert "bbb")
- (undo-boundary)
-
- (push-mark (point) t t)
- (setq mark-active t)
- (goto-char (- (point) 3))
- (delete-forward-char 1)
- (undo-boundary)
-
- (insert "bbb")
- (undo-boundary)
-
- (goto-char (point-min))
- (push-mark (point) t t)
- (setq mark-active t)
- (goto-char (+ (point) 3))
- (undo)
- (undo-boundary)
-
- (should (string= (buffer-string) "aaaFirst line\nSecond line\nbbb"))))
-
-(defun undo-test-all (&optional interactive)
- "Run all tests for \\[undo]."
- (interactive "p")
- (if interactive
- (ert-run-tests-interactively "^undo-")
- (ert-run-tests-batch "^undo-")))
-
-(provide 'undo-tests)
-;;; undo-tests.el ends here
diff --git a/test/automated/url-future-tests.el b/test/automated/url-future-tests.el
deleted file mode 100644
index 66ce7d632f3..00000000000
--- a/test/automated/url-future-tests.el
+++ /dev/null
@@ -1,57 +0,0 @@
-;;; url-future-tests.el --- Test suite for url-future.
-
-;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
-
-;; Author: Teodor Zlatanov <tzz@lifelogs.com>
-;; Keywords: data
-
-;; 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)
-(require 'url-future)
-
-(ert-deftest url-future-tests ()
- (let* (saver
- (text "running future")
- (good (make-url-future :value (lambda () (format text))
- :callback (lambda (f) (set 'saver f))))
- (bad (make-url-future :value (lambda () (/ 1 0))
- :errorback (lambda (&rest d) (set 'saver d))))
- (tocancel (make-url-future :value (lambda () (/ 1 0))
- :callback (lambda (f) (set 'saver f))
- :errorback (lambda (&rest d)
- (set 'saver d)))))
- (should (equal good (url-future-call good)))
- (should (equal good saver))
- (should (equal text (url-future-value good)))
- (should (url-future-completed-p good))
- (should-error (url-future-call good))
- (setq saver nil)
- (should (equal bad (url-future-call bad)))
- (should-error (url-future-call bad))
- (should (equal saver (list bad '(arith-error))))
- (should (url-future-errored-p bad))
- (setq saver nil)
- (should (equal (url-future-cancel tocancel) tocancel))
- (should-error (url-future-call tocancel))
- (should (null saver))
- (should (url-future-cancelled-p tocancel))))
-
-(provide 'url-future-tests)
-
-;;; url-future-tests.el ends here
diff --git a/test/automated/url-util-tests.el b/test/automated/url-util-tests.el
deleted file mode 100644
index 21ddeb50fd5..00000000000
--- a/test/automated/url-util-tests.el
+++ /dev/null
@@ -1,51 +0,0 @@
-;;; url-util-tests.el --- Test suite for url-util.
-
-;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
-
-;; Author: Teodor Zlatanov <tzz@lifelogs.com>
-;; Keywords: data
-
-;; 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)
-(require 'url-util)
-
-(ert-deftest url-util-tests ()
- (let ((tests
- '(("key1=val1&key2=val2&key3=val1&key3=val2&key4&key5"
- ((key1 val1) (key2 "val2") (key3 val1 val2) (key4) (key5 "")))
- ("key1=val1;key2=val2;key3=val1;key3=val2;key4;key5"
- ((key1 "val1") (key2 val2) (key3 val1 val2) ("key4") (key5 "")) t)
- ("key1=val1;key2=val2;key3=val1;key3=val2;key4=;key5="
- ((key1 val1) (key2 val2) ("key3" val1 val2) (key4) (key5 "")) t t)))
- test)
- (while tests
- (setq test (car tests)
- tests (cdr tests))
- (should (equal (apply 'url-build-query-string (cdr test)) (car test)))))
- (should (equal (url-parse-query-string
- "key1=val1&key2=val2&key3=val1&key3=val2&key4=&key5")
- '(("key5" "")
- ("key4" "")
- ("key3" "val2" "val1")
- ("key2" "val2")
- ("key1" "val1")))))
-
-(provide 'url-util-tests)
-
-;;; url-util-tests.el ends here
diff --git a/test/automated/vc-bzr.el b/test/automated/vc-bzr.el
deleted file mode 100644
index c548562ba0f..00000000000
--- a/test/automated/vc-bzr.el
+++ /dev/null
@@ -1,144 +0,0 @@
-;;; vc-bzr.el --- tests for vc/vc-bzr.el
-
-;; Copyright (C) 2011-2015 Free Software Foundation, Inc.
-
-;; Author: Glenn Morris <rgm@gnu.org>
-;; Maintainer: emacs-devel@gnu.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/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'ert)
-(require 'vc-bzr)
-(require 'vc-dir)
-
-(ert-deftest vc-bzr-test-bug9726 ()
- "Test for http://debbugs.gnu.org/9726 ."
- (skip-unless (executable-find vc-bzr-program))
- ;; Bzr wants to access HOME, e.g. to write ~/.bzr.log.
- ;; This is a problem on hydra, where HOME is non-existent.
- ;; You can disable logging with BZR_LOG=/dev/null, but then some
- ;; commands (eg `bzr status') want to access ~/.bazaar, and will
- ;; abort if they cannot. I could not figure out how to stop bzr
- ;; doing that, so just give it a temporary homedir for the duration.
- ;; http://bugs.launchpad.net/bzr/+bug/137407 ?
- (let* ((homedir (make-temp-file "vc-bzr-test" t))
- (bzrdir (expand-file-name "bzr" homedir))
- (ignored-dir (progn
- (make-directory bzrdir)
- (expand-file-name "ignored-dir" bzrdir)))
- (default-directory (file-name-as-directory bzrdir))
- (process-environment (cons (format "BZR_HOME=%s" homedir)
- process-environment)))
- (unwind-protect
- (progn
- (make-directory ignored-dir)
- (with-temp-buffer
- (insert (file-name-nondirectory ignored-dir))
- (write-region nil nil (expand-file-name ".bzrignore" bzrdir)
- nil 'silent))
- (call-process vc-bzr-program nil nil nil "init")
- (call-process vc-bzr-program nil nil nil "add")
- (call-process vc-bzr-program nil nil nil "commit" "-m" "Commit 1")
- (with-temp-buffer
- (insert "unregistered file")
- (write-region nil nil (expand-file-name "testfile2" ignored-dir)
- nil 'silent))
- (vc-dir ignored-dir)
- (while (vc-dir-busy)
- (sit-for 0.1))
- ;; FIXME better to explicitly test for error from process sentinel.
- (with-current-buffer "*vc-dir*"
- (goto-char (point-min))
- (should (search-forward "unregistered" nil t))))
- (delete-directory homedir t))))
-
-;; Not specific to bzr.
-(ert-deftest vc-bzr-test-bug9781 ()
- "Test for http://debbugs.gnu.org/9781 ."
- (skip-unless (executable-find vc-bzr-program))
- (let* ((homedir (make-temp-file "vc-bzr-test" t))
- (bzrdir (expand-file-name "bzr" homedir))
- (subdir (progn
- (make-directory bzrdir)
- (expand-file-name "subdir" bzrdir)))
- (file (expand-file-name "file" bzrdir))
- (default-directory (file-name-as-directory bzrdir))
- (process-environment (cons (format "BZR_HOME=%s" homedir)
- process-environment)))
- (unwind-protect
- (progn
- (call-process vc-bzr-program nil nil nil "init")
- (make-directory subdir)
- (with-temp-buffer
- (insert "text")
- (write-region nil nil file nil 'silent)
- (write-region nil nil (expand-file-name "subfile" subdir)
- nil 'silent))
- (call-process vc-bzr-program nil nil nil "add")
- (call-process vc-bzr-program nil nil nil "commit" "-m" "Commit 1")
- (call-process vc-bzr-program nil nil nil "remove" subdir)
- (with-temp-buffer
- (insert "different text")
- (write-region nil nil file nil 'silent))
- (vc-dir bzrdir)
- (while (vc-dir-busy)
- (sit-for 0.1))
- (vc-dir-mark-all-files t)
- (let ((f (symbol-function 'y-or-n-p)))
- (unwind-protect
- (progn
- (fset 'y-or-n-p (lambda (prompt) t))
- (vc-next-action nil))
- (fset 'y-or-n-p f)))
- (should (get-buffer "*vc-log*")))
- (delete-directory homedir t))))
-
-;; http://lists.gnu.org/archive/html/help-gnu-emacs/2012-04/msg00145.html
-(ert-deftest vc-bzr-test-faulty-bzr-autoloads ()
- "Test we can generate autoloads in a bzr directory when bzr is faulty."
- (skip-unless (executable-find vc-bzr-program))
- (let* ((homedir (make-temp-file "vc-bzr-test" t))
- (bzrdir (expand-file-name "bzr" homedir))
- (file (progn
- (make-directory bzrdir)
- (expand-file-name "foo.el" bzrdir)))
- (default-directory (file-name-as-directory bzrdir))
- (generated-autoload-file (expand-file-name "loaddefs.el" bzrdir))
- (process-environment (cons (format "BZR_HOME=%s" homedir)
- process-environment)))
- (unwind-protect
- (progn
- (call-process vc-bzr-program nil nil nil "init")
- (with-temp-buffer
- (insert ";;;###autoload
-\(defun foo () \"foo\" (interactive) (message \"foo!\"))")
- (write-region nil nil file nil 'silent))
- (call-process vc-bzr-program nil nil nil "add")
- (call-process vc-bzr-program nil nil nil "commit" "-m" "Commit 1")
- ;; Deleting dirstate ensures both that vc-bzr's status heuristic
- ;; fails, so it has to call the external bzr status, and
- ;; causes bzr status to fail. This simulates a broken bzr
- ;; installation.
- (delete-file ".bzr/checkout/dirstate")
- (should (progn (update-directory-autoloads default-directory)
- t)))
- (delete-directory homedir t))))
-
-;;; vc-bzr.el ends here
diff --git a/test/automated/vc-tests.el b/test/automated/vc-tests.el
deleted file mode 100644
index 847e0768da8..00000000000
--- a/test/automated/vc-tests.el
+++ /dev/null
@@ -1,618 +0,0 @@
-;;; vc-tests.el --- Tests of different backends of vc.el
-
-;; Copyright (C) 2014-2015 Free Software Foundation, Inc.
-
-;; Author: Michael Albinus <michael.albinus@gmx.de>
-
-;; This program 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.
-;;
-;; This program 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 this program. If not, see `http://www.gnu.org/licenses/'.
-
-;;; Commentary:
-
-;; For every supported VC on the machine, different test cases are
-;; generated automatically.
-
-;; Functions to be tested (see Commentary of vc.el). Mandatory
-;; functions are marked with `*', optional functions are marked with `-':
-
-;; BACKEND PROPERTIES
-;;
-;; * revision-granularity DONE
-
-;; STATE-QUERYING FUNCTIONS
-;;
-;; * registered (file) DONE
-;; * state (file) DONE
-;; - dir-status (dir update-function)
-;; - dir-status-files (dir files default-state update-function)
-;; - dir-extra-headers (dir)
-;; - dir-printer (fileinfo)
-;; - status-fileinfo-extra (file)
-;; * working-revision (file) DONE
-;; - latest-on-branch-p (file)
-;; * checkout-model (files) DONE
-;; - mode-line-string (file)
-
-;; STATE-CHANGING FUNCTIONS
-;;
-;; * create-repo (backend) DONE
-;; * register (files &optional comment) DONE
-;; - responsible-p (file)
-;; - receive-file (file rev)
-;; - unregister (file) DONE
-;; * checkin (files comment)
-;; * find-revision (file rev buffer)
-;; * checkout (file &optional rev)
-;; * revert (file &optional contents-done)
-;; - rollback (files)
-;; - merge-file (file rev1 rev2)
-;; - merge-branch ()
-;; - merge-news (file)
-;; - pull (prompt)
-;; - steal-lock (file &optional revision)
-;; - modify-change-comment (files rev comment)
-;; - mark-resolved (files)
-;; - find-admin-dir (file)
-
-;; HISTORY FUNCTIONS
-;;
-;; * print-log (files buffer &optional shortlog start-revision limit)
-;; * log-outgoing (backend remote-location)
-;; * log-incoming (backend remote-location)
-;; - log-view-mode ()
-;; - show-log-entry (revision)
-;; - comment-history (file)
-;; - update-changelog (files)
-;; * diff (files &optional async rev1 rev2 buffer)
-;; - revision-completion-table (files)
-;; - annotate-command (file buf &optional rev)
-;; - annotate-time ()
-;; - annotate-current-time ()
-;; - annotate-extract-revision-at-line ()
-;; - region-history (FILE BUFFER LFROM LTO)
-;; - region-history-mode ()
-
-;; TAG SYSTEM
-;;
-;; - create-tag (dir name branchp)
-;; - retrieve-tag (dir name update)
-
-;; MISCELLANEOUS
-;;
-;; - make-version-backups-p (file)
-;; - root (file)
-;; - ignore (file &optional directory)
-;; - ignore-completion-table
-;; - previous-revision (file rev)
-;; - next-revision (file rev)
-;; - log-edit-mode ()
-;; - check-headers ()
-;; - delete-file (file)
-;; - rename-file (old new)
-;; - find-file-hook ()
-;; - extra-menu ()
-;; - extra-dir-menu ()
-;; - conflicted-files (dir)
-
-;;; Code:
-
-(require 'ert)
-(require 'vc)
-
-;; The working horses.
-
-(defvar vc-test--cleanup-hook nil
- "Functions for cleanup at the end of an ert test.
-Don't set it globally, the functions shall be let-bound.")
-
-(defun vc-test--revision-granularity-function (backend)
- "Run the `vc-revision-granularity' backend function."
- (funcall (intern (downcase (format "vc-%s-revision-granularity" backend)))))
-
-(defun vc-test--create-repo-function (backend)
- "Run the `vc-create-repo' backend function.
-For backends which dont support it, it is emulated."
-
- (cond
- ((eq backend 'CVS)
- (let ((tmp-dir
- (expand-file-name
- (make-temp-name "vc-test") temporary-file-directory)))
- (make-directory (expand-file-name "module" tmp-dir) 'parents)
- (make-directory (expand-file-name "CVSROOT" tmp-dir) 'parents)
- (if (not (fboundp 'w32-application-type))
- (shell-command-to-string (format "cvs -Q -d:local:%s co module"
- tmp-dir))
- (let ((cvs-prog (executable-find "cvs"))
- (tdir tmp-dir))
- ;; If CVS executable is an MSYS program, reformat the file
- ;; name of TMP-DIR to have the /d/foo/bar form supported by
- ;; MSYS programs. (FIXME: What about Cygwin cvs.exe?)
- (if (eq (w32-application-type cvs-prog) 'msys)
- (setq tdir
- (concat "/" (substring tmp-dir 0 1) (substring tmp-dir 2))))
- (shell-command-to-string (format "cvs -Q -d:local:%s co module"
- tdir))))
- (rename-file "module/CVS" default-directory)
- (delete-directory "module" 'recursive)
- ;; We must cleanup the "remote" CVS repo as well.
- (add-hook 'vc-test--cleanup-hook
- `(lambda () (delete-directory ,tmp-dir 'recursive)))))
-
- ((eq backend 'Arch)
- (let ((archive-name (format "%s--%s" user-mail-address (random))))
- (when (string-match
- "no arch user id set" (shell-command-to-string "tla my-id"))
- (shell-command-to-string
- (format "tla my-id \"<%s>\"" user-mail-address)))
- (shell-command-to-string
- (format "tla make-archive %s %s" archive-name default-directory))
- (shell-command-to-string
- (format "tla my-default-archive %s" archive-name))))
-
- ((eq backend 'Mtn)
- (let ((archive-name "foo.mtn"))
- (shell-command-to-string
- (format
- "mtn db init --db=%s"
- (expand-file-name archive-name default-directory)))
- (shell-command-to-string
- (format "mtn --db=%s --branch=foo setup ." archive-name))))
-
- (t (vc-create-repo backend))))
-
-(defun vc-test--create-repo (backend)
- "Create a test repository in `default-directory', a temporary directory."
-
- (let ((vc-handled-backends `(,backend))
- (default-directory
- (file-name-as-directory
- (expand-file-name
- (make-temp-name "vc-test") temporary-file-directory)))
- vc-test--cleanup-hook)
-
- (unwind-protect
- (progn
- ;; Cleanup.
- (add-hook
- 'vc-test--cleanup-hook
- `(lambda () (delete-directory ,default-directory 'recursive)))
-
- ;; Check the revision granularity.
- (should (memq (vc-test--revision-granularity-function backend)
- '(file repository)))
-
- ;; Create empty repository.
- (make-directory default-directory)
- (should (file-directory-p default-directory))
- (vc-test--create-repo-function backend)
- (should (eq (vc-responsible-backend default-directory) backend)))
-
- ;; Save exit.
- (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
-
-;; Why isn't there `vc-unregister'?
-(defun vc-test--unregister-function (backend file)
- "Run the `vc-unregister' backend function.
-For backends which dont support it, `vc-not-supported' is signalled."
-
- (let ((symbol (intern (downcase (format "vc-%s-unregister" backend)))))
- (if (functionp symbol)
- (funcall symbol file)
- ;; CVS, SVN, SCCS, SRC and Mtn are not supported.
- (signal 'vc-not-supported (list 'unregister backend)))))
-
-(defun vc-test--register (backend)
- "Register and unregister a file."
-
- (let ((vc-handled-backends `(,backend))
- (default-directory
- (file-name-as-directory
- (expand-file-name
- (make-temp-name "vc-test") temporary-file-directory)))
- vc-test--cleanup-hook)
-
- (unwind-protect
- (progn
- ;; Cleanup.
- (add-hook
- 'vc-test--cleanup-hook
- `(lambda () (delete-directory ,default-directory 'recursive)))
-
- ;; Create empty repository.
- (make-directory default-directory)
- (vc-test--create-repo-function backend)
-
- (let ((tmp-name1 (expand-file-name "foo" default-directory))
- (tmp-name2 "bla"))
- ;; Register files. Check for it.
- (write-region "foo" nil tmp-name1 nil 'nomessage)
- (should (file-exists-p tmp-name1))
- (should-not (vc-registered tmp-name1))
- (write-region "bla" nil tmp-name2 nil 'nomessage)
- (should (file-exists-p tmp-name2))
- (should-not (vc-registered tmp-name2))
- (vc-register (list backend (list tmp-name1 tmp-name2)))
- (should (file-exists-p tmp-name1))
- (should (vc-registered tmp-name1))
- (should (file-exists-p tmp-name2))
- (should (vc-registered tmp-name2))
-
- ;; Unregister the files.
- (condition-case err
- (progn
- (vc-test--unregister-function backend tmp-name1)
- (should-not (vc-registered tmp-name1))
- (vc-test--unregister-function backend tmp-name2)
- (should-not (vc-registered tmp-name2)))
- ;; CVS, SVN, SCCS, SRC and Mtn are not supported.
- (vc-not-supported t))
- ;; The files shall still exist.
- (should (file-exists-p tmp-name1))
- (should (file-exists-p tmp-name2))))
-
- ;; Save exit.
- (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
-
-(defun vc-test--state (backend)
- "Check the different states of a file."
-
- (let ((vc-handled-backends `(,backend))
- (default-directory
- (file-name-as-directory
- (expand-file-name
- (make-temp-name "vc-test") temporary-file-directory)))
- vc-test--cleanup-hook)
-
- (unwind-protect
- (progn
- ;; Cleanup.
- (add-hook
- 'vc-test--cleanup-hook
- `(lambda () (delete-directory ,default-directory 'recursive)))
-
- ;; Create empty repository. Check repository state.
- (make-directory default-directory)
- (vc-test--create-repo-function backend)
-
- ;; nil: Hg Mtn RCS
- ;; added: Git
- ;; unregistered: CVS SCCS SRC
- ;; up-to-date: Bzr SVN
- (message "vc-state1 %s" (vc-state default-directory))
- (should (eq (vc-state default-directory)
- (vc-state default-directory backend)))
- (should (memq (vc-state default-directory)
- '(nil added unregistered up-to-date)))
-
- (let ((tmp-name (expand-file-name "foo" default-directory)))
- ;; Check state of an empty file.
-
- ;; nil: Hg Mtn SRC SVN
- ;; added: Git
- ;; unregistered: RCS SCCS
- ;; up-to-date: Bzr CVS
- (message "vc-state2 %s" (vc-state tmp-name))
- (should (eq (vc-state tmp-name) (vc-state tmp-name backend)))
- (should (memq (vc-state tmp-name)
- '(nil added unregistered up-to-date)))
-
- ;; Write a new file. Check state.
- (write-region "foo" nil tmp-name nil 'nomessage)
-
- ;; nil: Mtn
- ;; added: Git
- ;; unregistered: Hg RCS SCCS SRC SVN
- ;; up-to-date: Bzr CVS
- (message "vc-state3 %s" (vc-state tmp-name))
- (should (eq (vc-state tmp-name) (vc-state tmp-name backend)))
- (should (memq (vc-state tmp-name)
- '(nil added unregistered up-to-date)))
-
- ;; Register a file. Check state.
- (vc-register
- (list backend (list (file-name-nondirectory tmp-name))))
-
- ;; added: Git Mtn
- ;; unregistered: Hg RCS SCCS SRC SVN
- ;; up-to-date: Bzr CVS
- (message "vc-state4 %s" (vc-state tmp-name))
- (should (eq (vc-state tmp-name) (vc-state tmp-name backend)))
- (should (memq (vc-state tmp-name) '(added unregistered up-to-date)))
-
- ;; Unregister the file. Check state.
- (condition-case nil
- (progn
- (vc-test--unregister-function backend tmp-name)
-
- ;; added: Git
- ;; unregistered: Hg RCS
- ;; unsupported: CVS Mtn SCCS SRC SVN
- ;; up-to-date: Bzr
- (message "vc-state5 %s" (vc-state tmp-name))
- (should (eq (vc-state tmp-name) (vc-state tmp-name backend)))
- (should (memq (vc-state tmp-name)
- '(added unregistered up-to-date))))
- (vc-not-supported (message "vc-state5 unsupported")))))
-
- ;; Save exit.
- (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
-
-(defun vc-test--working-revision (backend)
- "Check the working revision of a repository."
-
- (let ((vc-handled-backends `(,backend))
- (default-directory
- (file-name-as-directory
- (expand-file-name
- (make-temp-name "vc-test") temporary-file-directory)))
- vc-test--cleanup-hook)
-
- (unwind-protect
- (progn
- ;; Cleanup.
- (add-hook
- 'vc-test--cleanup-hook
- `(lambda () (delete-directory ,default-directory 'recursive)))
-
- ;; Create empty repository. Check working revision of
- ;; repository, should be nil.
- (make-directory default-directory)
- (vc-test--create-repo-function backend)
-
- ;; nil: CVS Git Mtn RCS SCCS
- ;; "0": Bzr Hg SRC SVN
- (message
- "vc-working-revision1 %s" (vc-working-revision default-directory))
- (should (eq (vc-working-revision default-directory)
- (vc-working-revision default-directory backend)))
- (should (member (vc-working-revision default-directory) '(nil "0")))
-
- (let ((tmp-name (expand-file-name "foo" default-directory)))
- ;; Check initial working revision, should be nil until
- ;; it's registered.
-
- ;; nil: CVS Git Mtn RCS SCCS SVN
- ;; "0": Bzr Hg SRC
- (message "vc-working-revision2 %s" (vc-working-revision tmp-name))
- (should (eq (vc-working-revision tmp-name)
- (vc-working-revision tmp-name backend)))
- (should (member (vc-working-revision tmp-name) '(nil "0")))
-
- ;; Write a new file. Check working revision.
- (write-region "foo" nil tmp-name nil 'nomessage)
-
- ;; nil: CVS Git Mtn RCS SCCS SVN
- ;; "0": Bzr Hg SRC
- (message "vc-working-revision3 %s" (vc-working-revision tmp-name))
- (should (eq (vc-working-revision tmp-name)
- (vc-working-revision tmp-name backend)))
- (should (member (vc-working-revision tmp-name) '(nil "0")))
-
- ;; Register a file. Check working revision.
- (vc-register
- (list backend (list (file-name-nondirectory tmp-name))))
-
- ;; nil: Mtn Git RCS SCCS
- ;; "0": Bzr CVS Hg SRC SVN
- (message "vc-working-revision4 %s" (vc-working-revision tmp-name))
- (should (eq (vc-working-revision tmp-name)
- (vc-working-revision tmp-name backend)))
- (should (member (vc-working-revision tmp-name) '(nil "0")))
-
- ;; Unregister the file. Check working revision.
- (condition-case nil
- (progn
- (vc-test--unregister-function backend tmp-name)
-
- ;; nil: Git RCS
- ;; "0": Bzr Hg
- ;; unsupported: CVS Mtn SCCS SRC SVN
- (message
- "vc-working-revision5 %s" (vc-working-revision tmp-name))
- (should (eq (vc-working-revision tmp-name)
- (vc-working-revision tmp-name backend)))
- (should (member (vc-working-revision tmp-name) '(nil "0"))))
- (vc-not-supported (message "vc-working-revision5 unsupported")))))
-
- ;; Save exit.
- (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
-
-(defun vc-test--checkout-model (backend)
- "Check the checkout model of a repository."
-
- (let ((vc-handled-backends `(,backend))
- (default-directory
- (file-name-as-directory
- (expand-file-name
- (make-temp-name "vc-test") temporary-file-directory)))
- vc-test--cleanup-hook)
-
- (unwind-protect
- (progn
- ;; Cleanup.
- (add-hook
- 'vc-test--cleanup-hook
- `(lambda () (delete-directory ,default-directory 'recursive)))
-
- ;; Create empty repository. Check repository checkout model.
- (make-directory default-directory)
- (vc-test--create-repo-function backend)
-
- ;; Surprisingly, none of the backends returns 'announce.
- ;; nil: RCS
- ;; implicit: Bzr CVS Git Hg Mtn SRC SVN
- ;; locking: SCCS
- (message
- "vc-checkout-model1 %s"
- (vc-checkout-model backend default-directory))
- (should (memq (vc-checkout-model backend default-directory)
- '(announce implicit locking)))
-
- (let ((tmp-name (expand-file-name "foo" default-directory)))
- ;; Check checkout model of an empty file.
-
- ;; nil: RCS
- ;; implicit: Bzr CVS Git Hg Mtn SRC SVN
- ;; locking: SCCS
- (message
- "vc-checkout-model2 %s" (vc-checkout-model backend tmp-name))
- (should (memq (vc-checkout-model backend tmp-name)
- '(announce implicit locking)))
-
- ;; Write a new file. Check checkout model.
- (write-region "foo" nil tmp-name nil 'nomessage)
-
- ;; nil: RCS
- ;; implicit: Bzr CVS Git Hg Mtn SRC SVN
- ;; locking: SCCS
- (message
- "vc-checkout-model3 %s" (vc-checkout-model backend tmp-name))
- (should (memq (vc-checkout-model backend tmp-name)
- '(announce implicit locking)))
-
- ;; Register a file. Check checkout model.
- (vc-register
- (list backend (list (file-name-nondirectory tmp-name))))
-
- ;; nil: RCS
- ;; implicit: Bzr CVS Git Hg Mtn SRC SVN
- ;; locking: SCCS
- (message
- "vc-checkout-model4 %s" (vc-checkout-model backend tmp-name))
- (should (memq (vc-checkout-model backend tmp-name)
- '(announce implicit locking)))
-
- ;; Unregister the file. Check checkout model.
- (condition-case nil
- (progn
- (vc-test--unregister-function backend tmp-name)
-
- ;; nil: RCS
- ;; implicit: Bzr Git Hg
- ;; unsupported: CVS Mtn SCCS SRC SVN
- (message
- "vc-checkout-model5 %s" (vc-checkout-model backend tmp-name))
- (should (memq (vc-checkout-model backend tmp-name)
- '(announce implicit locking))))
- (vc-not-supported (message "vc-checkout-model5 unsupported")))))
-
- ;; Save exit.
- (ignore-errors (run-hooks 'vc-test--cleanup-hook)))))
-
-;; Create the test cases.
-
-(defun vc-test--rcs-enabled ()
- (executable-find "rcs"))
-
-(defun vc-test--cvs-enabled ()
- (executable-find "cvs"))
-
-(defvar vc-svn-program)
-(defun vc-test--svn-enabled ()
- (executable-find vc-svn-program))
-
-(defun vc-test--sccs-enabled ()
- (executable-find "sccs"))
-
-(defvar vc-src-program)
-(defun vc-test--src-enabled ()
- (executable-find vc-src-program))
-
-(defvar vc-bzr-program)
-(defun vc-test--bzr-enabled ()
- (executable-find vc-bzr-program))
-
-(defvar vc-git-program)
-(defun vc-test--git-enabled ()
- (executable-find vc-git-program))
-
-(defvar vc-hg-program)
-(defun vc-test--hg-enabled ()
- (executable-find vc-hg-program))
-
-(defvar vc-mtn-program)
-(defun vc-test--mtn-enabled ()
- (executable-find vc-mtn-program))
-
-;; Obsoleted.
-(defvar vc-arch-program)
-(defun vc-test--arch-enabled ()
- (executable-find vc-arch-program))
-
-;; Create the test cases.
-(dolist (backend vc-handled-backends)
- (let ((backend-string (downcase (symbol-name backend))))
- (require (intern (format "vc-%s" backend-string)))
- (eval
- ;; Check, whether the backend is supported.
- `(when (funcall ',(intern (format "vc-test--%s-enabled" backend-string)))
-
- (ert-deftest
- ,(intern (format "vc-test-%s00-create-repo" backend-string)) ()
- ,(format "Check `vc-create-repo' for the %s backend."
- backend-string)
- (vc-test--create-repo ',backend))
-
- (ert-deftest
- ,(intern (format "vc-test-%s01-register" backend-string)) ()
- ,(format
- "Check `vc-register' and `vc-registered' for the %s backend."
- backend-string)
- (skip-unless
- (ert-test-passed-p
- (ert-test-most-recent-result
- (ert-get-test
- ',(intern
- (format "vc-test-%s00-create-repo" backend-string))))))
- (vc-test--register ',backend))
-
- (ert-deftest
- ,(intern (format "vc-test-%s02-state" backend-string)) ()
- ,(format "Check `vc-state' for the %s backend." backend-string)
- (skip-unless
- (ert-test-passed-p
- (ert-test-most-recent-result
- (ert-get-test
- ',(intern
- (format "vc-test-%s01-register" backend-string))))))
- (vc-test--state ',backend))
-
- (ert-deftest
- ,(intern (format "vc-test-%s03-working-revision" backend-string)) ()
- ,(format "Check `vc-working-revision' for the %s backend."
- backend-string)
- (skip-unless
- (ert-test-passed-p
- (ert-test-most-recent-result
- (ert-get-test
- ',(intern
- (format "vc-test-%s01-register" backend-string))))))
- (vc-test--working-revision ',backend))
-
- (ert-deftest
- ,(intern (format "vc-test-%s04-checkout-model" backend-string)) ()
- ,(format "Check `vc-checkout-model' for the %s backend."
- backend-string)
- ;; FIXME make this pass.
- :expected-result ,(if (equal backend 'RCS) :failed :passed)
- (skip-unless
- (ert-test-passed-p
- (ert-test-most-recent-result
- (ert-get-test
- ',(intern
- (format "vc-test-%s01-register" backend-string))))))
- (vc-test--checkout-model ',backend))))))
-
-(provide 'vc-tests)
-;;; vc-tests.el ends here
diff --git a/test/automated/xml-parse-tests.el b/test/automated/xml-parse-tests.el
deleted file mode 100644
index 95eb2865afc..00000000000
--- a/test/automated/xml-parse-tests.el
+++ /dev/null
@@ -1,136 +0,0 @@
-;;; xml-parse-tests.el --- Test suite for XML parsing.
-
-;; Copyright (C) 2012-2015 Free Software Foundation, Inc.
-
-;; Author: Chong Yidong <cyd@stupidchicken.com>
-;; Keywords: internal
-;; Human-Keywords: 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/>.
-
-;;; Commentary:
-
-;; Type M-x test-xml-parse RET to generate the test buffer.
-
-;;; Code:
-
-(require 'ert)
-(require 'xml)
-
-(defvar xml-parse-tests--data
- `(;; General entity substitution
- ("<?xml version=\"1.0\"?><!DOCTYPE foo SYSTEM \"bar.dtd\" [<!ENTITY ent \"AbC\">]><foo a=\"b\"><bar>&ent;;</bar></foo>" .
- ((foo ((a . "b")) (bar nil "AbC;"))))
- ("<?xml version=\"1.0\"?><foo>&amp;amp;&#x26;apos;&apos;&lt;&gt;&quot;</foo>" .
- ((foo () "&amp;&apos;'<>\"")))
- ;; Parameter entity substitution
- ("<?xml version=\"1.0\"?><!DOCTYPE foo SYSTEM \"bar.dtd\" [<!ENTITY % pent \"AbC\"><!ENTITY ent \"%pent;\">]><foo a=\"b\"><bar>&ent;;</bar></foo>" .
- ((foo ((a . "b")) (bar nil "AbC;"))))
- ;; Tricky parameter entity substitution (like XML spec Appendix D)
- ("<?xml version='1.0'?><!DOCTYPE foo [ <!ENTITY % xx '&#37;zz;'><!ENTITY % zz '&#60;!ENTITY ent \"b\" >' > %xx; ]><foo>A&ent;C</foo>" .
- ((foo () "AbC")))
- ;; Bug#7172
- ("<?xml version=\"1.0\"?><!DOCTYPE foo [ <!ELEMENT EXAM_PLE EMPTY> ]><foo></foo>" .
- ((foo ())))
- ;; Entities referencing entities, in character data
- ("<!DOCTYPE foo [ <!ENTITY b \"B\"><!ENTITY abc \"a&b;c\">]><foo>&abc;</foo>" .
- ((foo () "aBc")))
- ;; Entities referencing entities, in attribute values
- ("<!DOCTYPE foo [ <!ENTITY b \"B\"><!ENTITY abc \"a&b;c\">]><foo a=\"-&abc;-\">1</foo>" .
- ((foo ((a . "-aBc-")) "1")))
- ;; Character references must be treated as character data
- ("<foo>AT&amp;T;</foo>" . ((foo () "AT&T;")))
- ("<foo>&#38;amp;</foo>" . ((foo () "&amp;")))
- ("<foo>&#x26;amp;</foo>" . ((foo () "&amp;")))
- ;; Unusual but valid XML names [5]
- ("<ÀÖØö.3·-‿⁀󯿿>abc</ÀÖØö.3·-‿⁀󯿿>" . ((,(intern "ÀÖØö.3·-‿⁀󯿿") () "abc")))
- ("<:>abc</:>" . ((,(intern ":") () "abc"))))
- "Alist of XML strings and their expected parse trees.")
-
-(defvar xml-parse-tests--bad-data
- '(;; XML bomb in content
- "<!DOCTYPE foo [<!ENTITY lol \"lol\"><!ENTITY lol1 \"&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;\"><!ENTITY lol2 \"&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;\">]><foo>&lol2;</foo>"
- ;; XML bomb in attribute value
- "<!DOCTYPE foo [<!ENTITY lol \"lol\"><!ENTITY lol1 \"&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;\"><!ENTITY lol2 \"&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;\">]><foo a=\"&lol2;\">!</foo>"
- ;; Non-terminating DTD
- "<!DOCTYPE foo [ <!ENTITY b \"B\"><!ENTITY abc \"a&b;c\">"
- "<!DOCTYPE foo [ <!ENTITY b \"B\"><!ENTITY abc \"a&b;c\">asdf"
- "<!DOCTYPE foo [ <!ENTITY b \"B\"><!ENTITY abc \"a&b;c\">asdf&abc;"
- ;; Invalid XML names
- "<0foo>abc</0foo>"
- "<‿foo>abc</‿foo>"
- "<f¿>abc</f¿>")
- "List of XML strings that should signal an error in the parser")
-
-(defvar xml-parse-tests--qnames
- '( ;; Test data for name expansion
- ("<?xml version=\"1.0\" encoding=\"UTF-8\"?><D:multistatus xmlns:D=\"DAV:\"><D:response><D:href>/calendar/events/</D:href><D:propstat><D:status>HTTP/1.1 200 OK</D:status></D:propstat></D:response></D:multistatus>"
- ;; Result with qnames as cons
- ((("DAV:" . "multistatus")
- ((("http://www.w3.org/2000/xmlns/" . "D") . "DAV:"))
- (("DAV:" . "response") nil (("DAV:" . "href") nil "/calendar/events/")
- (("DAV:" . "propstat") nil (("DAV:" . "status") nil "HTTP/1.1 200 OK")))))
- ;; Result with qnames as symbols
- ((DAV:multistatus
- ((("http://www.w3.org/2000/xmlns/" . "D") . "DAV:"))
- (DAV:response nil (DAV:href nil "/calendar/events/")
- (DAV:propstat nil (DAV:status nil "HTTP/1.1 200 OK"))))))
- ("<?xml version=\"1.0\" encoding=\"UTF-8\"?><F:something>hi there</F:something>"
- ((("FOOBAR:" . "something") nil "hi there"))
- ((FOOBAR:something nil "hi there"))))
- "List of strings which are parsed using namespace expansion.
-Parser is called with and without 'symbol-qnames argument.")
-
-(ert-deftest xml-parse-tests ()
- "Test XML parsing."
- (with-temp-buffer
- (dolist (test xml-parse-tests--data)
- (erase-buffer)
- (insert (car test))
- (should (equal (cdr test) (xml-parse-region))))
- (let ((xml-entity-expansion-limit 50))
- (dolist (test xml-parse-tests--bad-data)
- (erase-buffer)
- (insert test)
- (should-error (xml-parse-region))))
- (let ((testdata (car xml-parse-tests--qnames)))
- (erase-buffer)
- (insert (car testdata))
- (should (equal (nth 1 testdata)
- (xml-parse-region nil nil nil nil t)))
- (should (equal (nth 2 testdata)
- (xml-parse-region nil nil nil nil 'symbol-qnames))))
- (let ((testdata (nth 1 xml-parse-tests--qnames)))
- (erase-buffer)
- (insert (car testdata))
- ;; Provide additional namespace-URI mapping
- (should (equal (nth 1 testdata)
- (xml-parse-region
- nil nil nil nil
- (append xml-default-ns
- '(("F" . "FOOBAR:"))))))
- (should (equal (nth 2 testdata)
- (xml-parse-region
- nil nil nil nil
- (cons 'symbol-qnames
- (append xml-default-ns
- '(("F" . "FOOBAR:"))))))))))
-
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
-
-;;; xml-parse-tests.el ends here.
diff --git a/test/automated/zlib-tests.el b/test/automated/zlib-tests.el
deleted file mode 100644
index c6c084dd69f..00000000000
--- a/test/automated/zlib-tests.el
+++ /dev/null
@@ -1,45 +0,0 @@
-;;; zlib-tests.el --- Test suite for zlib.
-
-;; Copyright (C) 2013-2015 Free Software Foundation, Inc.
-
-;; Author: Lars Ingebrigtsen <larsi@gnus.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)
-
-(defvar zlib-tests-data-directory
- (expand-file-name "data/decompress" (getenv "EMACS_TEST_DIRECTORY"))
- "Directory containing zlib test data.")
-
-(ert-deftest zlib--decompress ()
- "Test decompressing a gzipped file."
- (when (and (fboundp 'zlib-available-p)
- (zlib-available-p))
- (should (string=
- (with-temp-buffer
- (set-buffer-multibyte nil)
- (insert-file-contents-literally
- (expand-file-name "foo.gz" zlib-tests-data-directory))
- (zlib-decompress-region (point-min) (point-max))
- (buffer-string))
- "foo\n"))))
-
-(provide 'zlib-tests)
-
-;;; zlib-tests.el ends here.