To run tests on the entire Emacs tree, run "make check" from the
top-level directory. Most tests are in the directory
-"test/automated". From the "test/automated" directory, run "make
+"test/". From the "test/" directory, run "make
<filename>" to run the tests for <filename>.el(c). See
-"test/automated/Makefile" for more information.
+"test/Makefile" for more information.
** Understanding Emacs Internals.
$(MAKE) -C src tags
check: all
- @if test ! -d test/automated; then \
+ @if test ! -d test; then \
echo "You do not seem to have the test/ directory."; \
echo "Maybe you are using a release tarfile, rather than a repository checkout."; \
else \
- $(MAKE) -C test/automated check; \
+ $(MAKE) -C test check; \
fi
dist:
SEPCHAR=':'
fi
AC_DEFINE_UNQUOTED(SEPCHAR, ['$SEPCHAR'], [Character that separates PATH elements.])
-dnl This is for MinGW, and is used in test/automated/Makefile.in.
+dnl This is for MinGW, and is used in test/Makefile.in.
dnl The MSYS Bash has heuristics for replacing ':' with ';' when it
dnl decides that a command-line argument to be passed to a MinGW program
dnl is a PATH-style list of directories. But that heuristics plays it
leim/Makefile nextstep/Makefile nt/Makefile])
dnl test/ is not present in release tarfiles.
-opt_makefile=test/automated/Makefile
+opt_makefile=test/Makefile
if test -f "$srcdir/$opt_makefile.in"; then
SUBDIR_MAKEFILES="$SUBDIR_MAKEFILES $opt_makefile"
dnl Again, it's best not to use a variable. Though you can add
dnl ", [], [opt_makefile='$opt_makefile']" and it should work.
- AC_CONFIG_FILES([test/automated/Makefile])
+ AC_CONFIG_FILES([test/Makefile])
fi
+++ /dev/null
-# 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
+++ /dev/null
-ADASRC=$(addprefix ./ada-src/,etags-test-for.ada 2ataspri.adb 2ataspri.ads waroquiers.ada)
-ASRC=$(addprefix ./a-src/,empty.zz empty.zz.gz)
-CSRC=$(addprefix ./c-src/,abbrev.c .//c.c torture.c getopt.h etags.c\
- exit.c exit.strange_suffix sysdep.h tab.c dostorture.c\
- emacs/src/gmalloc.c emacs/src/regex.h emacs/src/keyboard.c emacs/src/lisp.h\
- machsyscalls.c machsyscalls.h fail.c a/b/b.c) ../etags/c-src/h.h
-CPSRC=$(addprefix ./cp-src/,c.C x.cc burton.cpp burton.cpp\
- functions.cpp MDiagArray2.h Range.h\
- screen.cpp screen.hpp conway.cpp conway.hpp clheir.cpp.gz clheir.hpp.gz fail.C)
-ELSRC=$(addprefix ./el-src/,TAGTEST.EL emacs/lisp/progmodes/etags.el)
-ERLSRC=$(addprefix ./erl-src/,gs_dialog.erl)
-FORTHSRC=$(addprefix ./forth-src/,test-forth.fth)
-FSRC=$(addprefix ./f-src/,entry.for entry.strange_suffix entry.strange)
-HTMLSRC=$(addprefix ./html-src/,softwarelibero.html index.shtml algrthms.html software.html)
-#JAVASRC=$(addprefix ./java-src/, )
-LUASRC=$(addprefix ./lua-src/,allegro.lua)
-MAKESRC=$(addprefix ./make-src/,Makefile)
-OBJCSRC=$(addprefix ./objc-src/,Subprocess.h Subprocess.m PackInsp.h PackInsp.m)
-OBJCPPSRC=$(addprefix ./objcpp-src/,SimpleCalc.H SimpleCalc.M)
-PASSRC=$(addprefix ./pas-src/,common.pas)
-PERLSRC=$(addprefix ./perl-src/,htlmify-cystic yagrip.pl kai-test.pl)
-PHPSRC=$(addprefix ./php-src/,lce_functions.php ptest.php sendmail.php)
-PSSRC=$(addprefix ./ps-src/,rfc1245.ps)
-PROLSRC=$(addprefix ./prol-src/,ordsets.prolog natded.prolog)
-PYTSRC=$(addprefix ./pyt-src/,server.py)
-TEXSRC=$(addprefix ./tex-src/,testenv.tex gzip.texi texinfo.tex nonewline.tex)
-YSRC=$(addprefix ./y-src/,parse.y parse.c atest.y cccp.c cccp.y)
-SRCS=${ADASRC} ${ASRC} ${CSRC} ${CPSRC} ${ELSRC} ${ERLSRC} ${FSRC}\
- ${FORTHSRC} ${HTMLSRC} ${JAVASRC} ${LUASRC} ${MAKESRC} ${OBJCSRC}\
- ${OBJCPPSRC} ${PASSRC} ${PHPSRC} ${PERLSRC} ${PSSRC} ${PROLSRC} ${PYTSRC}\
- ${TEXSRC} ${YSRC}
-NONSRCS=./f-src/entry.strange ./erl-src/lists.erl ./cp-src/clheir.hpp.gz
-
-ETAGS_PROG=../../lib-src/etags
-CTAGS_PROG=../../lib-src/ctags
-
-REGEX=/[ \t]*DEFVAR_[A-Z_ \t\n(]+"\([^"]+\)"/
-xx="this line is here because of a fontlock bug
-
-RUN=
-
-OPTIONS=--members --declarations --regex=@regexfile
-ARGS=- < srclist
-
-infiles = $(filter-out ${NONSRCS},${SRCS}) srclist regexfile
-
-.PHONY: check cdiff ETAGS CTAGS
-# Can't make ediff_1 through ediff_5 .PHONY, as they're implicit.
-
-check:
- @$(MAKE) OPTIONS='--no-members' ediff_1
- @$(MAKE) OPTIONS='--declarations --no-members' ediff_2
- @$(MAKE) OPTIONS='--members' ediff_3
- @$(MAKE) OPTIONS='--regex=@regexfile --no-members' ediff_4
- @$(MAKE) OPTIONS='nonexistent --members --declarations --regex=@regexfile' ediff_5
- @$(MAKE) OPTIONS='--class-qualify --members --declarations --regex=@regexfile' ediff_6
- @$(MAKE) cdiff
-
-ediff%: ETAGS.good% ETAGS ${infiles}
- diff -u --suppress-common-lines --width=80 ETAGS.good$* ETAGS
-
-cdiff: CTAGS.good CTAGS ${infiles}
- diff -u --suppress-common-lines --width=80 CTAGS.good CTAGS
-
-ETAGS: ${infiles}
- ${RUN} ${ETAGS_PROG} ${OPTIONS} -o $@ ${ARGS}
-
-CTAGS: ${infiles}
- ${RUN} ${CTAGS_PROG} -o $@ --regex=@regexfile ${ARGS}
-
-srclist: Makefile
- @for i in $(SRCS); do echo $$i; done > srclist
- @echo "srclist remade"
-
-regexfile: Makefile
- @echo ' -- This is for GNU Emacs source files' > regexfile
- @printf '%s\n' '${REGEX}' >> regexfile
- @printf '%s\n' '{c}${REGEX}\\1/m' >> regexfile
- @echo "regexfile remade"
+++ /dev/null
-LATEST=17
-RELEASELIST=pot@gnu.org xemacs-review@xemacs.org jcwren@jcwren.com sxemacs-devel@sxemacs.org
-
-ADASRC=etags-test-for.ada 2ataspri.adb 2ataspri.ads waroquiers.ada
-ASRC=empty.zz empty.zz.gz
-CSRC=abbrev.c ../etags/h.h .//c.c torture.c getopt.h etags.c\
- exit.c exit.strange_suffix sysdep.h tab.c\
- emacs/src/gmalloc.c emacs/src/regex.h emacs/src/keyboard.c dostorture.c\
- machsyscalls.c machsyscalls.h fail.c a/b/b.c
-CPSRC=c.C abstract.C abstract.H cfront.H burton.cpp burton.cpp\
- functions.cpp MDiagArray2.h Pctest.h Range.h\
- screen.cpp screen.hpp conway.cpp conway.hpp clheir.cpp.gz clheir.hpp.gz fail.C
-ELSRC=TAGTEST.EL emacs/lisp/progmodes/etags.el
-ERLSRC=gs_dialog.erl lines.erl lists.erl
-FORTHSRC=test-forth.fth
-FSRC=entry.for entry.strange_suffix entry.strange
-HTMLSRC=softwarelibero.html index.shtml algrthms.html software.html
-JAVASRC=AWTEMul.java KeyEve.java SMan.java SysCol.java TG.java
-LUASRC=allegro.lua
-MAKESRC=Makefile
-OBJCSRC=Subprocess.h Subprocess.m PackInsp.h PackInsp.m
-OBJCPPSRC=SimpleCalc.H SimpleCalc.M
-PASSRC=common.pas
-PERLSRC=htlmify-cystic yagrip.pl kai-test.pl mirror.pl
-PHPSRC=lce_functions.php ptest.php sendmail.php
-PSSRC=rfc1245.ps
-PROLSRC=ordsets.prolog natded.prolog
-PYTSRC=server.py
-TEXSRC=testenv.tex gzip.texi texinfo.tex nonewline.tex
-YSRC=parse.y parse.c atest.y cccp.c cccp.y
-SRCS=Makefile ${ADASRC} ${ASRC} ${CSRC} ${CPSRC} ${ELSRC} ${ERLSRC} ${FSRC}\
- ${FORTHSRC} ${HTMLSRC} ${JAVASRC} ${LUASRC} ${MAKESRC} ${OBJCSRC}\
- ${OBJCPPSRC} ${PASSRC} ${PHPSRC} ${PERLSRC} ${PSSRC} ${PROLSRC} ${PYTSRC}\
- ${TEXSRC} ${YSRC}
-NONSRCS=entry.strange lists.erl clheir.hpp.gz
-
-VHDLFLAGS=--language=none --regex='/[ \t]*\(ARCHITECTURE\|CONFIGURATION\) +[^ ]* +OF/' --regex='/[ \t]*\(ATTRIBUTE\|ENTITY\|FUNCTION\|PACKAGE\( BODY\)?\|PROCEDURE\|PROCESS\|TYPE\)[ \t]+\([^ \t(]+\)/\3/'
-COBOLFLAGS=--language=none --regex='/.......[a-zA-Z0-9-]+\./'
-POSTSCRIPTFLAGS=--language=none --regex='#/[^ \t{]+#'
-TCLFLAGS=--lang=none --regex='/proc[ \t]+\([^ \t]+\)/\1/'
-
-GETOPTOBJS= #getopt.o getopt1.o
-RXINCLUDE=-Iemacs/src
-REGEXOBJS=regex.o
-
-CHECKOBJS=chkmalloc.o chkxm.o
-CHECKFLAGS=-DDEBUG -Wno-unused-function
-OBJS=${GETOPTOBJS} ${REGEXOBJS} ${CHECKOBJS}
-CPPFLAGS=${CHECKFLAGS} -DSTDC_HEADERS -DHAVE_GETCWD ${RXINCLUDE} -I.
-LDFLAGS=#-static -lc_p
-WARNINGS=-pedantic -Wall -Wpointer-arith -Winline -Wmissing-prototypes -Wmissing-declarations -Wunused -Wformat -Wno-switch -Wsign-compare -Wpointer-arith -Wshadow -Wstrict-prototypes
-CFLAGS=${WARNINGS} -ansi -g3 # -pg -O
-#CC=gcc-3.0
-#TARGET_ARCH=
-FASTCFLAGS=-O3 -finline-functions -ffast-math -funroll-loops
-FASTCFLAGSWARN=${WARNINGS} -Werror ${FASTCFLAGS}
-
-FILTER=grep -v '\.[Cchefy][lor]*,[1-9][0-9]*' || true
-REGEX=/[ \t]*DEFVAR_[A-Z_ \t\n(]+"\([^"]+\)"/
-xx="this line is here because of a fontlock bug
-
-MAKE:=$(MAKE) --no-print-directory
-RUN=time --quiet --format '%U + %S: %E'
-RUN=
-OPTIONS=--members --declarations --regex=@regexfile
-ARGS=- < srclist
-
-infiles = $(filter-out ${NONSRCS},${SRCS}) srclist regexfile
-
-quiettest:
- @rm -f /tmp/[0-9][0-9][0-9][0-9][0-9][0-9]malloc
- @-$(MAKE) OPTIONS='--no-members' ${LATEST}ediff
- @-$(MAKE) OPTIONS='--declarations --no-members' ${LATEST}ediff
- @-$(MAKE) OPTIONS='--members' ${LATEST}ediff
- @-$(MAKE) OPTIONS='--regex=@regexfile --no-members' ${LATEST}ediff
- @-$(MAKE) OPTIONS='nonexistent --members --declarations --regex=@regexfile' ${LATEST}ediff
- @-$(MAKE) ${LATEST}cdiff
-
-test:
- @rm -f /tmp/[0-9][0-9][0-9][0-9][0-9][0-9]malloc
- @$(MAKE) OPTIONS='--no-members' ${LATEST}ediff
- @$(MAKE) OPTIONS='--declarations --no-members' ${LATEST}ediff
- @$(MAKE) OPTIONS='--members' ${LATEST}ediff
- @$(MAKE) OPTIONS='--regex=@regexfile --no-members' ${LATEST}ediff
- @$(MAKE) OPTIONS='nonexistent --members --declarations --regex=@regexfile' ${LATEST}ediff
- @$(MAKE) ${LATEST}cdiff
-
-${CHECKOBJS}: CFLAGS=-g3 -DNULLFREECHECK=0
-
-checker:
- @rm -f /tmp/[0-9][0-9][0-9][0-9][0-9][0-9]malloc ${REGEXOBJS}
- @env CHECKEROPTS="--trace --profile --Wfree-null" \
- $(MAKE) CFLAGS= CHECKOBJS= CHECKFLAGS= CC=checkergcc ${LATEST}ediff
- rm -f $REGEXOBJS
-
-standalone:
- rm -f etags ctags
- @$(MAKE) etags "CPPFLAGS=-UVERSION"
- @$(MAKE) ctags "CPPFLAGS=-UVERSION"
-
-prof: ETAGS
- prof -xgs etags
-
-fastetags:
- rm -f etags ${GETOPTOBJS} ${REGEXOBJS}
- @$(MAKE) CHECKOBJS= CHECKFLAGS= etags "CFLAGS=-ansi ${FASTCFLAGSWARN}"
-
-fastctags:
- rm -f ctags ${GETOPTOBJS} ${REGEXOBJS}
- @$(MAKE) CHECKOBJS= CHECKFLAGS= ctags "CFLAGS=-ansi ${FASTCFLAGSWARN}"
-
-staticetags:
- rm -f etags ${GETOPTOBJS} ${REGEXOBJS}
- @$(MAKE) etags CHECKOBJS= CHECKFLAGS= REGEXOBJS= GETOPTOBJS= RXINCLUDE= "CFLAGS=${FASTCFLAGSWARN} -static"
-
-rsynctofly:
- rsync --exclude "*~" --exclude core --exclude etags -zauRv . fly:gnu/etags/
-
-rsyncfromfly:
- rsync --exclude "*~" --exclude core --exclude etags -zauRv fly:gnu/etags/ ../..
-
-web ftp publish:
- @-printf '\ttesting with debugging enabled...\n'; $(MAKE) quiettest
- @-printf '\ttesting standalone...\n'; $(MAKE) standalone quiettest
- @-printf '\ttesting fast versions...\n'; $(MAKE) fastetags fastctags quiettest
- @$(MAKE) /home/www/pub/etags.c.gz
- @$(MAKE) /home/www/pub/software/unix/etags.tar.gz
-
-release distrib: web
- cat xemacs-mail | /usr/sbin/sendmail -f pot@gnu.org ${RELEASELIST}
- mv etags etags${LATEST}
- mv ctags ctags${LATEST}
-
-tags: TAGS
-
-clean:
- rm -f ${OBJS} etags ETAGS
-
-srclist: Makefile
- @for i in $(SRCS); do echo $$i; done > srclist
- @echo srclist remade
-
-regexfile: Makefile
- @echo ' -- This is for GNU Emacs source files' > regexfile
- @echo '${REGEX}' >> regexfile
- @echo '{c}${REGEX}\\1/m' >> regexfile
- @echo regexfile remade
-
-/home/www/pub/etags.c.gz: etags.c
- co -kv etags.c
- gzip --best -c etags.c > $@
-
-#/home/www/pub/software/unix/etags.tar.gz: Makefile staticetags etags.1.man ETAGS.EBNF ETAGS.README
-# tar -hzcf $@ COPYING ChangeLog ETAGS.EBNF etags.c etags.1 etags.1.man etags
-
-/home/www/pub/software/unix/etags.tar.gz: Makefile etags.1.man ETAGS.EBNF ETAGS.README maintaining.texi
- tar -hzcf $@ COPYING ChangeLog ETAGS.EBNF ETAGS.README etags.c etags.1 etags.1.man maintaining.texi
-
-regex.o: emacs/src/regex.c
- $(CC) ${FASTCFLAGS} -c $?
-
-getopt.o: emacs/lib-src/getopt.c
- $(CC) ${FASTCFLAGS} -c $?
-
-getopt1.o: emacs/lib-src/getopt1.c
- $(CC) ${FASTCFLAGS} -c $?
-
-etags: etags.c ${OBJS}
- $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o etags etags.c ${OBJS}
-
-ctags: etags.c ${OBJS}
- $(CC) $(CFLAGS) $(CPPFLAGS) -DCTAGS $(LDFLAGS) -o ctags etags.c ${OBJS}
-
-man manpage: etags.1.man
-
-etags.1.man: etags.1
- nroff -man -Tman etags.1 > $@
-
-maintaining.info: maintaining.texi
- makeinfo --force --no-split maintaining.texi
-
-TAGS: etags.c
- etags etags.c
-
-%ediff: ETAGS% ETAGS ${infiles}
- sdiff --suppress-common-lines --width=103 ETAGS$* ETAGS
-
-oediff: OTAGS ETAGS ${infiles}
- sdiff --suppress-common-lines --width=103 OTAGS ETAGS
-
-%cdiff: CTAGS% CTAGS ${infiles}
- sdiff --suppress-common-lines --width=103 CTAGS$* CTAGS
-
-xdiff: ETAGS EXTAGS ${infiles}
- sdiff --suppress-common-lines --width=103 ETAGS EXTAGS
-
-ETAGS: FRC etags ${infiles}
- ${RUN} ./etags ${OPTIONS} -o $@ ${ARGS}
-
-ETAGS%: FRC etags% ${infiles}
- ${RUN} etags$* ${OPTIONS} -o $@ ${ARGS}
-
-ETAGS13 ETAGS14 ETAGS15: etags% ${infiles}
- TEXTAGS=def:newcommand:newenvironment ${RUN} etags$* --regex=@regexfile} -o $@ ${ARGS}
-
-ETAGS12: etags12 ${infiles}
- ${RUN} etags12 --members -o $@ --regex='${REGEX}' ${ARGS}
-
-OTAGS: oetags ${SRCS} srclist
- ${RUN} ./oetags -o $@ -t ${ARGS}
-
-CTAGS: ctags ${infiles}
- ${RUN} ./ctags -o $@ --regex=@regexfile ${ARGS}
-
-CTAGS%: ctags% ${infiles}
- ${RUN} ctags$* -wtTd --globals --members -o $@ --regex=@regexfile ${ARGS}
-
-CTAGS13 CTAGS14 CTAGS15: ctags% ${infiles}
- TEXTAGS=def:newcommand:newenvironment ${RUN} ctags$* -wt -o $@ --regex='${REGEX}' ${ARGS}
-
-EXTAGS: extags ${infiles} Makefile
- ${RUN} ./extags -e --regex-c='${REGEX}' --c++-types=+x --c-types=+x --if0=yes --line-directives=yes -o $@ -L - < srclist
-
-.PRECIOUS: ETAGS CTAGS ETAGS16 CTAGS16 ETAGS17 CTAGS17
-
-FRC:;
--- /dev/null
+#+TITLE: The Location of Emacs-Lisp Tests
+
+
+
+* The Main Emacs Repository
+
+The Emacs repository contains a very large number of Emacs-Lisp files, many of
+which pre-date both formal package support for Emacs and automated unit
+testing.
+
+All paths are relative to the Emacs root directory.
+
+** Source
+
+Lisp files are stored in the ~lisp~ directory or its sub-directories.
+Sub-directories are in many cases themed after packages (~gnus~, ~org~,
+~calc~), related functionality (~net~, ~emacs-lisp~, ~progmodes~) or status
+(~obsolete~).
+
+C source is stored in the ~src~ directory, which is flat.
+
+** Test Files
+
+Automated tests should be stored in the ~test/automated/lisp~ directory. Tests
+should reflect the directory structure of the source tree; so tests for files
+in the ~emacs-lisp~ source directory should reside in the
+~test/lisp/emacs-lisp~ directory.
+
+Tests should normally reside in a file with ~-tests~ added to the name of
+the tested source file; hence ~ert.el~ is tested in ~ert-tests.el~, or
+~pcase.el~ is tested in ~pcase-tests.el~. Exceptionally, tests for a
+single feature may be placed into multiple files of any name which are
+themselves placed in a directory named after the feature with ~-tests~
+appended, such as ~/test/lisp/emacs-lisp/eieio-tests~
+
+Where features of the C source are tested using Emacs-Lisp test files, these
+should reside in ~/test/src~ and be named after the C file.
+
+A few test suites which predate this scheme and do not fit cleanly
+into it are placed in ~/test/lisp/legacy~.
+
+There are also some test materials that cannot be run automatically
+(i.e. via ert). These should be placed in ~/test/manual~
+
+** Resource Files
+
+Resource files for tests (containing test data) should reside in a directory
+named after the feature with a ~-resources~ suffix, and located in the same
+directory as the feature. Hence, the lisp file ~flymake.el~ should have test
+files in ~/test/automated/lisp/progmodes/flymake-tests.el~ should reside in a
+directory called ~/test/automated/lisp/progmodes/flymake-resources~.
+
+No guidance is given for the organisation of resource files inside the
+~-resource~ directory; files can be organised at the author's discretion.
+++ /dev/null
-RM=rm
-EMACS=../../src/emacs
-
-all: clean $(addsuffix .test,$(wildcard *.*))
-
-clean:
- -$(RM) -f *.new
-
-# TODO:
-# - mark the places where the indentation is known to be incorrect,
-# and allow either ignoring those errors or not.
-%.test: %
- $(EMACS) --batch $< \
- --eval '(indent-region (point-min) (point-max) nil)' \
- --eval '(write-region (point-min) (point-max) "$<.new")'
- diff -u -B $< $<.new