|
|
|
@ -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 (®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"); |
|
|
|
} |
|
|
|
|
|
|
|
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 (®ex_pat, |
|
|
|
"\r\n\t#passed.*#failed.*#untested.*#unresolved", |
|
|
|
REG_NOSUB | REG_NEWLINE); |
|
|
|
|
|
|
|
if (regexec (®ex_pat, buf, 0, (regmatch_t *) 0, 0)) |
|
|
|
runtest.pass ("Totals message"); |
|
|
|
else |
|
|
|
runtest.fail ("Totals message"); |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|