Move the C++ Listener from a patch against cppunit to a usable external module for cppunit.
This commit is contained in:
@@ -21,10 +21,12 @@ py-compile
|
||||
.libs
|
||||
*.lo
|
||||
libsubunit.la
|
||||
libcppunit_subunit.la
|
||||
subunit-0.0.1.tar.gz
|
||||
libtool
|
||||
stamp-h1
|
||||
libsubunit.pc
|
||||
libcppunit_subunit.pc
|
||||
config.log
|
||||
config.status
|
||||
Makefile
|
||||
|
||||
11
Makefile.am
11
Makefile.am
@@ -39,6 +39,9 @@ ACLOCAL_AMFLAGS = -I m4
|
||||
SUBUNIT_CFLAGS = -Wall -Werror -Wextra -Wstrict-prototypes -Wmissing-prototypes \
|
||||
-Wwrite-strings -Wno-variadic-macros -I$(top_srcdir)/c/include
|
||||
AM_CFLAGS = $(SUBUNIT_CFLAGS)
|
||||
SUBUNIT_CXXFLAGS = -Wall -Werror -Wextra -Wwrite-strings -Wno-variadic-macros \
|
||||
-I$(top_srcdir)/c/include
|
||||
AM_CXXFLAGS = $(SUBUNIT_CXXFLAGS)
|
||||
|
||||
include_subunitdir = $(includedir)/subunit
|
||||
|
||||
@@ -67,9 +70,11 @@ pkgpython_PYTHON = \
|
||||
python/subunit/test_results.py
|
||||
|
||||
lib_LTLIBRARIES = libsubunit.la
|
||||
lib_LTLIBRARIES += libcppunit_subunit.la
|
||||
|
||||
include_subunit_HEADERS = \
|
||||
c/include/subunit/child.h
|
||||
c/include/subunit/child.h \
|
||||
c++/SubunitTestProgressListener.h
|
||||
|
||||
check_PROGRAMS = \
|
||||
c/tests/test_child
|
||||
@@ -81,6 +86,10 @@ libsubunit_la_SOURCES = \
|
||||
c/lib/child.c \
|
||||
c/include/subunit/child.h
|
||||
|
||||
libcppunit_subunit_la_SOURCES = \
|
||||
c++/SubunitTestProgressListener.cpp \
|
||||
c++/SubunitTestProgressListener.h
|
||||
|
||||
tests_LDADD = @CHECK_LIBS@ $(top_builddir)/libsubunit.la
|
||||
c_tests_test_child_CFLAGS = $(SUBUNIT_CFLAGS) @CHECK_CFLAGS@
|
||||
c_tests_test_child_LDADD = $(tests_LDADD)
|
||||
|
||||
3
NEWS
3
NEWS
@@ -13,6 +13,9 @@ subunit release notes
|
||||
|
||||
IMPROVEMENTS:
|
||||
|
||||
* CPPUnit is now directly supported: subunit builds a cppunit listener
|
||||
``libcppunit-subunit``.
|
||||
|
||||
* INSTALLDIRS can be set to control the perl MakeMaker 'INSTALLDIRS'
|
||||
viarable when installing.
|
||||
|
||||
|
||||
5
README
5
README
@@ -18,7 +18,6 @@
|
||||
subunit reuses iso8601 by Michael Twomey, distributed under an MIT style
|
||||
licence - see python/iso8601/LICENSE for details.
|
||||
|
||||
|
||||
Subunit
|
||||
-------
|
||||
|
||||
@@ -86,8 +85,8 @@ more details.
|
||||
C++
|
||||
===
|
||||
|
||||
C++ uses the C bindings and includes a patch for cppunit. See 'c++/README' for
|
||||
details.
|
||||
The C library is includable and usable directly from C++. A TestListener for
|
||||
CPPUnit is included in the Subunit distribution. See 'c++/README' for details.
|
||||
|
||||
shell
|
||||
=====
|
||||
|
||||
53
c++/README
53
c++/README
@@ -18,32 +18,33 @@
|
||||
#
|
||||
|
||||
Currently there are no native C++ bindings for subunit. However the C library
|
||||
can be used from C++ safely. There is also a patch for cppunit
|
||||
(http://cppunit.sourceforge.net/) to enable reporting via subunit
|
||||
(cppunit-subunit-1.10.2.patch).
|
||||
can be used from C++ safely. A CPPUnit listener is built as part of Subunit to
|
||||
allow CPPUnit users to simply get Subunit output.
|
||||
|
||||
To use the patch, apply it and rebuild your cppunit. Then in your main do
|
||||
{
|
||||
// Create the event manager and test controller
|
||||
CPPUNIT_NS::TestResult controller;
|
||||
To use the listener, use pkg-config (or your preferred replacement) to get the
|
||||
cflags and link settings from libcppunit_subunit.pc.
|
||||
|
||||
// Add a listener that collects test result
|
||||
// so we can get the overall status.
|
||||
// note this isn't needed for subunit...
|
||||
CPPUNIT_NS::TestResultCollector result;
|
||||
controller.addListener( &result );
|
||||
In your test driver main, use SubunitTestProgressListener, as shown in this
|
||||
example main::
|
||||
|
||||
// Add a listener that print test activity in subunit format.
|
||||
CPPUNIT_NS::SubunitTestProgressListener progress;
|
||||
controller.addListener( &progress );
|
||||
|
||||
// Add the top suite to the test runner
|
||||
CPPUNIT_NS::TestRunner runner;
|
||||
runner.addTest( CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest() );
|
||||
runner.run( controller );
|
||||
|
||||
return result.wasSuccessful() ? 0 : 1;
|
||||
}
|
||||
|
||||
|
||||
See the c/README for documentation on the C bindings for subunit.
|
||||
{
|
||||
// Create the event manager and test controller
|
||||
CPPUNIT_NS::TestResult controller;
|
||||
|
||||
// Add a listener that collects test result
|
||||
// so we can get the overall status.
|
||||
// note this isn't needed for subunit...
|
||||
CPPUNIT_NS::TestResultCollector result;
|
||||
controller.addListener( &result );
|
||||
|
||||
// Add a listener that print test activity in subunit format.
|
||||
CPPUNIT_NS::SubunitTestProgressListener progress;
|
||||
controller.addListener( &progress );
|
||||
|
||||
// Add the top suite to the test runner
|
||||
CPPUNIT_NS::TestRunner runner;
|
||||
runner.addTest( CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest() );
|
||||
runner.run( controller );
|
||||
|
||||
return result.wasSuccessful() ? 0 : 1;
|
||||
}
|
||||
|
||||
63
c++/SubunitTestProgressListener.cpp
Normal file
63
c++/SubunitTestProgressListener.cpp
Normal file
@@ -0,0 +1,63 @@
|
||||
/* Subunit test listener for cppunit (http://cppunit.sourceforge.net).
|
||||
* Copyright (C) 2006 Robert Collins <robertc@robertcollins.net>
|
||||
*
|
||||
* Licensed under either the Apache License, Version 2.0 or the BSD 3-clause
|
||||
* license at the users choice. A copy of both licenses are available in the
|
||||
* project source as Apache-2.0 and BSD. You may not use this file except in
|
||||
* compliance with one of these two licences.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under these licenses is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the license you chose for the specific language governing permissions
|
||||
* and limitations under that license.
|
||||
*/
|
||||
|
||||
#include <cppunit/Exception.h>
|
||||
#include <cppunit/Test.h>
|
||||
#include <cppunit/TestFailure.h>
|
||||
#include <cppunit/TextOutputter.h>
|
||||
#include <iostream>
|
||||
|
||||
// Have to be able to import the public interface without config.h.
|
||||
#include "SubunitTestProgressListener.h"
|
||||
#include "config.h"
|
||||
#include "subunit/child.h"
|
||||
|
||||
|
||||
CPPUNIT_NS_BEGIN
|
||||
|
||||
|
||||
void
|
||||
SubunitTestProgressListener::startTest( Test *test )
|
||||
{
|
||||
subunit_test_start(test->getName().c_str());
|
||||
last_test_failed = false;
|
||||
}
|
||||
|
||||
void
|
||||
SubunitTestProgressListener::addFailure( const TestFailure &failure )
|
||||
{
|
||||
std::ostringstream capture_stream;
|
||||
TextOutputter outputter(NULL, capture_stream);
|
||||
outputter.printFailureLocation(failure.sourceLine());
|
||||
outputter.printFailureDetail(failure.thrownException());
|
||||
|
||||
if (failure.isError())
|
||||
subunit_test_error(failure.failedTestName().c_str(),
|
||||
capture_stream.str().c_str());
|
||||
else
|
||||
subunit_test_fail(failure.failedTestName().c_str(),
|
||||
capture_stream.str().c_str());
|
||||
last_test_failed = true;
|
||||
}
|
||||
|
||||
void
|
||||
SubunitTestProgressListener::endTest( Test *test)
|
||||
{
|
||||
if (!last_test_failed)
|
||||
subunit_test_pass(test->getName().c_str());
|
||||
}
|
||||
|
||||
|
||||
CPPUNIT_NS_END
|
||||
56
c++/SubunitTestProgressListener.h
Normal file
56
c++/SubunitTestProgressListener.h
Normal file
@@ -0,0 +1,56 @@
|
||||
/* Subunit test listener for cppunit (http://cppunit.sourceforge.net).
|
||||
* Copyright (C) 2006 Robert Collins <robertc@robertcollins.net>
|
||||
*
|
||||
* Licensed under either the Apache License, Version 2.0 or the BSD 3-clause
|
||||
* license at the users choice. A copy of both licenses are available in the
|
||||
* project source as Apache-2.0 and BSD. You may not use this file except in
|
||||
* compliance with one of these two licences.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under these licenses is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the license you chose for the specific language governing permissions
|
||||
* and limitations under that license.
|
||||
*/
|
||||
#ifndef CPPUNIT_SUBUNITTESTPROGRESSLISTENER_H
|
||||
#define CPPUNIT_SUBUNITTESTPROGRESSLISTENER_H
|
||||
|
||||
#include <cppunit/TestListener.h>
|
||||
|
||||
|
||||
CPPUNIT_NS_BEGIN
|
||||
|
||||
|
||||
/*!
|
||||
* \brief TestListener that outputs subunit
|
||||
* (http://www.robertcollins.net/unittest/subunit) compatible output.
|
||||
* \ingroup TrackingTestExecution
|
||||
*/
|
||||
class CPPUNIT_API SubunitTestProgressListener : public TestListener
|
||||
{
|
||||
public:
|
||||
|
||||
SubunitTestProgressListener() {}
|
||||
|
||||
void startTest( Test *test );
|
||||
|
||||
void addFailure( const TestFailure &failure );
|
||||
|
||||
void endTest( Test *test );
|
||||
|
||||
private:
|
||||
/// Prevents the use of the copy constructor.
|
||||
SubunitTestProgressListener( const SubunitTestProgressListener © );
|
||||
|
||||
/// Prevents the use of the copy operator.
|
||||
void operator =( const SubunitTestProgressListener © );
|
||||
|
||||
private:
|
||||
int last_test_failed;
|
||||
};
|
||||
|
||||
|
||||
CPPUNIT_NS_END
|
||||
|
||||
#endif // CPPUNIT_SUBUNITTESTPROGRESSLISTENER_H
|
||||
|
||||
@@ -1,134 +0,0 @@
|
||||
diff -u cppunit-1.10.2/src/cppunit/Makefile.am cppunit-1.10.2/src/cppunit/Makefile.am
|
||||
--- cppunit-1.10.2/src/cppunit/Makefile.am
|
||||
+++ cppunit-1.10.2/src/cppunit/Makefile.am
|
||||
@@ -28,6 +28,7 @@
|
||||
ProtectorChain.cpp \
|
||||
SourceLine.cpp \
|
||||
StringTools.cpp \
|
||||
+ SubunitTestProgressListener.cpp \
|
||||
SynchronizedObject.cpp \
|
||||
Test.cpp \
|
||||
TestAssert.cpp \
|
||||
@@ -74,0 +76,2 @@
|
||||
+
|
||||
+LIBRARY_LIBADD = $(LIBS)
|
||||
--- cppunit-1.10.2.orig/src/cppunit/SubunitTestProgressListener.cpp
|
||||
+++ cppunit-1.10.2/src/cppunit/SubunitTestProgressListener.cpp
|
||||
@@ -0,0 +1,50 @@
|
||||
+#include <cppunit/Exception.h>
|
||||
+#include <cppunit/Test.h>
|
||||
+#include <cppunit/TestFailure.h>
|
||||
+#include <cppunit/SubunitTestProgressListener.h>
|
||||
+#include <cppunit/TextOutputter.h>
|
||||
+#include <iostream>
|
||||
+
|
||||
+#include "config.h"
|
||||
+#ifdef HAVE_LIBSUBUNIT
|
||||
+#include <subunit/child.h>
|
||||
+
|
||||
+
|
||||
+CPPUNIT_NS_BEGIN
|
||||
+
|
||||
+
|
||||
+void
|
||||
+SubunitTestProgressListener::startTest( Test *test )
|
||||
+{
|
||||
+ subunit_test_start(test->getName().c_str());
|
||||
+ last_test_failed = false;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+SubunitTestProgressListener::addFailure( const TestFailure &failure )
|
||||
+{
|
||||
+ std::ostringstream capture_stream;
|
||||
+ TextOutputter outputter(NULL, capture_stream);
|
||||
+ outputter.printFailureLocation(failure.sourceLine());
|
||||
+ outputter.printFailureDetail(failure.thrownException());
|
||||
+
|
||||
+ if (failure.isError())
|
||||
+ subunit_test_error(failure.failedTestName().c_str(),
|
||||
+ capture_stream.str().c_str());
|
||||
+ else
|
||||
+ subunit_test_fail(failure.failedTestName().c_str(),
|
||||
+ capture_stream.str().c_str());
|
||||
+ last_test_failed = true;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+SubunitTestProgressListener::endTest( Test *test)
|
||||
+{
|
||||
+ if (!last_test_failed)
|
||||
+ subunit_test_pass(test->getName().c_str());
|
||||
+}
|
||||
+
|
||||
+
|
||||
+CPPUNIT_NS_END
|
||||
+
|
||||
+#endif
|
||||
--- cppunit-1.10.2.orig/configure.in
|
||||
+++ cppunit-1.10.2/configure.in
|
||||
@@ -65,6 +65,8 @@
|
||||
# check for doxygen
|
||||
BB_ENABLE_DOXYGEN
|
||||
|
||||
+# check for subunit
|
||||
+AC_CHECK_LIB(subunit, subunit_test_start)
|
||||
|
||||
# Check for headers
|
||||
# Note that the fourth argument to AC_CHECK_HEADERS is non-empty to force
|
||||
--- cppunit-1.10.2.orig/include/cppunit/Makefile.am
|
||||
+++ cppunit-1.10.2/include/cppunit/Makefile.am
|
||||
@@ -15,6 +15,7 @@
|
||||
Portability.h \
|
||||
Protector.h \
|
||||
SourceLine.h \
|
||||
+ SubunitTestProgressListener.h \
|
||||
SynchronizedObject.h \
|
||||
Test.h \
|
||||
TestAssert.h \
|
||||
only in patch2:
|
||||
unchanged:
|
||||
--- cppunit-1.10.2.orig/include/cppunit/SubunitTestProgressListener.h
|
||||
+++ cppunit-1.10.2/include/cppunit/SubunitTestProgressListener.h
|
||||
@@ -0,0 +1,41 @@
|
||||
+#ifndef CPPUNIT_SUBUNITTESTPROGRESSLISTENER_H
|
||||
+#define CPPUNIT_SUBUNITTESTPROGRESSLISTENER_H
|
||||
+
|
||||
+#include <cppunit/TestListener.h>
|
||||
+
|
||||
+
|
||||
+CPPUNIT_NS_BEGIN
|
||||
+
|
||||
+
|
||||
+/*!
|
||||
+ * \brief TestListener that outputs subunit
|
||||
+ * (http://www.robertcollins.net/unittest/subunit) compatible output.
|
||||
+ * \ingroup TrackingTestExecution
|
||||
+ */
|
||||
+class CPPUNIT_API SubunitTestProgressListener : public TestListener
|
||||
+{
|
||||
+public:
|
||||
+
|
||||
+ SubunitTestProgressListener() {}
|
||||
+
|
||||
+ void startTest( Test *test );
|
||||
+
|
||||
+ void addFailure( const TestFailure &failure );
|
||||
+
|
||||
+ void endTest( Test *test );
|
||||
+
|
||||
+private:
|
||||
+ /// Prevents the use of the copy constructor.
|
||||
+ SubunitTestProgressListener( const SubunitTestProgressListener © );
|
||||
+
|
||||
+ /// Prevents the use of the copy operator.
|
||||
+ void operator =( const SubunitTestProgressListener © );
|
||||
+
|
||||
+private:
|
||||
+ int last_test_failed;
|
||||
+};
|
||||
+
|
||||
+
|
||||
+CPPUNIT_NS_END
|
||||
+
|
||||
+#endif // CPPUNIT_SUBUNITTESTPROGRESSLISTENER_H
|
||||
@@ -18,6 +18,7 @@ AC_SUBST([SUBUNIT_MICRO_VERSION])
|
||||
AC_SUBST([SUBUNIT_VERSION])
|
||||
AC_USE_SYSTEM_EXTENSIONS
|
||||
AC_PROG_CC
|
||||
AC_PROG_CXX
|
||||
AM_PROG_CC_C_O
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_LN_S
|
||||
@@ -46,11 +47,14 @@ AC_FUNC_REALLOC
|
||||
# Easier memory management.
|
||||
# C unit testing.
|
||||
PKG_CHECK_MODULES([CHECK], [check >= 0.9.4])
|
||||
# C++ unit testing.
|
||||
PKG_CHECK_MODULES([CPPUNIT], [cppunit])
|
||||
|
||||
# Output files
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
AC_CONFIG_FILES([libsubunit.pc
|
||||
libcppunit_subunit.pc
|
||||
Makefile
|
||||
perl/Makefile.PL
|
||||
])
|
||||
|
||||
11
libcppunit_subunit.pc.in
Normal file
11
libcppunit_subunit.pc.in
Normal file
@@ -0,0 +1,11 @@
|
||||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
|
||||
Name: cppunit subunit listener
|
||||
Description: Subunit output listener for the CPPUnit test library.
|
||||
URL: http://launchpad.net/subunit
|
||||
Version: @VERSION@
|
||||
Libs: -L${libdir} -lsubunit
|
||||
Cflags: -I${includedir}
|
||||
Reference in New Issue
Block a user