1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/component_export.h"
6 #include "testing/gtest/include/gtest/gtest.h"
11 using ComponentExportTest = testing::Test;
13 #define IS_TEST_COMPONENT_A_IMPL 1
14 #define IS_TEST_COMPONENT_B_IMPL
15 #define IS_TEST_COMPONENT_C_IMPL 0
16 #define IS_TEST_COMPONENT_D_IMPL 2
17 #define IS_TEST_COMPONENT_E_IMPL xyz
19 TEST(ComponentExportTest, ImportExport) {
20 // Defined as 1. Treat as export.
21 EXPECT_EQ(1, INSIDE_COMPONENT_IMPL(TEST_COMPONENT_A));
23 // Defined, but empty. Treat as import.
24 EXPECT_EQ(0, INSIDE_COMPONENT_IMPL(TEST_COMPONENT_B));
26 // Defined, but 0. Treat as import.
27 EXPECT_EQ(0, INSIDE_COMPONENT_IMPL(TEST_COMPONENT_C));
29 // Defined, but some other arbitrary thing that isn't 1. Treat as import.
30 EXPECT_EQ(0, INSIDE_COMPONENT_IMPL(TEST_COMPONENT_D));
31 EXPECT_EQ(0, INSIDE_COMPONENT_IMPL(TEST_COMPONENT_E));
33 // Undefined. Treat as import.
34 EXPECT_EQ(0, INSIDE_COMPONENT_IMPL(TEST_COMPONENT_F));
36 // And just for good measure, ensure that the macros evaluate properly in the
37 // context of preprocessor #if blocks.
38 #if INSIDE_COMPONENT_IMPL(TEST_COMPONENT_A)
44 #if !INSIDE_COMPONENT_IMPL(TEST_COMPONENT_B)
50 #if !INSIDE_COMPONENT_IMPL(TEST_COMPONENT_C)
56 #if !INSIDE_COMPONENT_IMPL(TEST_COMPONENT_D)
62 #if !INSIDE_COMPONENT_IMPL(TEST_COMPONENT_E)
68 #if !INSIDE_COMPONENT_IMPL(TEST_COMPONENT_F)
75 #undef IS_TEST_COMPONENT_A_IMPL
76 #undef IS_TEST_COMPONENT_B_IMPL
77 #undef IS_TEST_COMPONENT_C_IMPL
78 #undef IS_TEST_COMPONENT_D_IMPL
79 #undef IS_TEST_COMPONENT_E_IMPL