| // Copyright 2014 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <brillo/type_name_undecorate.h> |
| |
| #include <map> |
| |
| #include <brillo/variant_dictionary.h> |
| #include <gtest/gtest.h> |
| |
| namespace brillo { |
| |
| // Tests using tags from the __PRETTY_FUNCTION__ don't work when using RTTI |
| // to get the type name. |
| #ifndef USE_RTTI_FOR_TYPE_TAGS |
| TEST(TypeTags, GetTypeTag) { |
| EXPECT_STREQ("const char *brillo::GetTypeTag() [T = int]", GetTypeTag<int>()); |
| EXPECT_STREQ( |
| "const char *brillo::GetTypeTag() [T = std::__1::map<std::__1::" |
| "basic_string<char, std::__1::char_traits<char>, " |
| "std::__1::allocator<char> >, brillo::Any, std::__1::less<" |
| "std::__1::basic_string<char, std::__1::char_traits<char>, " |
| "std::__1::allocator<char> > >, std::__1::allocator<std::__1::" |
| "pair<const std::__1::basic_string<char, std::__1::char_traits" |
| "<char>, std::__1::allocator<char> >, brillo::Any> > >]", |
| GetTypeTag<VariantDictionary>()); |
| EXPECT_STREQ("const char *brillo::GetTypeTag() [T = int []]", |
| GetTypeTag<int[]>()); |
| } |
| #endif // USE_RTTI_FOR_TYPE_TAGS |
| |
| TEST(TypeDecoration, UndecorateTypeName) { |
| EXPECT_EQ("int", UndecorateTypeName("i")); |
| EXPECT_EQ("char const* brillo::GetTypeTag<unsigned long long>()", |
| UndecorateTypeName("_ZN6brillo10GetTypeTagIyEEPKcv")); |
| EXPECT_EQ("std::__1::to_string(int)", |
| UndecorateTypeName("_ZNSt3__19to_stringEi")); |
| } |
| |
| #ifndef USE_RTTI_FOR_TYPE_TAGS |
| TEST(TypeDecoration, GetUndecoratedTypeNameForTag) { |
| EXPECT_EQ("int", GetUndecoratedTypeNameForTag( |
| "const char *brillo::GetTypeTag() [T = int]")); |
| EXPECT_EQ("int []", GetUndecoratedTypeNameForTag( |
| "const char *brillo::GetTypeTag() [T = int []]")); |
| EXPECT_EQ("foo::bar<int []>()", |
| GetUndecoratedTypeNameForTag( |
| "const char *brillo::GetTypeTag() [T = foo::bar<int []>()]")); |
| } |
| |
| TEST(TypeDecoration, GetUndecoratedTypeName) { |
| EXPECT_EQ("int", GetUndecoratedTypeName<int>()); |
| EXPECT_EQ("int *", GetUndecoratedTypeName<int*>()); |
| EXPECT_EQ("const int *", GetUndecoratedTypeName<const int*>()); |
| EXPECT_EQ("int []", GetUndecoratedTypeName<int[]>()); |
| EXPECT_EQ("bool", GetUndecoratedTypeName<bool>()); |
| EXPECT_EQ("char", GetUndecoratedTypeName<char>()); |
| EXPECT_EQ("float", GetUndecoratedTypeName<float>()); |
| EXPECT_EQ("double", GetUndecoratedTypeName<double>()); |
| EXPECT_EQ("long", GetUndecoratedTypeName<long>()); // NOLINT(runtime/int) |
| EXPECT_EQ( |
| "std::__1::map<int, double, std::__1::less<int>, " |
| "std::__1::allocator<std::__1::pair<const int, double> > >", |
| (GetUndecoratedTypeName<std::map<int, double>>())); |
| } |
| #endif // USE_RTTI_FOR_TYPE_TAGS |
| |
| } // namespace brillo |