mirror of https://gitee.com/Nocallback/dejagnu.git
Browse Source
cases. * testsuite/libdejagnu/unit.cc: Test case for dejagnu.h. * testsuite/libdejagnu/tunit.exp: Test driver for dejagnu.h. * testsuite/libdejagnu/Makefile.am: New makefile to build the test case. * testsuite/libdejagnu/Makefile.in: Generated. * testsuite/Makefile.am: Add libdejagnu to SUBDIRS. Replace the site.exp rule, cause we don't want the $tool setting, so we run all the test suites. Don't pass the tool name for "make check". * configure.in: Add testsuite/libdejagnu/Makefile to AC_OUTPUT.dejagnu-1.4
9 changed files with 711 additions and 48 deletions
@ -0,0 +1,10 @@ |
|||
## Process this file with automake to generate Makefile.in
|
|||
|
|||
# AUTOMAKE_OPTIONS =
|
|||
|
|||
CFLAGS = -I$(top_srcdir) |
|||
|
|||
bin_PROGRAMS = unit |
|||
|
|||
unit_SOURCES = unit.cc |
|||
|
|||
@ -0,0 +1,342 @@ |
|||
# Makefile.in generated automatically by automake 1.4 from Makefile.am
|
|||
|
|||
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
|||
# This Makefile.in is free software; the Free Software Foundation
|
|||
# gives unlimited permission to copy and/or distribute it,
|
|||
# with or without modifications, as long as this notice is preserved.
|
|||
|
|||
# This program is distributed in the hope that it will be useful,
|
|||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
|||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|||
# PARTICULAR PURPOSE.
|
|||
|
|||
# AUTOMAKE_OPTIONS =
|
|||
|
|||
|
|||
SHELL = @SHELL@ |
|||
|
|||
srcdir = @srcdir@ |
|||
top_srcdir = @top_srcdir@ |
|||
VPATH = @srcdir@ |
|||
prefix = @prefix@ |
|||
exec_prefix = @exec_prefix@ |
|||
|
|||
bindir = @bindir@ |
|||
sbindir = @sbindir@ |
|||
libexecdir = @libexecdir@ |
|||
datadir = @datadir@ |
|||
sysconfdir = @sysconfdir@ |
|||
sharedstatedir = @sharedstatedir@ |
|||
localstatedir = @localstatedir@ |
|||
libdir = @libdir@ |
|||
infodir = @infodir@ |
|||
mandir = @mandir@ |
|||
includedir = @includedir@ |
|||
oldincludedir = /usr/include |
|||
|
|||
DESTDIR = |
|||
|
|||
pkgdatadir = $(datadir)/@PACKAGE@ |
|||
pkglibdir = $(libdir)/@PACKAGE@ |
|||
pkgincludedir = $(includedir)/@PACKAGE@ |
|||
|
|||
top_builddir = ../.. |
|||
|
|||
ACLOCAL = @ACLOCAL@ |
|||
AUTOCONF = @AUTOCONF@ |
|||
AUTOMAKE = @AUTOMAKE@ |
|||
AUTOHEADER = @AUTOHEADER@ |
|||
|
|||
INSTALL = @INSTALL@ |
|||
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) |
|||
INSTALL_DATA = @INSTALL_DATA@ |
|||
INSTALL_SCRIPT = @INSTALL_SCRIPT@ |
|||
transform = @program_transform_name@ |
|||
|
|||
NORMAL_INSTALL = : |
|||
PRE_INSTALL = : |
|||
POST_INSTALL = : |
|||
NORMAL_UNINSTALL = : |
|||
PRE_UNINSTALL = : |
|||
POST_UNINSTALL = : |
|||
BOARDS = @BOARDS@ |
|||
CC = @CC@ |
|||
CONFIG = @CONFIG@ |
|||
CXX = @CXX@ |
|||
DOCBOOK = @DOCBOOK@ |
|||
EXEEXT = @EXEEXT@ |
|||
MAINT = @MAINT@ |
|||
MAKEINFO = @MAKEINFO@ |
|||
PACKAGE = @PACKAGE@ |
|||
TCLSH = @TCLSH@ |
|||
VERSION = @VERSION@ |
|||
tclsh = @tclsh@ |
|||
|
|||
CFLAGS = -I$(top_srcdir) |
|||
|
|||
bin_PROGRAMS = unit |
|||
|
|||
unit_SOURCES = unit.cc |
|||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs |
|||
CONFIG_CLEAN_FILES = |
|||
bin_PROGRAMS = unit$(EXEEXT) |
|||
PROGRAMS = $(bin_PROGRAMS) |
|||
|
|||
|
|||
DEFS = @DEFS@ -I. -I$(srcdir) |
|||
CPPFLAGS = @CPPFLAGS@ |
|||
LDFLAGS = @LDFLAGS@ |
|||
LIBS = @LIBS@ |
|||
unit_OBJECTS = unit.o |
|||
unit_LDADD = $(LDADD) |
|||
unit_DEPENDENCIES = |
|||
unit_LDFLAGS = |
|||
CXXFLAGS = @CXXFLAGS@ |
|||
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) |
|||
CXXLD = $(CXX) |
|||
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ |
|||
DIST_COMMON = Makefile.am Makefile.in |
|||
|
|||
|
|||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) |
|||
|
|||
TAR = gtar |
|||
GZIP_ENV = --best |
|||
DEP_FILES = .deps/unit.P |
|||
SOURCES = $(unit_SOURCES) |
|||
OBJECTS = $(unit_OBJECTS) |
|||
|
|||
all: all-redirect |
|||
.SUFFIXES: |
|||
.SUFFIXES: .S .c .cc .o .s |
|||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) |
|||
cd $(top_srcdir) && $(AUTOMAKE) --gnu testsuite/libdejagnu/Makefile |
|||
|
|||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) |
|||
cd $(top_builddir) \
|
|||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status |
|||
|
|||
|
|||
mostlyclean-binPROGRAMS: |
|||
|
|||
clean-binPROGRAMS: |
|||
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) |
|||
|
|||
distclean-binPROGRAMS: |
|||
|
|||
maintainer-clean-binPROGRAMS: |
|||
|
|||
install-binPROGRAMS: $(bin_PROGRAMS) |
|||
@$(NORMAL_INSTALL) |
|||
$(mkinstalldirs) $(DESTDIR)$(bindir) |
|||
@list='$(bin_PROGRAMS)'; for p in $$list; do \
|
|||
if test -f $$p; then \
|
|||
echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
|
|||
$(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
|
|||
else :; fi; \
|
|||
done |
|||
|
|||
uninstall-binPROGRAMS: |
|||
@$(NORMAL_UNINSTALL) |
|||
list='$(bin_PROGRAMS)'; for p in $$list; do \
|
|||
rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
|
|||
done |
|||
|
|||
.s.o: |
|||
$(COMPILE) -c $< |
|||
|
|||
.S.o: |
|||
$(COMPILE) -c $< |
|||
|
|||
mostlyclean-compile: |
|||
-rm -f *.o core *.core |
|||
|
|||
clean-compile: |
|||
|
|||
distclean-compile: |
|||
-rm -f *.tab.c |
|||
|
|||
maintainer-clean-compile: |
|||
|
|||
unit$(EXEEXT): $(unit_OBJECTS) $(unit_DEPENDENCIES) |
|||
@rm -f unit$(EXEEXT) |
|||
$(CXXLINK) $(unit_LDFLAGS) $(unit_OBJECTS) $(unit_LDADD) $(LIBS) |
|||
.cc.o: |
|||
$(CXXCOMPILE) -c $< |
|||
|
|||
tags: TAGS |
|||
|
|||
ID: $(HEADERS) $(SOURCES) $(LISP) |
|||
list='$(SOURCES) $(HEADERS)'; \
|
|||
unique=`for i in $$list; do echo $$i; done | \
|
|||
awk ' { files[$$0] = 1; } \
|
|||
END { for (i in files) print i; }'`; \
|
|||
here=`pwd` && cd $(srcdir) \
|
|||
&& mkid -f$$here/ID $$unique $(LISP) |
|||
|
|||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) |
|||
tags=; \
|
|||
here=`pwd`; \
|
|||
list='$(SOURCES) $(HEADERS)'; \
|
|||
unique=`for i in $$list; do echo $$i; done | \
|
|||
awk ' { files[$$0] = 1; } \
|
|||
END { for (i in files) print i; }'`; \
|
|||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
|||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) |
|||
|
|||
mostlyclean-tags: |
|||
|
|||
clean-tags: |
|||
|
|||
distclean-tags: |
|||
-rm -f TAGS ID |
|||
|
|||
maintainer-clean-tags: |
|||
|
|||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) |
|||
|
|||
subdir = testsuite/libdejagnu |
|||
|
|||
distdir: $(DISTFILES) |
|||
here=`cd $(top_builddir) && pwd`; \
|
|||
top_distdir=`cd $(top_distdir) && pwd`; \
|
|||
distdir=`cd $(distdir) && pwd`; \
|
|||
cd $(top_srcdir) \
|
|||
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu testsuite/libdejagnu/Makefile |
|||
@for file in $(DISTFILES); do \
|
|||
d=$(srcdir); \
|
|||
if test -d $$d/$$file; then \
|
|||
cp -pr $$d/$$file $(distdir)/$$file; \
|
|||
else \
|
|||
test -f $(distdir)/$$file \
|
|||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
|||
|| cp -p $$d/$$file $(distdir)/$$file || :; \
|
|||
fi; \
|
|||
done |
|||
|
|||
DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) |
|||
|
|||
-include $(DEP_FILES) |
|||
|
|||
mostlyclean-depend: |
|||
|
|||
clean-depend: |
|||
|
|||
distclean-depend: |
|||
-rm -rf .deps |
|||
|
|||
maintainer-clean-depend: |
|||
|
|||
%.o: %.c |
|||
@echo '$(COMPILE) -c $<'; \
|
|||
$(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< |
|||
@-cp .deps/$(*F).pp .deps/$(*F).P; \
|
|||
tr ' ' '\012' < .deps/$(*F).pp \
|
|||
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
|
|||
>> .deps/$(*F).P; \
|
|||
rm .deps/$(*F).pp |
|||
|
|||
%.lo: %.c |
|||
@echo '$(LTCOMPILE) -c $<'; \
|
|||
$(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< |
|||
@-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
|
|||
< .deps/$(*F).pp > .deps/$(*F).P; \
|
|||
tr ' ' '\012' < .deps/$(*F).pp \
|
|||
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
|
|||
>> .deps/$(*F).P; \
|
|||
rm -f .deps/$(*F).pp |
|||
|
|||
%.o: %.cc |
|||
@echo '$(CXXCOMPILE) -c $<'; \
|
|||
$(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< |
|||
@-cp .deps/$(*F).pp .deps/$(*F).P; \
|
|||
tr ' ' '\012' < .deps/$(*F).pp \
|
|||
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
|
|||
>> .deps/$(*F).P; \
|
|||
rm .deps/$(*F).pp |
|||
|
|||
%.lo: %.cc |
|||
@echo '$(LTCXXCOMPILE) -c $<'; \
|
|||
$(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< |
|||
@-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
|
|||
< .deps/$(*F).pp > .deps/$(*F).P; \
|
|||
tr ' ' '\012' < .deps/$(*F).pp \
|
|||
| sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
|
|||
>> .deps/$(*F).P; \
|
|||
rm -f .deps/$(*F).pp |
|||
info-am: |
|||
info: info-am |
|||
dvi-am: |
|||
dvi: dvi-am |
|||
check-am: all-am |
|||
check: check-am |
|||
installcheck-am: |
|||
installcheck: installcheck-am |
|||
install-exec-am: install-binPROGRAMS |
|||
install-exec: install-exec-am |
|||
|
|||
install-data-am: |
|||
install-data: install-data-am |
|||
|
|||
install-am: all-am |
|||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am |
|||
install: install-am |
|||
uninstall-am: uninstall-binPROGRAMS |
|||
uninstall: uninstall-am |
|||
all-am: Makefile $(PROGRAMS) |
|||
all-redirect: all-am |
|||
install-strip: |
|||
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install |
|||
installdirs: |
|||
$(mkinstalldirs) $(DESTDIR)$(bindir) |
|||
|
|||
|
|||
mostlyclean-generic: |
|||
|
|||
clean-generic: |
|||
|
|||
distclean-generic: |
|||
-rm -f Makefile $(CONFIG_CLEAN_FILES) |
|||
-rm -f config.cache config.log stamp-h stamp-h[0-9]* |
|||
|
|||
maintainer-clean-generic: |
|||
mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ |
|||
mostlyclean-tags mostlyclean-depend mostlyclean-generic |
|||
|
|||
mostlyclean: mostlyclean-am |
|||
|
|||
clean-am: clean-binPROGRAMS clean-compile clean-tags clean-depend \ |
|||
clean-generic mostlyclean-am |
|||
|
|||
clean: clean-am |
|||
|
|||
distclean-am: distclean-binPROGRAMS distclean-compile distclean-tags \ |
|||
distclean-depend distclean-generic clean-am |
|||
|
|||
distclean: distclean-am |
|||
|
|||
maintainer-clean-am: maintainer-clean-binPROGRAMS \ |
|||
maintainer-clean-compile maintainer-clean-tags \
|
|||
maintainer-clean-depend maintainer-clean-generic \
|
|||
distclean-am |
|||
@echo "This command is intended for maintainers to use;" |
|||
@echo "it deletes files that may require special tools to rebuild." |
|||
|
|||
maintainer-clean: maintainer-clean-am |
|||
|
|||
.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ |
|||
maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ |
|||
mostlyclean-compile distclean-compile clean-compile \ |
|||
maintainer-clean-compile tags mostlyclean-tags distclean-tags \ |
|||
clean-tags maintainer-clean-tags distdir mostlyclean-depend \ |
|||
distclean-depend clean-depend maintainer-clean-depend info-am info \ |
|||
dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ |
|||
install-exec install-data-am install-data install-am install \ |
|||
uninstall-am uninstall all-redirect all-am all installdirs \ |
|||
mostlyclean-generic distclean-generic clean-generic \ |
|||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean |
|||
|
|||
|
|||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
|||
.NOEXPORT: |
|||
@ -0,0 +1,46 @@ |
|||
load_lib "dejagnu.exp" |
|||
|
|||
# If tracing has been enabled at the top level, then turn it on here |
|||
# too. |
|||
if $tracelevel { |
|||
strace $tracelevel |
|||
} |
|||
|
|||
# exp_internal -f dbg.log 1 |
|||
|
|||
# Execute everything in the test subdir so all the output files go there. |
|||
cd $subdir |
|||
|
|||
# Get the size of the module being tested. |
|||
set sizes [exe_size "unit"] |
|||
if {[lindex $sizes 0] == "-1"} { |
|||
perror "Couldn't get the object file size" 0 |
|||
} |
|||
|
|||
# Extract the text section size |
|||
set textsize [lindex $sizes 0] |
|||
|
|||
# Extract the data section size |
|||
set datasize [lindex $sizes 1] |
|||
|
|||
# FIXME: This ultimately needs to be recorded in the testing database, |
|||
# which doesn't exist yet. Till then it's kinda bogus, but I figured |
|||
# it would be useful having working code to get this data. So we print |
|||
# it out, just for the demo aspects. |
|||
verbose "Text section size of proctor is 0x$textsize" |
|||
verbose "Data section size of proctor is 0x$datasize" |
|||
|
|||
# Execute the test case, and analyse the output |
|||
if { [host_execute "unit"] != "" } { |
|||
perror "unit had an execution error" 0 |
|||
} |
|||
|
|||
# All done, back to the top level test directory |
|||
cd .. |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
@ -0,0 +1,114 @@ |
|||
// unit.cc -- This is a test case for the Dejagnu.h classes.
|
|||
|
|||
#include <iostream> |
|||
#include <dejagnu.h> |
|||
|
|||
#include <regex.h> |
|||
#include <string> |
|||
#include <fstream> |
|||
#include <set> |
|||
#include <sys/types.h> |
|||
|
|||
TestState runtest; |
|||
TestState test; |
|||
|
|||
class TestClass1 { |
|||
public: |
|||
string tname; |
|||
unsigned int tnum; |
|||
}; |
|||
|
|||
TestClass1 testClass1, testClass2, testClass3; |
|||
TestClass1 *testClassPtr; |
|||
|
|||
// We have to so this silly crap with renaming the output string, so the generic
|
|||
// Tcl code that looks for the output state gets confused, and records random
|
|||
// duplicate messages.
|
|||
char *os1[] = { |
|||
"FAI: ", |
|||
"PAS: ", |
|||
"UNT: ", |
|||
"UNR: " |
|||
}; |
|||
|
|||
char *os2[] = { |
|||
"FAILED: ", |
|||
"PASSED: ", |
|||
"UNTESTED: ", |
|||
"UNRESOLVED: " |
|||
}; |
|||
|
|||
int |
|||
main (int argc, char *argv[]) { |
|||
regex_t regex_pat; |
|||
|
|||
// char **os2 = outstate;
|
|||
outstate = os1; |
|||
|
|||
// Replace the output buffer for cout, so we can examine it to
|
|||
// see what was displayed. Otherwise, there is no way we can test
|
|||
// the logging functions completely.
|
|||
streambuf *sb = cout.rdbuf(); |
|||
char bbuuff[5120]; |
|||
sb->setbuf(bbuuff, 5120); |
|||
|
|||
testClass1.tname = "testType1"; |
|||
testClass1.tnum = 1; |
|||
testClass2.tname = "testType2"; |
|||
testClass2.tnum = 2; |
|||
testClass3.tname = "testType3"; |
|||
testClass3.tnum = 3; |
|||
|
|||
// Test the pass message
|
|||
test.pass ("bogus pass message for testing"); |
|||
outstate = os2; |
|||
if (strncmp(bbuuff, "\tPAS: bogus pass message", 22) == 0) { |
|||
runtest.pass ("Pass message"); |
|||
} else { |
|||
runtest.fail ("Pass message"); |
|||
} |
|||
|
|||
// Test the fail message
|
|||
outstate = os1; |
|||
test.fail ("bogus fail message for testing"); |
|||
cout.flush(); |
|||
outstate = os2; |
|||
if (strncmp(bbuuff, "\tFAI: bogus fail message", 22) == 0) { |
|||
runtest.pass ("Fail message"); |
|||
} else { |
|||
runtest.fail ("Fail message"); |
|||
} |
|||
|
|||
// Test the untested message
|
|||
outstate = os1; |
|||
test.untested ("bogus untested message for testing"); |
|||
cout.flush(); |
|||
outstate = os2; |
|||
if (strncmp(bbuuff, "\tUNT: bogus untested message", 21) == 0) { |
|||
runtest.pass ("Untested message"); |
|||
} else { |
|||
runtest.fail ("Untested message"); |
|||
} |
|||
|
|||
// Test the unresolved message
|
|||
outstate = os1; |
|||
test.unresolved ("bogus unresolved message for testing"); |
|||
cout.flush(); |
|||
outstate = os2; |
|||
if (strncmp(bbuuff, "\tUNR: bogus unresolved message", 21) == 0) { |
|||
runtest.pass ("Unresolved message"); |
|||
} else { |
|||
runtest.fail ("Unresolved message"); |
|||
} |
|||
|
|||
// Make sure we got everything in the totals
|
|||
regcomp (®ex_pat, "\r\n\t#passed.*#failed.*#untested.*#unresolved", REG_NOSUB|REG_NEWLINE); |
|||
if (regexec (®ex_pat, bbuuff, 0, (regmatch_t *)0, 0)) { |
|||
runtest.pass ("Totals message"); |
|||
} else { |
|||
runtest.fail ("Totals message"); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
Loading…
Reference in new issue