[clang-tools-extra] a8bf389 - [clangd] Clean up some include-fixer tests. NFC
Sam McCall via cfe-commits
cfe-commits at lists.llvm.org
Fri Dec 10 16:31:27 PST 2021
Author: Sam McCall
Date: 2021-12-11T01:31:03+01:00
New Revision: a8bf389f41465415fa9088609956dfd3e153e9cf
URL: https://github.com/llvm/llvm-project/commit/a8bf389f41465415fa9088609956dfd3e153e9cf
DIFF: https://github.com/llvm/llvm-project/commit/a8bf389f41465415fa9088609956dfd3e153e9cf.diff
LOG: [clangd] Clean up some include-fixer tests. NFC
Added:
Modified:
clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp b/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
index 2c4a9aec1d3f1..c46f084c4ebc0 100644
--- a/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
+++ b/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
@@ -13,7 +13,6 @@
#include "FeatureModule.h"
#include "ParsedAST.h"
#include "Protocol.h"
-#include "SourceCode.h"
#include "TestFS.h"
#include "TestIndex.h"
#include "TestTU.h"
@@ -70,6 +69,8 @@ WithTag(::testing::Matcher<DiagnosticTag> TagMatcher) {
return Field(&Diag::Tags, Contains(TagMatcher));
}
+MATCHER_P(HasRange, Range, "") { return arg.Range == Range; }
+
MATCHER_P2(Diag, Range, Message,
"Diag at " + llvm::to_string(Range) + " = [" + Message + "]") {
return arg.Range == Range && arg.Message == Message;
@@ -831,95 +832,36 @@ buildIndexWithSymbol(llvm::ArrayRef<SymbolWithHeader> Syms) {
}
TEST(IncludeFixerTest, IncompleteType) {
- Annotations Test(R"cpp(// error-ok
-$insert[[]]namespace ns {
- class X;
- $nested[[X::]]Nested n;
-}
-class Y : $base[[public ns::X]] {};
-void test(ns::X *x, ns::X& ref_x) {
- x$access[[->]]f();
- auto& $type[[[]]a] = *x;
-
- ns::X $incomplete[[var]];
- $tag[[ref_x]]->f();
- $use[[ns::X()]];
- $sizeof[[sizeof]](ns::X);
- for (auto it : $for[[ref_x]]);
-}
-
-ns::X $return[[func]]() {}
-
-class T {
- ns::X $field[[x]];
-};
- )cpp");
- auto TU = TestTU::withCode(Test.code());
- TU.ExtraArgs.push_back("-std=c++17");
+ auto TU = TestTU::withHeaderCode("namespace ns { class X; } ns::X *x;");
+ TU.ExtraArgs.push_back("-std=c++20");
auto Index = buildIndexWithSymbol(
{SymbolWithHeader{"ns::X", "unittest:///x.h", "\"x.h\""}});
TU.ExternalIndex = Index.get();
- EXPECT_THAT(
- *TU.build().getDiagnostics(),
- UnorderedElementsAreArray(
- {AllOf(Diag(Test.range("nested"),
- "incomplete type 'ns::X' named in nested name specifier"),
- DiagName("incomplete_nested_name_spec"),
- WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
- "Include \"x.h\" for symbol ns::X"))),
- AllOf(Diag(Test.range("base"), "base class has incomplete type"),
- DiagName("incomplete_base_class"),
- WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
- "Include \"x.h\" for symbol ns::X"))),
- AllOf(Diag(Test.range("access"),
- "member access into incomplete type 'ns::X'"),
- DiagName("incomplete_member_access"),
- WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
- "Include \"x.h\" for symbol ns::X"))),
- AllOf(
- Diag(
- Test.range("type"),
- "incomplete type 'ns::X' where a complete type is required"),
- DiagName("incomplete_type"),
- WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
- "Include \"x.h\" for symbol ns::X"))),
- AllOf(Diag(Test.range("incomplete"),
- "variable has incomplete type 'ns::X'"),
- DiagName("typecheck_decl_incomplete_type"),
- WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
- "Include \"x.h\" for symbol ns::X"))),
- AllOf(
- Diag(Test.range("tag"), "incomplete definition of type 'ns::X'"),
- DiagName("typecheck_incomplete_tag"),
- WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
- "Include \"x.h\" for symbol ns::X"))),
- AllOf(Diag(Test.range("use"),
- "invalid use of incomplete type 'ns::X'"),
- DiagName("invalid_incomplete_type_use"),
- WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
- "Include \"x.h\" for symbol ns::X"))),
- AllOf(Diag(Test.range("sizeof"),
- "invalid application of 'sizeof' to "
- "an incomplete type 'ns::X'"),
- DiagName("sizeof_alignof_incomplete_or_sizeless_type"),
- WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
- "Include \"x.h\" for symbol ns::X"))),
- AllOf(Diag(Test.range("for"),
- "cannot use incomplete type 'ns::X' as a range"),
- DiagName("for_range_incomplete_type"),
- WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
- "Include \"x.h\" for symbol ns::X"))),
- AllOf(Diag(Test.range("return"),
- "incomplete result type 'ns::X' in function definition"),
- DiagName("func_def_incomplete_result"),
- WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
- "Include \"x.h\" for symbol ns::X"))),
- AllOf(Diag(Test.range("field"), "field has incomplete type 'ns::X'"),
- DiagName("field_incomplete_or_sizeless"),
- WithFix(Fix(Test.range("insert"), "#include \"x.h\"\n",
- "Include \"x.h\" for symbol ns::X")))}))
- << Test.code();
+ std::vector<std::pair<llvm::StringRef, llvm::StringRef>> Tests{
+ {"incomplete_nested_name_spec", "[[ns::X::]]Nested n;"},
+ {"incomplete_base_class", "class Y : [[ns::X]] {};"},
+ {"incomplete_member_access", "auto i = x[[->]]f();"},
+ {"incomplete_type", "auto& [[[]]m] = *x;"},
+ {"typecheck_decl_incomplete_type", "ns::X [[var]];"},
+ {"typecheck_incomplete_tag", "auto i = [[(*x)]]->f();"},
+ {"invalid_incomplete_type_use", "auto var = [[ns::X()]];"},
+ {"sizeof_alignof_incomplete_or_sizeless_type",
+ "auto s = [[sizeof]](ns::X);"},
+ {"for_range_incomplete_type", "void foo() { for (auto i : [[*]]x ) {} }"},
+ {"func_def_incomplete_result", "ns::X [[func]] () {}"},
+ {"field_incomplete_or_sizeless", "class M { ns::X [[member]]; };"},
+ };
+ for (auto Case : Tests) {
+ Annotations Main(Case.second);
+ TU.Code = Main.code().str() + "\n // error-ok";
+ EXPECT_THAT(
+ *TU.build().getDiagnostics(),
+ ElementsAre(AllOf(DiagName(Case.first), HasRange(Main.range()),
+ WithFix(Fix(Range{}, "#include \"x.h\"\n",
+ "Include \"x.h\" for symbol ns::X")))))
+ << Case.second;
+ }
}
TEST(IncludeFixerTest, NoSuggestIncludeWhenNoDefinitionInHeader) {
@@ -1097,8 +1039,6 @@ void g() { ns::$[[scope]]::X_Y(); }
)cpp");
TestTU TU;
TU.Code = std::string(Test.code());
- // FIXME: Figure out why this is needed and remove it, PR43662.
- TU.ExtraArgs.push_back("-fno-ms-compatibility");
auto Index = buildIndexWithSymbol(
SymbolWithHeader{"ns::scope::X_Y", "unittest:///x.h", "\"x.h\""});
TU.ExternalIndex = Index.get();
@@ -1124,8 +1064,6 @@ void f() {
)cpp");
TestTU TU;
TU.Code = std::string(Test.code());
- // FIXME: Figure out why this is needed and remove it, PR43662.
- TU.ExtraArgs.push_back("-fno-ms-compatibility");
auto Index = buildIndexWithSymbol(
{SymbolWithHeader{"clang::clangd::X", "unittest:///x.h", "\"x.h\""},
SymbolWithHeader{"clang::clangd::ns::Y", "unittest:///y.h", "\"y.h\""}});
More information about the cfe-commits
mailing list