| // 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/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 |