| // Copyright 2018 The Chromium 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 "base/type_id.h" |
| |
| #include <memory> |
| |
| #include "base/test/type_id_test_support_a.h" |
| #include "base/test/type_id_test_support_b.h" |
| #include "build/build_config.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace base { |
| namespace { |
| |
| struct T {}; |
| |
| struct U {}; |
| |
| } // namespace |
| |
| TEST(TypeId, Basic) { |
| EXPECT_EQ(TypeId::From<int>(), TypeId::From<int>()); |
| EXPECT_NE(TypeId::From<int>(), TypeId::From<void>()); |
| EXPECT_NE(TypeId::From<int>(), TypeId::From<float>()); |
| EXPECT_NE(TypeId::From<int>(), TypeId::From<std::unique_ptr<T>>()); |
| EXPECT_NE(TypeId::From<int>(), TypeId::From<std::unique_ptr<U>>()); |
| |
| EXPECT_NE(TypeId::From<void>(), TypeId::From<int>()); |
| EXPECT_EQ(TypeId::From<void>(), TypeId::From<void>()); |
| EXPECT_NE(TypeId::From<void>(), TypeId::From<float>()); |
| EXPECT_NE(TypeId::From<void>(), TypeId::From<std::unique_ptr<T>>()); |
| EXPECT_NE(TypeId::From<void>(), TypeId::From<std::unique_ptr<U>>()); |
| |
| EXPECT_NE(TypeId::From<float>(), TypeId::From<int>()); |
| EXPECT_NE(TypeId::From<float>(), TypeId::From<void>()); |
| EXPECT_EQ(TypeId::From<float>(), TypeId::From<float>()); |
| EXPECT_NE(TypeId::From<float>(), TypeId::From<std::unique_ptr<T>>()); |
| EXPECT_NE(TypeId::From<float>(), TypeId::From<std::unique_ptr<U>>()); |
| |
| EXPECT_NE(TypeId::From<std::unique_ptr<T>>(), TypeId::From<int>()); |
| EXPECT_NE(TypeId::From<std::unique_ptr<T>>(), TypeId::From<void>()); |
| EXPECT_NE(TypeId::From<std::unique_ptr<T>>(), TypeId::From<float>()); |
| EXPECT_EQ(TypeId::From<std::unique_ptr<T>>(), |
| TypeId::From<std::unique_ptr<T>>()); |
| EXPECT_NE(TypeId::From<std::unique_ptr<T>>(), |
| TypeId::From<std::unique_ptr<U>>()); |
| |
| EXPECT_NE(TypeId::From<std::unique_ptr<U>>(), TypeId::From<int>()); |
| EXPECT_NE(TypeId::From<std::unique_ptr<U>>(), TypeId::From<void>()); |
| EXPECT_NE(TypeId::From<std::unique_ptr<U>>(), TypeId::From<float>()); |
| EXPECT_NE(TypeId::From<std::unique_ptr<U>>(), |
| TypeId::From<std::unique_ptr<T>>()); |
| EXPECT_EQ(TypeId::From<std::unique_ptr<U>>(), |
| TypeId::From<std::unique_ptr<U>>()); |
| } |
| |
| TEST(TypeId, TypesInAnonymousNameSpacesDontCollide) { |
| EXPECT_NE(TypeIdTestSupportA::GetTypeIdForTypeInAnonymousNameSpace(), |
| TypeIdTestSupportB::GetTypeIdForTypeInAnonymousNameSpace()); |
| } |
| |
| // See http://crbug.com/914734 |
| #if defined(ADDRESS_SANITIZER) |
| TEST(TypeId, DISABLED_IdenticalTypesFromDifferentCompilationUnitsMatch) { |
| #else |
| TEST(TypeId, IdenticalTypesFromDifferentCompilationUnitsMatch) { |
| #endif |
| EXPECT_EQ(TypeIdTestSupportA::GetTypeIdForUniquePtrInt(), |
| TypeIdTestSupportB::GetTypeIdForUniquePtrInt()); |
| } |
| |
| // TODO(crbug.com/928806): Failing consistently on Android. |
| #if defined(OS_ANDROID) |
| TEST(TypeId, DISABLED_IdenticalTypesFromComponentAndStaticLibrary) { |
| #else |
| TEST(TypeId, IdenticalTypesFromComponentAndStaticLibrary) { |
| #endif |
| // Code generated for the test itself is statically linked. Make sure it works |
| // with components |
| TypeId static_linked_type = TypeId::From<std::unique_ptr<int>>(); |
| EXPECT_EQ(static_linked_type, TypeIdTestSupportA::GetTypeIdForUniquePtrInt()); |
| } |
| |
| } // namespace base |