xref: /llvm-project/clang/unittests/InstallAPI/HeaderFileTest.cpp (revision 4c6043de0b837d23699424d875057d00956d80ac)
1 //===- unittests/InstallAPI/HeaderFile.cpp - HeaderFile Test --------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "clang/InstallAPI/HeaderFile.h"
10 #include "gtest/gtest.h"
11 
12 using namespace llvm;
13 using namespace clang::installapi;
14 
15 namespace HeaderFileTests {
16 
TEST(HeaderFile,FrameworkIncludes)17 TEST(HeaderFile, FrameworkIncludes) {
18   const char *Path = "/System/Library/Frameworks/Foo.framework/Headers/Foo.h";
19   std::optional<std::string> IncludeName = createIncludeHeaderName(Path);
20   EXPECT_TRUE(IncludeName.has_value());
21   EXPECT_STREQ(IncludeName.value().c_str(), "Foo/Foo.h");
22 
23   Path = "/System/Library/Frameworks/Foo.framework/Frameworks/Bar.framework/"
24          "Headers/SimpleBar.h";
25   IncludeName = createIncludeHeaderName(Path);
26   EXPECT_TRUE(IncludeName.has_value());
27   EXPECT_STREQ(IncludeName.value().c_str(), "Bar/SimpleBar.h");
28 
29   Path = "/tmp/Foo.framework/Versions/A/Headers/SimpleFoo.h";
30   IncludeName = createIncludeHeaderName(Path);
31   EXPECT_TRUE(IncludeName.has_value());
32   EXPECT_STREQ(IncludeName.value().c_str(), "Foo/SimpleFoo.h");
33 
34   Path = "/System/Library/PrivateFrameworks/Foo.framework/Headers/Foo.h";
35   IncludeName = createIncludeHeaderName(Path);
36   EXPECT_TRUE(IncludeName.has_value());
37   EXPECT_STREQ(IncludeName.value().c_str(), "Foo/Foo.h");
38 
39   Path = "/AppleInternal/Developer/Library/Frameworks/"
40          "HelloFramework.framework/Headers/HelloFramework.h";
41   IncludeName = createIncludeHeaderName(Path);
42   EXPECT_TRUE(IncludeName.has_value());
43   EXPECT_STREQ(IncludeName.value().c_str(), "HelloFramework/HelloFramework.h");
44 
45   Path = "/tmp/BuildProducts/Foo.framework/Versions/A/"
46          "PrivateHeaders/Foo+Private.h";
47   IncludeName = createIncludeHeaderName(Path);
48   EXPECT_TRUE(IncludeName.has_value());
49   EXPECT_STREQ(IncludeName.value().c_str(), "Foo/Foo+Private.h");
50 
51   Path = "/Applications/Xcode.app/Contents/Developer/SDKS/MacOS.sdk/System/"
52          "Library/Frameworks/Foo.framework/PrivateHeaders/Foo_Private.h";
53   IncludeName = createIncludeHeaderName(Path);
54   EXPECT_TRUE(IncludeName.has_value());
55   EXPECT_STREQ(IncludeName.value().c_str(), "Foo/Foo_Private.h");
56 
57   Path =
58       "/System/Library/PrivateFrameworks/Foo.framework/PrivateHeaders/Foo.hpp";
59   IncludeName = createIncludeHeaderName(Path);
60   EXPECT_TRUE(IncludeName.has_value());
61   EXPECT_STREQ(IncludeName.value().c_str(), "Foo/Foo.hpp");
62 
63   Path = "/Applications/Xcode.app/Contents/Developer/SDKS/MacOS.sdk/System/"
64          "Library/Frameworks/Foo.framework/Headers/BarDir/Bar.h";
65   IncludeName = createIncludeHeaderName(Path);
66   EXPECT_TRUE(IncludeName.has_value());
67   EXPECT_STREQ(IncludeName.value().c_str(), "Foo/BarDir/Bar.h");
68 }
69 
TEST(HeaderFile,DylibIncludes)70 TEST(HeaderFile, DylibIncludes) {
71   const char *Path = "/usr/include/foo.h";
72   std::optional<std::string> IncludeName = createIncludeHeaderName(Path);
73   EXPECT_TRUE(IncludeName.has_value());
74   EXPECT_STREQ(IncludeName.value().c_str(), "foo.h");
75 
76   Path = "/tmp/BuildProducts/usr/include/a/A.h";
77   IncludeName = createIncludeHeaderName(Path);
78   EXPECT_TRUE(IncludeName.has_value());
79   EXPECT_STREQ(IncludeName.value().c_str(), "a/A.h");
80 
81   Path = "/Applications/Xcode.app/Contents/Developer/SDKS/MacOS.sdk/"
82          "usr/include/simd/types.h";
83   IncludeName = createIncludeHeaderName(Path);
84   EXPECT_TRUE(IncludeName.has_value());
85   EXPECT_STREQ(IncludeName.value().c_str(), "simd/types.h");
86 
87   Path = "/usr/local/include/hidden/A.h";
88   IncludeName = createIncludeHeaderName(Path);
89   EXPECT_TRUE(IncludeName.has_value());
90   EXPECT_STREQ(IncludeName.value().c_str(), "hidden/A.h");
91 }
92 } // namespace HeaderFileTests
93