diff options
Diffstat (limited to 'clang-tools-extra/test')
11 files changed, 230 insertions, 25 deletions
diff --git a/clang-tools-extra/test/clang-rename/ClassAsTemplateArgumentFindByClass.cpp b/clang-tools-extra/test/clang-rename/ClassAsTemplateArgumentFindByClass.cpp new file mode 100644 index 00000000000..19015a28013 --- /dev/null +++ b/clang-tools-extra/test/clang-rename/ClassAsTemplateArgumentFindByClass.cpp @@ -0,0 +1,20 @@ +// RUN: cat %s > %t.cpp +// RUN: clang-rename -offset=136 -new-name=Bar %t.cpp -i -- +// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s + +class Foo {}; // CHECK: class Bar {}; + +template <typename T> +void func() {} + +template <typename T> +class Baz {}; + +int main() { + func<Foo>(); // CHECK: func<Bar>(); + Baz<Foo> obj; // CHECK: Baz<Bar> obj; + return 0; +} + +// Use grep -FUbo 'Foo' <file> to get the correct offset of Foo when changing +// this file. diff --git a/clang-tools-extra/test/clang-rename/ClassAsTemplateArgumentFindByTemplateArgument.cpp b/clang-tools-extra/test/clang-rename/ClassAsTemplateArgumentFindByTemplateArgument.cpp new file mode 100644 index 00000000000..7fdf911fa41 --- /dev/null +++ b/clang-tools-extra/test/clang-rename/ClassAsTemplateArgumentFindByTemplateArgument.cpp @@ -0,0 +1,20 @@ +// RUN: cat %s > %t.cpp +// RUN: clang-rename -offset=304 -new-name=Bar %t.cpp -i -- +// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s + +class Foo {}; // CHECK: class Bar {}; + +template <typename T> +void func() {} + +template <typename T> +class Baz {}; + +int main() { + func<Foo>(); // CHECK: func<Bar>(); + Baz<Foo> obj; // CHECK: Baz<Bar> obj; + return 0; +} + +// Use grep -FUbo 'Foo' <file> to get the correct offset of Cla when changing +// this file. diff --git a/clang-tools-extra/test/clang-rename/ClassNameInFunctionDefenition.cpp b/clang-tools-extra/test/clang-rename/ClassNameInFunctionDefenition.cpp index c0e5f073170..1b2d59e1862 100644 --- a/clang-tools-extra/test/clang-rename/ClassNameInFunctionDefenition.cpp +++ b/clang-tools-extra/test/clang-rename/ClassNameInFunctionDefenition.cpp @@ -1,17 +1,10 @@ -// Currently unsupported test. // RUN: cat %s > %t.cpp -// FIXME: clang-rename doesn't recognize symbol in class function definition. +// RUN: clang-rename -offset=136 -new-name=Bar %t.cpp -i -- +// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s -class Foo { +class Foo { // CHECK: class Bar { public: void foo(int x); }; -void Foo::foo(int x) {} -// ^ this one - -int main() { - Foo obj; - obj.foo(0); - return 0; -} +void Foo::foo(int x) {} // CHECK: void Bar::foo(int x) {} diff --git a/clang-tools-extra/test/clang-rename/ComplicatedClassType.cpp b/clang-tools-extra/test/clang-rename/ComplicatedClassType.cpp index 80daeabff69..6e888bdb059 100644 --- a/clang-tools-extra/test/clang-rename/ComplicatedClassType.cpp +++ b/clang-tools-extra/test/clang-rename/ComplicatedClassType.cpp @@ -1,30 +1,31 @@ -// Unsupported test. // RUN: cat %s > %t.cpp -// FIXME: This test contains very simple constructions likely to be seen in any -// project and therefore passing this test is a slight sign of success. -// Currently, the test fails badly. +// RUN: clang-rename -offset=220 -new-name=Bar %t.cpp -i -- +// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s + +// Forward declaration. +class Foo; // CHECK: class Bar; class Foo { // CHECK: class Bar { - public: - Foo(int value = 0) : x(value) {} // Bar(int value=0) : x(value) {} +public: + Foo(int value = 0) : x(value) {} // CHECK: Bar(int value = 0) : x(value) {} - Foo& operator++(int) { // Bar& operator++(int) { + Foo &operator++(int) { // CHECK: Bar &operator++(int) { x++; return *this; } - bool operator<(Foo const& rhs) { // bool operator<(Bar const &rhs) { + bool operator<(Foo const &rhs) { // CHECK: bool operator<(Bar const &rhs) { return this->x < rhs.x; } - private: +private: int x; }; int main() { - Foo* Pointer = 0; // CHECK: Bar *Pointer = 0; + Foo *Pointer = 0; // CHECK: Bar *Pointer = 0; Foo Variable = Foo(10); // CHECK: Bar Variable = Bar(10); - for (Foo it; it < Variable; it++) { // for (Bar it; it < Variable; it++) {} + for (Foo it; it < Variable; it++) { // CHECK: for (Bar it; it < Variable; it++) { } return 0; } diff --git a/clang-tools-extra/test/clang-rename/TemplateClassInstantiationFindByDeclaration.cpp b/clang-tools-extra/test/clang-rename/TemplateClassInstantiationFindByDeclaration.cpp new file mode 100644 index 00000000000..0775e03fa48 --- /dev/null +++ b/clang-tools-extra/test/clang-rename/TemplateClassInstantiationFindByDeclaration.cpp @@ -0,0 +1,44 @@ +// RUN: cat %s > %t.cpp +// RUN: clang-rename -offset=287 -new-name=Bar %t.cpp -i -- +// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s + +// Currently unsupported test. +// FIXME: clang-rename should be able to rename classes with templates +// correctly. +// XFAIL: * + +template <typename T> +class Foo { // CHECK: class Bar; +public: + T foo(T arg, T& ref, T* ptr) { + T value; + int number = 42; + value = (T)number; + value = static_cast<T>(number); + return value; + } + static void foo(T value) {} + T member; +}; + +template <typename T> +void func() { + Foo<T> obj; // CHECK: Bar<T> obj; + obj.member = T(); + Foo<T>::foo(); // CHECK: Bar<T>::foo(); +} + +int main() { + Foo<int> i; // CHECK: Bar<int> i; + i.member = 0; + Foo<int>::foo(0); // CHECK: Bar<int>::foo(0); + + Foo<bool> b; // CHECK: Bar<bool> b; + b.member = false; + Foo<bool>::foo(false); // CHECK: Bar<bool>::foo(false); + + return 0; +} + +// Use grep -FUbo 'C' <file> to get the correct offset of foo when changing +// this file. diff --git a/clang-tools-extra/test/clang-rename/TemplateClassInstantiationFindByTypeUse.cpp b/clang-tools-extra/test/clang-rename/TemplateClassInstantiationFindByTypeUse.cpp new file mode 100644 index 00000000000..08f738af750 --- /dev/null +++ b/clang-tools-extra/test/clang-rename/TemplateClassInstantiationFindByTypeUse.cpp @@ -0,0 +1,44 @@ +// RUN: cat %s > %t.cpp +// RUN: clang-rename -offset=703 -new-name=Bar %t.cpp -i -- +// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s + +// Currently unsupported test. +// FIXME: clang-rename should be able to rename classes with templates +// correctly. +// XFAIL: * + +template <typename T> +class Foo { // CHECK: class Bar; +public: + T foo(T arg, T& ref, T* ptr) { + T value; + int number = 42; + value = (T)number; + value = static_cast<T>(number); + return value; + } + static void foo(T value) {} + T member; +}; + +template <typename T> +void func() { + Foo<T> obj; // CHECK: Bar<T> obj; + obj.member = T(); + Foo<T>::foo(); // CHECK: Bar<T>::foo(); +} + +int main() { + Foo<int> i; // CHECK: Bar<int> i; + i.member = 0; + Foo<int>::foo(0); // CHECK: Bar<int>::foo(0); + + Foo<bool> b; // CHECK: Bar<bool> b; + b.member = false; + Foo<bool>::foo(false); // CHECK: Bar<bool>::foo(false); + + return 0; +} + +// Use grep -FUbo 'Foo' <file> to get the correct offset of foo when changing +// this file. diff --git a/clang-tools-extra/test/clang-rename/TemplateFunctionFindByDeclaration.cpp b/clang-tools-extra/test/clang-rename/TemplateFunctionFindByDeclaration.cpp new file mode 100644 index 00000000000..b79dba4cffc --- /dev/null +++ b/clang-tools-extra/test/clang-rename/TemplateFunctionFindByDeclaration.cpp @@ -0,0 +1,20 @@ +// RUN: cat %s > %t.cpp +// RUN: clang-rename -offset=241 -new-name=bar %t.cpp -i -- +// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s + +// FIXME: clang-rename should be able to rename functions with templates. +// XFAIL: * + +template <typename T> +T foo(T value) { // CHECK: T boo(T value) { + return value; +} + +int main() { + foo<bool>(false); // CHECK: bar<bool>(false); + foo<int>(0); // CHECK: bar<int>(0); + return 0; +} + +// Use grep -FUbo 'foo' <file> to get the correct offset of foo when changing +// this file. diff --git a/clang-tools-extra/test/clang-rename/TemplateFunctionFindByUse.cpp b/clang-tools-extra/test/clang-rename/TemplateFunctionFindByUse.cpp new file mode 100644 index 00000000000..b307732f3f7 --- /dev/null +++ b/clang-tools-extra/test/clang-rename/TemplateFunctionFindByUse.cpp @@ -0,0 +1,17 @@ +// RUN: cat %s > %t.cpp +// RUN: clang-rename -offset=290 -new-name=Bar %t.cpp -i -- +// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s + +// FIXME: clang-rename should be able to rename functions with templates. +// XFAIL: * + +template <typename T> +T foo(T value) { + return value; +} + +int main() { + foo<bool>(false); + foo<int>(0); + return 0; +} diff --git a/clang-tools-extra/test/clang-rename/TemplateTypenameFindByTemplateParam.cpp b/clang-tools-extra/test/clang-rename/TemplateTypenameFindByTemplateParam.cpp new file mode 100644 index 00000000000..77b6b3e9f0f --- /dev/null +++ b/clang-tools-extra/test/clang-rename/TemplateTypenameFindByTemplateParam.cpp @@ -0,0 +1,22 @@ +// RUN: cat %s > %t.cpp +// RUN: clang-rename -offset=270 -new-name=U %t.cpp -i -- +// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s + +// Currently unsupported test. +// FIXME: clang-rename should be able to rename template parameters correctly. +// XFAIL: * + +template <typename T> // CHECK: template <typename U> +class Foo { +T foo(T arg, T& ref, T* ptr) { // CHECK: U foo(U arg, U& ref, U* ptr) { + T value; // CHECK: U value; + int number = 42; + value = (T)number; // CHECK: value = (U)number; + value = static_cast<T>(number); // CHECK: value = static_cast<U>(number); + return value; +} + +static void foo(T value) {} // CHECK: static void foo(U value) {} + +T member; // CHECK: U member; +}; diff --git a/clang-tools-extra/test/clang-rename/TemplateTypenameFindByTypeInside.cpp b/clang-tools-extra/test/clang-rename/TemplateTypenameFindByTypeInside.cpp new file mode 100644 index 00000000000..a7d822b99a5 --- /dev/null +++ b/clang-tools-extra/test/clang-rename/TemplateTypenameFindByTypeInside.cpp @@ -0,0 +1,22 @@ +// RUN: cat %s > %t.cpp +// RUN: clang-rename -offset=350 -new-name=U %t.cpp -i -- +// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s + +// Currently unsupported test. +// FIXME: clang-rename should be able to rename template parameters correctly. +// XFAIL: * + +template <typename T> // CHECK: template <typename U> +class Foo { +T foo(T arg, T& ref, T* ptr) { // CHECK: U foo(U arg, U& ref, U* ptr) { + T value; // CHECK: U value; + int number = 42; + value = (T)number; // CHECK: value = (U)number; + value = static_cast<T>(number); // CHECK: value = static_cast<U>(number); + return value; +} + +static void foo(T value) {} // CHECK: static void foo(U value) {} + +T member; // CHECK: U member; +}; diff --git a/clang-tools-extra/test/clang-rename/UserDefinedConversionFindByTypeDeclaration.cpp b/clang-tools-extra/test/clang-rename/UserDefinedConversionFindByTypeDeclaration.cpp index af85a2ca585..271a5663ae9 100644 --- a/clang-tools-extra/test/clang-rename/UserDefinedConversionFindByTypeDeclaration.cpp +++ b/clang-tools-extra/test/clang-rename/UserDefinedConversionFindByTypeDeclaration.cpp @@ -1,7 +1,6 @@ -// Currently unsupported test. // RUN: cat %s > %t.cpp -// FIXME: while renaming class/struct clang-rename should be able to change -// this type name corresponding user-defined conversions, too. +// RUN: clang-rename -offset=136 -new-name=Bar %t.cpp -i -- +// RUN: sed 's,//.*,,' %t.cpp | FileCheck %s class Foo { // CHECK: class Bar { // ^ offset must be here @@ -22,3 +21,6 @@ int main() { Foo foo = static_cast<Foo>(boo); // CHECK: Bar foo = static_cast<Bar>(boo); return 0; } + +// Use grep -FUbo 'Foo' <file> to get the correct offset of Cla when changing +// this file. |