Skip to content

Commit

Permalink
[clangd] Add missing tests to rename feature
Browse files Browse the repository at this point in the history
This adds a couple of missed tests from existing clang-rename ones and
introduces several new ones (e.g. static class member). This patch is required
to ensure feature parity for migration off Clang-Rename API D71880.

Reviewed By: hokein

Differential Revision: https://reviews.llvm.org/D91337
  • Loading branch information
kirillbobyrev committed Nov 13, 2020
1 parent dee452d commit a115248
Showing 1 changed file with 140 additions and 0 deletions.
140 changes: 140 additions & 0 deletions clang-tools-extra/clangd/unittests/RenameTests.cpp
Expand Up @@ -141,6 +141,12 @@ TEST(RenameTest, WithinFileRename) {
~[[F^oo]]();
void f([[F^oo]] x);
};
template<typename T>
[[F^oo]]<T>::[[Fo^o]]() {}
template<typename T>
[[F^oo]]<T>::~[[Fo^o]]() {}
)cpp",

// Template class constructor.
Expand All @@ -152,6 +158,9 @@ TEST(RenameTest, WithinFileRename) {
template<typename T>
[[F^oo]](T t);
};
template<typename T>
[[F^oo]]::[[Fo^o]]() {}
)cpp",

// Class in template argument.
Expand Down Expand Up @@ -199,6 +208,30 @@ TEST(RenameTest, WithinFileRename) {
}
)cpp",

// Templated method instantiation.
R"cpp(
template<typename T>
class Foo {
public:
static T [[f^oo]]() {}
};
void bar() {
Foo<int>::[[f^oo]]();
}
)cpp",
R"cpp(
template<typename T>
class Foo {
public:
T [[f^oo]]() {}
};
void bar() {
Foo<int>().[[f^oo]]();
}
)cpp",

// Template class (partial) specializations.
R"cpp(
template <typename T>
Expand Down Expand Up @@ -272,6 +305,80 @@ TEST(RenameTest, WithinFileRename) {
}
)cpp",

// Templated class specialization.
R"cpp(
template<typename T, typename U=bool>
class [[Foo^]];
template<typename T, typename U>
class [[Foo^]] {};
template<typename T=int, typename U>
class [[Foo^]];
)cpp",
R"cpp(
template<typename T=float, typename U=int>
class [[Foo^]];
template<typename T, typename U>
class [[Foo^]] {};
)cpp",

// Function template specialization.
R"cpp(
template<typename T=int, typename U=bool>
U [[foo^]]();
template<typename T, typename U>
U [[foo^]]() {};
)cpp",
R"cpp(
template<typename T, typename U>
U [[foo^]]() {};
template<typename T=int, typename U=bool>
U [[foo^]]();
)cpp",
R"cpp(
template<typename T=int, typename U=bool>
U [[foo^]]();
template<typename T, typename U>
U [[foo^]]();
)cpp",
R"cpp(
template <typename T>
void [[f^oo]](T t);
template <>
void [[f^oo]](int a);
void test() {
[[f^oo]]<double>(1);
}
)cpp",

// Variable template.
R"cpp(
template <typename T, int U>
bool [[F^oo]] = true;
// Explicit template specialization
template <>
bool [[F^oo]]<int, 0> = false;
// Partial template specialization
template <typename T>
bool [[F^oo]]<T, 1> = false;
void foo() {
// Ref to the explicit template specialization
[[F^oo]]<int, 0>;
// Ref to the primary template.
[[F^oo]]<double, 2>;
}
)cpp",

// Complicated class type.
R"cpp(
// Forward declaration.
Expand Down Expand Up @@ -307,6 +414,19 @@ TEST(RenameTest, WithinFileRename) {
}
)cpp",

// Static class member.
R"cpp(
struct Foo {
static Foo *[[Static^Member]];
};
Foo* Foo::[[Static^Member]] = nullptr;
void foo() {
Foo* Pointer = Foo::[[Static^Member]];
}
)cpp",

// Reference in lambda parameters.
R"cpp(
template <class T>
Expand Down Expand Up @@ -588,6 +708,26 @@ TEST(RenameTest, WithinFileRename) {
ns::[[Old^Alias]] Bar;
}
)cpp",

// User defined conversion.
R"cpp(
class [[F^oo]] {
public:
[[F^oo]]() {}
};
class Baz {
public:
operator [[F^oo]]() {
return [[F^oo]]();
}
};
int main() {
Baz boo;
[[F^oo]] foo = static_cast<[[F^oo]]>(boo);
}
)cpp",
};
llvm::StringRef NewName = "NewName";
for (llvm::StringRef T : Tests) {
Expand Down

0 comments on commit a115248

Please sign in to comment.