134 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
|     $Id$
 | |
| 
 | |
|     $Date$
 | |
|     $Author$
 | |
| 
 | |
|     @copy © Marc Wäckerlin
 | |
|     @license LGPL, see file <a href="license.html">COPYING</a>
 | |
| 
 | |
|     $Log$
 | |
|     Revision 1.3  2005/04/07 20:55:21  marc
 | |
|     Oops, there's a make distcheck...? Now it works.
 | |
| 
 | |
|     Revision 1.2  2005/03/11 23:18:02  marc
 | |
|     bugfix: linenumbers change at checkin...
 | |
| 
 | |
|     Revision 1.1  2005/03/11 21:07:55  marc
 | |
|     initial version
 | |
| 
 | |
| 
 | |
|          1         2         3         4         5         6         7         8
 | |
|     5678901234567890123456789012345678901234567890123456789012345678901234567890
 | |
| */
 | |
| 
 | |
| #include <mrw/functiontrace.hxx>
 | |
| #include <mrw/regexp.hxx>
 | |
| #include <mrw/file.hxx>
 | |
| #include <log4cxx/propertyconfigurator.h>
 | |
| #include <log4cxx/helpers/properties.h>
 | |
| #include <cppunit/TestFixture.h>
 | |
| #include <cppunit/ui/text/TestRunner.h>
 | |
| #include <cppunit/extensions/HelperMacros.h>
 | |
| #include <cppunit/extensions/TestFactoryRegistry.h>
 | |
| 
 | |
| class A {
 | |
|   public:
 | |
|     A() {
 | |
|       MRW_METHOD("A::A()");
 | |
|     }
 | |
|     ~A() {
 | |
|       MRW_METHOD("A::~A()");
 | |
|     }
 | |
|     void fn1() {
 | |
|       MRW_METHOD("A::fn1()");
 | |
|       fn2();
 | |
|     }
 | |
|     void fn2() {
 | |
|       MRW_METHOD("A::fn2()");
 | |
|       fn3();
 | |
|       fn4();
 | |
|     }
 | |
|     void fn3() {
 | |
|       MRW_METHOD("A::fn3()");
 | |
|       fn4();
 | |
|     }
 | |
|     void fn4(bool flag=true) {
 | |
|       MRW_METHOD("A::fn4()");
 | |
|       if (flag) fn4(false);
 | |
|     }
 | |
| };
 | |
| 
 | |
| void fn(A a) {
 | |
|   MRW_FUNCTION("fn(A)");
 | |
|   a.fn1();
 | |
| }
 | |
| 
 | |
| class FunctionTraceTest: public CppUnit::TestFixture { 
 | |
|   public:
 | |
|     void Init() {
 | |
|       try {mrw::File::remove("functiontrace_test.log");} catch (...) {}
 | |
|       log4cxx::helpers::Properties properties;
 | |
|       std::string name, cont;
 | |
|       properties.setProperty((name="log4j.rootLogger",
 | |
|                               log4cxx::String(name.begin(), name.end())),
 | |
|                              (cont="DEBUG, A1",
 | |
|                               log4cxx::String(cont.begin(), cont.end())));
 | |
|       properties.setProperty((name="log4j.appender.A1",
 | |
|                               log4cxx::String(name.begin(), name.end())),
 | |
|                              (cont="org.apache.log4j.FileAppender",
 | |
|                               log4cxx::String(cont.begin(), cont.end())));
 | |
|       properties.setProperty((name="log4j.appender.A1.layout",
 | |
|                               log4cxx::String(name.begin(), name.end())),
 | |
|                              (cont="org.apache.log4j.PatternLayout",
 | |
|                               log4cxx::String(cont.begin(), cont.end())));
 | |
|       properties.setProperty((name="log4j.appender.A1.layout.ConversionPattern",
 | |
|                               log4cxx::String(name.begin(), name.end())),
 | |
|                              (cont="%F:%L - %m%n",
 | |
|                               log4cxx::String(cont.begin(), cont.end())));
 | |
|       properties.setProperty((name="log4j.appender.A1.filename",
 | |
|                               log4cxx::String(name.begin(), name.end())),
 | |
|                              (cont="functiontrace_test.log",
 | |
|                               log4cxx::String(cont.begin(), cont.end())));
 | |
|       log4cxx::PropertyConfigurator::configure(properties);
 | |
|     }
 | |
|     void Calls() {
 | |
|       fn(A());
 | |
|       mrw::RegExp match
 | |
|         (".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+: \\\\ A::A\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+: / A::A\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ -                  \\\\ fn\\(A\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:  \\\\ A::fn1\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:   \\\\ A::fn2\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:    \\\\ A::fn3\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:     \\\\ A::fn4\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:      \\\\ A::fn4\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:      / A::fn4\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:     / A::fn4\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:    / A::fn3\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:    \\\\ A::fn4\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:     \\\\ A::fn4\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:     / A::fn4\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:    / A::fn4\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:   / A::fn2\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+:  / A::fn1\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ -                  / fn\\(A\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+: \\\\ A::~A\\(\\)\n"
 | |
|          ".*functiontrace_test.cxx:[0-9]+ - *0x[0-9a-fA-F]+: / A::~A\\(\\)\n");
 | |
|       CPPUNIT_ASSERT(match(mrw::File::read("functiontrace_test.log")));
 | |
|       mrw::File::remove("functiontrace_test.log");
 | |
|     }
 | |
|     CPPUNIT_TEST_SUITE(FunctionTraceTest);
 | |
|     CPPUNIT_TEST(Init);
 | |
|     CPPUNIT_TEST(Calls);
 | |
|     CPPUNIT_TEST_SUITE_END();
 | |
| };
 | |
| CPPUNIT_TEST_SUITE_REGISTRATION(FunctionTraceTest);
 | |
| 
 | |
| int main() {
 | |
|   CppUnit::TextUi::TestRunner runner;
 | |
|   runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
 | |
|   return runner.run() ? 0 : 1;
 | |
| }
 |