Browse Source

* TODO: Update.

* testsuite/libdejagnu/unit.cc: Conform with GNU coding standard.
origin
Ben Elliston 23 years ago
parent
commit
30c35cf469
  1. 6
      ChangeLog
  2. 42
      TODO
  3. 179
      testsuite/libdejagnu/unit.cc

6
ChangeLog

@ -1,3 +1,9 @@
2004-02-09 Ben Elliston <bje@wasabisystems.com>
* TODO: Update.
* testsuite/libdejagnu/unit.cc: Conform with GNU coding standard.
2004-02-08 Ben Elliston <bje@wasabisystems.com>
* configure.ac: Quote strings throughout in good Autoconf style.

42
TODO

@ -1,4 +1,4 @@
Last updated $Date: 2004/02/08 12:57:53 $
Last updated $Date: 2004/02/08 14:02:07 $
Bigger items
============
@ -14,3 +14,43 @@ Documentation
=============
* Add a "testing methodologies" section to the manual.
From: mec.gnu@mindspring.com (Michael Elizabeth Chastain)
Subject: my dejagnu wish list
Newsgroups: gmane.comp.sysutils.dejagnu.general
Date: Sat, 31 Jan 2004 21:02:21 -0500 (EST)
My wish list for dejagnu:
. clean up the exit status value.
The current situation is:
1 a FAIL, XPASS, KPASS, or UNRESOLVED result occurred
1 an unknown TCL procedure was called
1 --status option and a TCL error happened
0 all other cases
I would like to see something like:
0 all tests are okay
1 at least one test is not okay (FAIL, XPASS, KPASS, UNRESOLVED)
2 a TCL error occured
130 user hit ^C (SIGINT)
131 user hit ^\ (SIGQUIT)
The important part is that I want to detect whether dejagnu ran
to completion or whether the user interrupted it with ^C or ^\.
. When the compiler produces error messages, default_target_compile
calls "verbose -log ...". There is no need for "-log", because
runtest.exp already turned on "expect" logging with
"log_file -a $outdir/$tool.log", so there is already a copy of
the compiler output in the log file. Just "verbose ..." or
nothing at all.
. Reset $warncnt and $errcnt at the start of each script. Right now,
if an error happens in a script and then no tests are run,
$errcnt carries over to the next script and forces the first test
of the new script to be UNRESOLVED.

179
testsuite/libdejagnu/unit.cc

@ -1,4 +1,22 @@
// unit.cc -- This is a test case for the Dejagnu.h classes.
// Copyright 2001, 2002, 2003, 2004 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 2 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, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
// Please email any bugs, comments, and/or additions to this file to:
// bug-dejagnu@gnu.org
#include <sys/types.h>
#include <iostream>
@ -13,105 +31,100 @@ using namespace std;
TestState runtest;
TestState test;
class TestClass1 {
class TestClass1
{
public:
string tname;
unsigned int tnum;
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.
// We have to do 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.
const char *os1[] = {
"FAI: ",
"PAS: ",
"UNT: ",
"UNR: "
"FAI: ", "PAS: ", "UNT: ", "UNR: "
};
const char *os2[] = {
"FAILED: ",
"PASSED: ",
"UNTESTED: ",
"UNRESOLVED: "
"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.
char bbuuff[5120];
main (int argc, char *argv[])
{
regex_t regex_pat;
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.
char buf[5120];
#ifdef __STDC_HOSTED__
cout.rdbuf()->pubsetbuf(bbuuff, 5120);
cout.rdbuf ()->pubsetbuf (buf, 5120);
#else
cout.rdbuf()->setbuf(bbuuff, 5120);
cout.rdbuf ()->setbuf (buf, 5120);
#endif
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 (&regex_pat, "\r\n\t#passed.*#failed.*#untested.*#unresolved", REG_NOSUB|REG_NEWLINE);
if (regexec (&regex_pat, bbuuff, 0, (regmatch_t *)0, 0)) {
runtest.pass ("Totals message");
} else {
runtest.fail ("Totals message");
}
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 (buf, "\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 (buf, "\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 (buf, "\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 (buf, "\tUNR: bogus unresolved message", 21) == 0)
runtest.pass ("Unresolved message");
else
runtest.fail ("Unresolved message");
// Make sure we got everything in the totals.
regcomp (&regex_pat,
"\r\n\t#passed.*#failed.*#untested.*#unresolved",
REG_NOSUB | REG_NEWLINE);
if (regexec (&regex_pat, buf, 0, (regmatch_t *) 0, 0))
runtest.pass ("Totals message");
else
runtest.fail ("Totals message");
return 0;
}

Loading…
Cancel
Save