.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
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
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
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)
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.
subunit reuses iso8601 by Michael Twomey, distributed under an MIT style
licence - see python/iso8601/LICENSE for details.
-
Subunit
-------
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
=====
#
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).
-
-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;
-
- // 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;
-}
-
-
-See the c/README for documentation on the C bindings for subunit.
+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 listener, use pkg-config (or your preferred replacement) to get the
+cflags and link settings from libcppunit_subunit.pc.
+
+In your test driver main, use SubunitTestProgressListener, as shown in this
+example main::
+
+ {
+ // 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;
+ }
--- /dev/null
+/* 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
--- /dev/null
+/* 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
+
+++ /dev/null
-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
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
# 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
])
--- /dev/null
+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}