diff --git a/build/vc80/turtle_test.vcproj b/build/vc80/turtle_test.vcproj index aa647a5..7d7e41c 100644 --- a/build/vc80/turtle_test.vcproj +++ b/build/vc80/turtle_test.vcproj @@ -236,6 +236,10 @@ RelativePath="..\..\src\tests\turtle_test\silent_error.hpp" > + + diff --git a/src/libraries/turtle/type_name.hpp b/src/libraries/turtle/type_name.hpp index 856afdb..10acfd3 100644 --- a/src/libraries/turtle/type_name.hpp +++ b/src/libraries/turtle/type_name.hpp @@ -43,27 +43,21 @@ namespace detail guard g( result ); if( result ) return result; - else - return name; -#else - return name; #endif - } - - template< typename T > - std::string type_full_name() - { - return type_full_name( typeid( T ) ); + return name; } template< typename T > std::string type_name() { - const std::string name = type_full_name< T >(); + const std::string name = type_full_name( typeid( T ) ); std::size_t p = name.rfind( "::" ); if( p != std::string::npos ) return name.substr( p + 2 ); - return ""; + p = name.rfind( " " ); + if( p != std::string::npos ) + return name.substr( p + 1 ); + return name; } } } diff --git a/src/tests/turtle_test/type_name_test.cpp b/src/tests/turtle_test/type_name_test.cpp new file mode 100644 index 0000000..f302313 --- /dev/null +++ b/src/tests/turtle_test/type_name_test.cpp @@ -0,0 +1,66 @@ +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// + +#include + +#include +#define BOOST_LIB_NAME boost_unit_test_framework +#include + +struct my_type_from_default_namespace {}; + +BOOST_AUTO_TEST_CASE( name_of_type_from_default_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_type_from_default_namespace", mock::detail::type_name< my_type_from_default_namespace >() ); +} + +namespace +{ + struct my_type_from_anonymous_namespace {}; +} + +BOOST_AUTO_TEST_CASE( name_of_type_from_anonymous_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_type_from_anonymous_namespace", mock::detail::type_name< my_type_from_anonymous_namespace >() ); +} + +namespace nm +{ + struct my_type_from_named_namespace {}; +} + +BOOST_AUTO_TEST_CASE( name_of_type_from_named_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_type_from_named_namespace", mock::detail::type_name< nm::my_type_from_named_namespace >() ); +} + +namespace nm +{ +namespace inner +{ + struct my_type_from_named_inner_namespace {}; +} +} + +BOOST_AUTO_TEST_CASE( name_of_type_from_named_inner_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_type_from_named_inner_namespace", mock::detail::type_name< nm::inner::my_type_from_named_inner_namespace >() ); +} + +namespace +{ +namespace inner +{ + struct my_type_from_unnamed_inner_namespace {}; +} +} + +BOOST_AUTO_TEST_CASE( name_of_type_from_unnamed_inner_namespace_is_extracted ) +{ + BOOST_CHECK_EQUAL( "my_type_from_unnamed_inner_namespace", mock::detail::type_name< inner::my_type_from_unnamed_inner_namespace >() ); +}