Reporter.h
1/*
2 * Copyright (C) 2005-2006 by Dr. Marc Boris Duerner
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * As a special exception, you may use this file as part of a free
10 * software library without restriction. Specifically, if other files
11 * instantiate templates or use macros or inline functions from this
12 * file, or you compile this file and link it with other files to
13 * produce an executable, this file does not by itself cause the
14 * resulting executable to be covered by the GNU General Public
15 * License. This exception does not however invalidate any other
16 * reasons why the executable file might be covered by the GNU Library
17 * General Public License.
18 *
19 * This library is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 * Lesser General Public License for more details.
23 *
24 * You should have received a copy of the GNU Lesser General Public
25 * License along with this library; if not, write to the Free Software
26 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27 */
28
29#ifndef PT_UNIT_REPORTER_H
30#define PT_UNIT_REPORTER_H
31
32#include <Pt/Unit/Api.h>
33#include <Pt/Unit/Assertion.h>
34#include <Pt/Unit/TestContext.h>
35#include <Pt/NonCopyable.h>
36#include <vector>
37#include <iosfwd>
38#include <stdexcept>
39
40namespace Pt {
41
42namespace Unit {
43
44class Test;
45
55class PT_UNIT_API Reporter : protected NonCopyable
56{
57 friend class Test;
58
59 public:
62 virtual ~Reporter();
63
71 virtual void reportStart(const TestContext& test) = 0;
72
80 virtual void reportFinish(const TestContext& test) = 0;
81
89 virtual void reportMessage(const std::string& msg) = 0;
90
97 virtual void reportSuccess(const TestContext& test) = 0;
98
107 virtual void reportAssertion(const TestContext& test, const Assertion& a) = 0;
108
118 virtual void reportException(const TestContext& test, const std::exception& ex) = 0;
119
127 virtual void reportError(const TestContext& test) = 0;
128
129 protected:
133 {}
134
135 void attachTest(Test& test);
136
137 void detachTest(Test& test);
138
139 private:
140 std::vector<Test*> _attachedTests;
141};
142
143
144class PT_UNIT_API BriefReporter : public Reporter
145{
146 public:
147 explicit BriefReporter(std::ostream* out = &std::cout);
148
149 virtual ~BriefReporter();
150
151 void setOutput(std::ostream& out);
152
153 virtual void reportStart(const TestContext& test);
154
155 virtual void reportFinish(const TestContext& test);
156
157 virtual void reportMessage(const std::string& msg);
158
159 virtual void reportSuccess(const TestContext& test);
160
161 virtual void reportAssertion(const TestContext& test, const Assertion& a);
162
163 virtual void reportException(const TestContext& test, const std::exception& ex);
164
165 virtual void reportError(const TestContext& test);
166
167 private:
170 std::ostream* _out;
171};
172
173} // namespace Unit
174
175} // namespace Pt
176
177#endif
NonCopyable()
Default constructor.
Definition NonCopyable.h:63
Test Assertion exception
Definition Assertion.h:80
virtual void reportMessage(const std::string &msg)=0
Message notification.
virtual ~Reporter()
Destructor.
virtual void reportSuccess(const TestContext &test)=0
Success notification.
virtual void reportError(const TestContext &test)=0
Error notification.
virtual void reportAssertion(const TestContext &test, const Assertion &a)=0
Assertion notification.
Reporter()
Constructs a reporter.
Definition Reporter.h:132
virtual void reportStart(const TestContext &test)=0
Start notification.
virtual void reportFinish(const TestContext &test)=0
Finished notification.
virtual void reportException(const TestContext &test, const std::exception &ex)=0
Exception notification.
Context in which test are run.
Definition TestContext.h:47
Test base class
Definition Test.h:55
Protocol and data driven unit testing framework.
Core module.
Definition Allocator.h:33