Author: sammccall Date: Mon Apr 29 07:36:26 2019 New Revision: 359455 URL: http://llvm.org/viewvc/llvm-project?rev=359455&view=rev Log: [clangd] Add separate unit tests for CanonicalIncludes. NFC
Added: clang-tools-extra/trunk/clangd/unittests/CanonicalIncludesTests.cpp Modified: clang-tools-extra/trunk/clangd/unittests/CMakeLists.txt clang-tools-extra/trunk/clangd/unittests/SymbolCollectorTests.cpp Modified: clang-tools-extra/trunk/clangd/unittests/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/CMakeLists.txt?rev=359455&r1=359454&r2=359455&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/unittests/CMakeLists.txt (original) +++ clang-tools-extra/trunk/clangd/unittests/CMakeLists.txt Mon Apr 29 07:36:26 2019 @@ -25,6 +25,7 @@ add_unittest(ClangdUnitTests ClangdTests Annotations.cpp BackgroundIndexTests.cpp CancellationTests.cpp + CanonicalIncludesTests.cpp ClangdTests.cpp ClangdUnitTests.cpp CodeCompleteTests.cpp Added: clang-tools-extra/trunk/clangd/unittests/CanonicalIncludesTests.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/CanonicalIncludesTests.cpp?rev=359455&view=auto ============================================================================== --- clang-tools-extra/trunk/clangd/unittests/CanonicalIncludesTests.cpp (added) +++ clang-tools-extra/trunk/clangd/unittests/CanonicalIncludesTests.cpp Mon Apr 29 07:36:26 2019 @@ -0,0 +1,62 @@ +//===-- CanonicalIncludesTests.cpp - --------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "index/CanonicalIncludes.h" +#include "gtest/gtest.h" + +namespace clang { +namespace clangd { +namespace { + +TEST(CanonicalIncludesTest, CXXStandardLibrary) { + CanonicalIncludes CI; + addSystemHeadersMapping(&CI); + + // Usual standard library symbols are mapped correctly. + EXPECT_EQ("<vector>", CI.mapHeader("path/vector.h", "std::vector")); + // std::move is ambiguous, currently mapped only based on path + EXPECT_EQ("<utility>", CI.mapHeader("libstdc++/bits/move.h", "std::move")); + EXPECT_EQ("path/utility.h", CI.mapHeader("path/utility.h", "std::move")); + // Unknown std symbols aren't mapped. + EXPECT_EQ("foo/bar.h", CI.mapHeader("foo/bar.h", "std::notathing")); + // iosfwd declares some symbols it doesn't own. + EXPECT_EQ("<ostream>", CI.mapHeader("iosfwd", "std::ostream")); + // And (for now) we assume it owns the others. + EXPECT_EQ("<iosfwd>", CI.mapHeader("iosfwd", "std::notwathing")); +} + +TEST(CanonicalIncludesTest, PathMapping) { + // As used for IWYU pragmas. + CanonicalIncludes CI; + CI.addMapping("foo/bar", "<baz>"); + + EXPECT_EQ("<baz>", CI.mapHeader("foo/bar", "some::symbol")); + EXPECT_EQ("bar/bar", CI.mapHeader("bar/bar", "some::symbol")); +} + +TEST(CanonicalIncludesTest, SymbolMapping) { + // As used for standard library. + CanonicalIncludes CI; + CI.addSymbolMapping("some::symbol", "<baz>"); + + EXPECT_EQ("<baz>", CI.mapHeader("foo/bar", "some::symbol")); + EXPECT_EQ("foo/bar", CI.mapHeader("foo/bar", "other::symbol")); +} + +TEST(CanonicalIncludesTest, Precedence) { + CanonicalIncludes CI; + CI.addMapping("some/path", "<path>"); + CI.addSymbolMapping("some::symbol", "<symbol>"); + + // Symbol mapping beats path mapping. + EXPECT_EQ("<symbol>", CI.mapHeader("some/path", "some::symbol")); +} + +} // namespace +} // namespace clangd +} // namespace clang Modified: clang-tools-extra/trunk/clangd/unittests/SymbolCollectorTests.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/SymbolCollectorTests.cpp?rev=359455&r1=359454&r2=359455&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/unittests/SymbolCollectorTests.cpp (original) +++ clang-tools-extra/trunk/clangd/unittests/SymbolCollectorTests.cpp Mon Apr 29 07:36:26 2019 @@ -931,47 +931,15 @@ TEST_F(SymbolCollectorTest, IncludeHeade UnorderedElementsAre(IncludeHeaderWithRef(TestHeaderURI, 1u))); } -#ifndef _WIN32 TEST_F(SymbolCollectorTest, CanonicalSTLHeader) { CollectorOpts.CollectIncludePath = true; CanonicalIncludes Includes; addSystemHeadersMapping(&Includes); CollectorOpts.Includes = &Includes; - // bits/basic_string.h$ should be mapped to <string> - TestHeaderName = "/nasty/bits/basic_string.h"; - TestFileName = "/nasty/bits/basic_string.cpp"; - TestHeaderURI = URI::create(TestHeaderName).toString(); - runSymbolCollector("class string {};", /*Main=*/""); - EXPECT_THAT(Symbols, UnorderedElementsAre(AllOf(QName("string"), - DeclURI(TestHeaderURI), - IncludeHeader("<string>")))); -} -#endif - -TEST_F(SymbolCollectorTest, STLiosfwd) { - CollectorOpts.CollectIncludePath = true; - CanonicalIncludes Includes; - addSystemHeadersMapping(&Includes); - CollectorOpts.Includes = &Includes; - // Symbols from <iosfwd> should be mapped individually. - TestHeaderName = testPath("iosfwd"); - TestFileName = testPath("iosfwd.cpp"); - std::string Header = R"( - namespace std { - class no_map {}; - class ios {}; - class ostream {}; - class filebuf {}; - } // namespace std - )"; - runSymbolCollector(Header, /*Main=*/""); + runSymbolCollector("namespace std { class string {}; }", /*Main=*/""); EXPECT_THAT(Symbols, - UnorderedElementsAre( - QName("std"), - AllOf(QName("std::no_map"), IncludeHeader("<iosfwd>")), - AllOf(QName("std::ios"), IncludeHeader("<ios>")), - AllOf(QName("std::ostream"), IncludeHeader("<ostream>")), - AllOf(QName("std::filebuf"), IncludeHeader("<fstream>")))); + Contains(AllOf(QName("std::string"), DeclURI(TestHeaderURI), + IncludeHeader("<string>")))); } TEST_F(SymbolCollectorTest, IWYUPragma) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits