| // Copyright 2018 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/component_export.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace base { |
| namespace { |
| |
| using ComponentExportTest = testing::Test; |
| |
| #define IS_TEST_COMPONENT_A_IMPL 1 |
| #define IS_TEST_COMPONENT_B_IMPL |
| #define IS_TEST_COMPONENT_C_IMPL 0 |
| #define IS_TEST_COMPONENT_D_IMPL 2 |
| #define IS_TEST_COMPONENT_E_IMPL xyz |
| |
| TEST(ComponentExportTest, ImportExport) { |
| // Defined as 1. Treat as export. |
| EXPECT_EQ(1, INSIDE_COMPONENT_IMPL(TEST_COMPONENT_A)); |
| |
| // Defined, but empty. Treat as import. |
| EXPECT_EQ(0, INSIDE_COMPONENT_IMPL(TEST_COMPONENT_B)); |
| |
| // Defined, but 0. Treat as import. |
| EXPECT_EQ(0, INSIDE_COMPONENT_IMPL(TEST_COMPONENT_C)); |
| |
| // Defined, but some other arbitrary thing that isn't 1. Treat as import. |
| EXPECT_EQ(0, INSIDE_COMPONENT_IMPL(TEST_COMPONENT_D)); |
| EXPECT_EQ(0, INSIDE_COMPONENT_IMPL(TEST_COMPONENT_E)); |
| |
| // Undefined. Treat as import. |
| EXPECT_EQ(0, INSIDE_COMPONENT_IMPL(TEST_COMPONENT_F)); |
| |
| // And just for good measure, ensure that the macros evaluate properly in the |
| // context of preprocessor #if blocks. |
| #if INSIDE_COMPONENT_IMPL(TEST_COMPONENT_A) |
| EXPECT_TRUE(true); |
| #else |
| EXPECT_TRUE(false); |
| #endif |
| |
| #if !INSIDE_COMPONENT_IMPL(TEST_COMPONENT_B) |
| EXPECT_TRUE(true); |
| #else |
| EXPECT_TRUE(false); |
| #endif |
| |
| #if !INSIDE_COMPONENT_IMPL(TEST_COMPONENT_C) |
| EXPECT_TRUE(true); |
| #else |
| EXPECT_TRUE(false); |
| #endif |
| |
| #if !INSIDE_COMPONENT_IMPL(TEST_COMPONENT_D) |
| EXPECT_TRUE(true); |
| #else |
| EXPECT_TRUE(false); |
| #endif |
| |
| #if !INSIDE_COMPONENT_IMPL(TEST_COMPONENT_E) |
| EXPECT_TRUE(true); |
| #else |
| EXPECT_TRUE(false); |
| #endif |
| |
| #if !INSIDE_COMPONENT_IMPL(TEST_COMPONENT_F) |
| EXPECT_TRUE(true); |
| #else |
| EXPECT_TRUE(false); |
| #endif |
| } |
| |
| #undef IS_TEST_COMPONENT_A_IMPL |
| #undef IS_TEST_COMPONENT_B_IMPL |
| #undef IS_TEST_COMPONENT_C_IMPL |
| #undef IS_TEST_COMPONENT_D_IMPL |
| #undef IS_TEST_COMPONENT_E_IMPL |
| |
| } // namespace |
| } // namespace base |