Update copyright to LGPL on all files
[dyninst.git] / testsuite / src / TestOutputDriver.h
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31 // TestOutputDriver.h
32 // This file defines an object that produces output for the test driver.
33
34 #ifndef TEST_OUTPUT_DRIVER_H
35 #define TEST_OUTPUT_DRIVER_H
36
37 #include <map>
38 #include <string>
39 #include <vector>
40
41 #include <stdarg.h>
42
43 #include "test_info_new.h"
44 #include "test_results.h"
45
46 typedef enum {
47   STDOUT,
48   STDERR,
49   LOGINFO,
50   LOGERR,
51   HUMAN
52 } TestOutputStream;
53
54 class TestOutputDriver {
55 public:
56    TESTLIB_DLL_EXPORT static bool getAttributesMap(TestInfo *test, 
57                         RunGroup *group, std::map<std::string, std::string> &attrs);
58
59   // Informs the output driver that any log messages or results should be
60   // associated with the test passed in through the attributes parameter
61   virtual void startNewTest(std::map<std::string, std::string> &attributes, TestInfo *test, RunGroup *group) = 0;
62
63   // Specifies a file to redirect one of the output streams to.  The default
64   // file can be specified with a filename of "-".  Defaults are as follows:
65   // STDOUT, LOGINFO, HUMAN -> stdout
66   // STDERR, LOGERR -> stderr
67   virtual void redirectStream(TestOutputStream stream, const char * filename) = 0;
68
69   // Before calling any of the log* methods or finalizeOutput(), the user
70   // must have initialized the test output driver with a call to startNewTest()
71
72   virtual void logResult(test_results_t result, int stage=-1) = 0;
73   // Log that the last test run by a test driver with pid crashedPID crashed
74   virtual void logCrash(std::string testname) = 0;
75   virtual void log(TestOutputStream stream, const char *fmt, ...) = 0;
76   // Like the vprintf() family, vlog() does not call the va_end() macro, so
77   // its caller should do so after the call to vlog().
78   virtual void vlog(TestOutputStream stream, const char *fmt, va_list args) = 0;
79   virtual void finalizeOutput() = 0;
80
81   // Returns arguments to pass to the mutatee driver that cause it to invoke
82   // its support for this output driver
83   TESTLIB_DLL_EXPORT virtual void getMutateeArgs(std::vector<std::string> &args);
84 };
85
86 #endif // TEST_OUTPUT_DRIVER_H