10 #include "clang/Basic/LangOptions.h"
11 #include "gtest/gtest.h"
17 TEST(CanonicalIncludesTest, CStandardLibrary) {
19 auto Language = LangOptions();
21 CI.addSystemHeadersMapping(Language);
23 EXPECT_EQ(
"<stdio.h>",
CI.mapHeader(
"path/stdio.h",
"printf"));
26 TEST(CanonicalIncludesTest, CXXStandardLibrary) {
28 auto Language = LangOptions();
29 Language.CPlusPlus =
true;
30 CI.addSystemHeadersMapping(Language);
33 EXPECT_EQ(
"<vector>",
CI.mapHeader(
"path/vector.h",
"std::vector"));
34 EXPECT_EQ(
"<cstdio>",
CI.mapHeader(
"path/stdio.h",
"std::printf"));
36 EXPECT_EQ(
"<utility>",
CI.mapHeader(
"libstdc++/bits/move.h",
"std::move"));
37 EXPECT_EQ(
"path/utility.h",
CI.mapHeader(
"path/utility.h",
"std::move"));
39 EXPECT_EQ(
"foo/bar.h",
CI.mapHeader(
"foo/bar.h",
"std::notathing"));
41 EXPECT_EQ(
"<ostream>",
CI.mapHeader(
"iosfwd",
"std::ostream"));
43 EXPECT_EQ(
"<iosfwd>",
CI.mapHeader(
"iosfwd",
"std::notwathing"));
46 TEST(CanonicalIncludesTest, PathMapping) {
49 CI.addMapping(
"foo/bar",
"<baz>");
51 EXPECT_EQ(
"<baz>",
CI.mapHeader(
"foo/bar",
"some::symbol"));
52 EXPECT_EQ(
"bar/bar",
CI.mapHeader(
"bar/bar",
"some::symbol"));
55 TEST(CanonicalIncludesTest, SymbolMapping) {
59 Language.CPlusPlus =
true;
61 CI.addSystemHeadersMapping(Language);
63 EXPECT_EQ(
"<vector>",
CI.mapHeader(
"foo/bar",
"std::vector"));
64 EXPECT_EQ(
"foo/bar",
CI.mapHeader(
"foo/bar",
"other::symbol"));
67 TEST(CanonicalIncludesTest, Precedence) {
69 CI.addMapping(
"some/path",
"<path>");
71 Language.CPlusPlus =
true;
72 CI.addSystemHeadersMapping(Language);
75 ASSERT_EQ(
"<path>",
CI.mapHeader(
"some/path",
""));
77 ASSERT_EQ(
"<vector>",
CI.mapHeader(
"bits/stl_vector.h",
""));
79 ASSERT_EQ(
"<map>",
CI.mapHeader(
"some/header.h",
"std::map"));
82 EXPECT_EQ(
"<map>",
CI.mapHeader(
"bits/stl_vector.h",
"std::map"));
83 EXPECT_EQ(
"<map>",
CI.mapHeader(
"some/path",
"std::map"));