You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2009/04/22 20:41:01 UTC

svn commit: r767612 - in /activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity: TeamCityProgressListener.cpp TeamCityProgressListener.h

Author: tabish
Date: Wed Apr 22 18:41:01 2009
New Revision: 767612

URL: http://svn.apache.org/viewvc?rev=767612&view=rev
Log:
http://issues.apache.org/activemq/browse/AMQCPP-238

Added:
    activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity/TeamCityProgressListener.cpp   (with props)
    activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity/TeamCityProgressListener.h   (with props)

Added: activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity/TeamCityProgressListener.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity/TeamCityProgressListener.cpp?rev=767612&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity/TeamCityProgressListener.cpp (added)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity/TeamCityProgressListener.cpp Wed Apr 22 18:41:01 2009
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <iostream>
+#include <sstream>
+#include "cppunit/Test.h"
+#include "cppunit/Exception.h"
+
+#include <util/teamcity/TeamCityProgressListener.h>
+
+using namespace CPPUNIT_NS;
+using namespace std;
+using namespace test;
+using namespace test::util;
+using namespace test::util::teamcity;
+
+////////////////////////////////////////////////////////////////////////////////
+void TeamCityProgressListener::startTest( Test* test ) {
+    writeOpen( "testStarted" );
+    writeProperty( "name", test->getName() );
+    writeClose();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+static string sourceLine2string( const SourceLine& sline ) {
+
+    std::stringstream ss;
+    ss << sline.fileName() << ":" << sline.lineNumber();
+    return ss.str();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TeamCityProgressListener::addFailure( const TestFailure& failure ) {
+
+    const Exception *e = failure.thrownException();
+
+    string details = e->message().details();
+
+    if( e->sourceLine().isValid() ) {
+        details.append( " at " );
+        details.append( sourceLine2string( e->sourceLine() ) );
+        details.append( "\n" );
+    }
+
+    writeOpen( "testFailed" );
+    writeProperty( "name", failure.failedTest()->getName() );
+    writeProperty( "message", e->message().shortDescription() );
+    writeProperty( "details", details );
+    writeClose();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TeamCityProgressListener::endTest( Test* test ) {
+    writeOpen( "testFinished" );
+    writeProperty("name", test->getName() );
+    writeClose();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TeamCityProgressListener::startSuite( Test* test ) {
+    writeOpen( "testSuiteStarted" );
+    writeProperty( "name", test->getName() );
+    writeClose();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TeamCityProgressListener::endSuite( Test* test ) {
+    writeOpen( "testSuiteFinished" );
+    writeProperty( "name", test->getName() );
+    writeClose();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+std::string TeamCityProgressListener::escape( const std::string& value ) const {
+
+    std::string result;
+
+    for( std::size_t i = 0; i < value.length(); i++ ) {
+
+        char c = value[i];
+
+        switch(c) {
+            case '\n':
+                result.append( "|n" );
+                break;
+            case '\r':
+                result.append( "|r" );
+                break;
+            case '\'':
+                result.append( "|'" );
+                break;
+            case '|':
+                result.append( "||" );
+                break;
+            case ']':
+                result.append( "|]" );
+                break;
+            default:
+                result.append( &c, 1 );
+        }
+    }
+
+    return result;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TeamCityProgressListener::writeOpen( const std::string& name ) {
+    std::cout << std::endl << "##teamcity[" << name;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TeamCityProgressListener::writeClose() {
+    std::cout << "]" << std::endl;
+    std::cout.flush();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TeamCityProgressListener::writeProperty( const std::string& name,
+                                              const std::string& value ) {
+
+    std::cout << " " << name << "='" << escape( value ) << "'";
+}

Propchange: activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity/TeamCityProgressListener.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity/TeamCityProgressListener.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity/TeamCityProgressListener.h?rev=767612&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity/TeamCityProgressListener.h (added)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity/TeamCityProgressListener.h Wed Apr 22 18:41:01 2009
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _TEST_UTIL_TEAMCITY_TEAMCITYPROGRESSLISTENER_H_
+#define _TEST_UTIL_TEAMCITY_TEAMCITYPROGRESSLISTENER_H_
+
+#include <cppunit/TestFailure.h>
+#include <cppunit/TestListener.h>
+
+#include <string>
+
+namespace test {
+namespace util {
+namespace teamcity {
+
+    /**
+     * CPPUnit Derived Test Listener that can output the test life cycle messages in
+     * a manner that can be processed by the TeamCity Continuous integration tool.
+     */
+    class TeamCityProgressListener: public CPPUNIT_NS::TestListener {
+    public:
+
+        TeamCityProgressListener() {}
+        ~TeamCityProgressListener() {}
+
+        void startTest( CPPUNIT_NS::Test *test );
+        void addFailure( const CPPUNIT_NS::TestFailure &failure );
+        void endTest( CPPUNIT_NS::Test *test );
+        void startSuite( CPPUNIT_NS::Test *test );
+        void endSuite( CPPUNIT_NS::Test *test );
+
+    private:
+
+        // Prevents the use of the copy constructor.
+        TeamCityProgressListener( const TeamCityProgressListener& );
+
+        // Prevents the use of the copy operator.
+        void operator =( const TeamCityProgressListener& );
+
+    protected:
+
+        /**
+         * Escapes the control characters in a string.
+         *
+         * @param value - String to escape
+         * @return the new escaped string.
+         */
+        virtual std::string escape( const std::string& value ) const;
+
+        virtual void writeOpen( const std::string& name );
+        virtual void writeProperty( const std::string& name, const std::string& value );
+        virtual void writeClose();
+
+    };
+
+}}}
+
+#endif /* _TEST_UTIL_TEAMCITY_TEAMCITYPROGRESSLISTENER_H_ */

Propchange: activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/util/teamcity/TeamCityProgressListener.h
------------------------------------------------------------------------------
    svn:eol-style = native