Daniel Jasper | d07c840 | 2013-07-29 08:19:24 +0000 | [diff] [blame] | 1 | #include "ClangTidyTest.h" |
Daniel Jasper | d07c840 | 2013-07-29 08:19:24 +0000 | [diff] [blame] | 2 | #include "google/GoogleTidyModule.h" |
Alexander Kornienko | 0988716 | 2014-02-27 14:28:02 +0000 | [diff] [blame] | 3 | #include "gtest/gtest.h" |
Daniel Jasper | d07c840 | 2013-07-29 08:19:24 +0000 | [diff] [blame] | 4 | |
| 5 | namespace clang { |
| 6 | namespace tidy { |
Alexander Kornienko | 0988716 | 2014-02-27 14:28:02 +0000 | [diff] [blame] | 7 | namespace test { |
Daniel Jasper | d07c840 | 2013-07-29 08:19:24 +0000 | [diff] [blame] | 8 | |
Alexander Kornienko | 0988716 | 2014-02-27 14:28:02 +0000 | [diff] [blame] | 9 | #define EXPECT_NO_CHANGES(Check, Code) \ |
| 10 | EXPECT_EQ(Code, runCheckOnCode<Check>(Code)) |
Daniel Jasper | d07c840 | 2013-07-29 08:19:24 +0000 | [diff] [blame] | 11 | |
Alexander Kornienko | 0988716 | 2014-02-27 14:28:02 +0000 | [diff] [blame] | 12 | TEST(ExplicitConstructorCheckTest, SingleArgumentConstructorsOnly) { |
| 13 | EXPECT_NO_CHANGES(ExplicitConstructorCheck, "class C { C(); };"); |
| 14 | EXPECT_NO_CHANGES(ExplicitConstructorCheck, "class C { C(int i, int j); };"); |
Alexander Kornienko | f65a549 | 2014-03-20 09:39:36 +0000 | [diff] [blame] | 15 | EXPECT_NO_CHANGES(ExplicitConstructorCheck, "class C { C(const C&); };"); |
| 16 | EXPECT_NO_CHANGES(ExplicitConstructorCheck, "class C { C(C&&); };"); |
Alexander Kornienko | f9a7b46 | 2014-03-19 12:48:22 +0000 | [diff] [blame] | 17 | EXPECT_NO_CHANGES(ExplicitConstructorCheck, |
| 18 | "class C { C(const C&) = delete; };"); |
Alexander Kornienko | f65a549 | 2014-03-20 09:39:36 +0000 | [diff] [blame] | 19 | EXPECT_NO_CHANGES(ExplicitConstructorCheck, |
| 20 | "class C { C(int) = delete; };"); |
Daniel Jasper | d07c840 | 2013-07-29 08:19:24 +0000 | [diff] [blame] | 21 | } |
| 22 | |
Alexander Kornienko | 0988716 | 2014-02-27 14:28:02 +0000 | [diff] [blame] | 23 | TEST(ExplicitConstructorCheckTest, Basic) { |
Daniel Jasper | d07c840 | 2013-07-29 08:19:24 +0000 | [diff] [blame] | 24 | EXPECT_EQ("class C { explicit C(int i); };", |
Alexander Kornienko | 0988716 | 2014-02-27 14:28:02 +0000 | [diff] [blame] | 25 | runCheckOnCode<ExplicitConstructorCheck>("class C { C(int i); };")); |
Daniel Jasper | d07c840 | 2013-07-29 08:19:24 +0000 | [diff] [blame] | 26 | } |
| 27 | |
Alexander Kornienko | 0988716 | 2014-02-27 14:28:02 +0000 | [diff] [blame] | 28 | TEST(ExplicitConstructorCheckTest, DefaultParameters) { |
Daniel Jasper | d07c840 | 2013-07-29 08:19:24 +0000 | [diff] [blame] | 29 | EXPECT_EQ("class C { explicit C(int i, int j = 0); };", |
Alexander Kornienko | 0988716 | 2014-02-27 14:28:02 +0000 | [diff] [blame] | 30 | runCheckOnCode<ExplicitConstructorCheck>( |
| 31 | "class C { C(int i, int j = 0); };")); |
Daniel Jasper | d07c840 | 2013-07-29 08:19:24 +0000 | [diff] [blame] | 32 | } |
| 33 | |
Alexander Kornienko | 0988716 | 2014-02-27 14:28:02 +0000 | [diff] [blame] | 34 | TEST(ExplicitConstructorCheckTest, OutOfLineDefinitions) { |
Alexander Kornienko | 32eaa37 | 2014-02-13 10:11:48 +0000 | [diff] [blame] | 35 | EXPECT_EQ("class C { explicit C(int i); }; C::C(int i) {}", |
Alexander Kornienko | 0988716 | 2014-02-27 14:28:02 +0000 | [diff] [blame] | 36 | runCheckOnCode<ExplicitConstructorCheck>( |
| 37 | "class C { C(int i); }; C::C(int i) {}")); |
Alexander Kornienko | 32eaa37 | 2014-02-13 10:11:48 +0000 | [diff] [blame] | 38 | } |
| 39 | |
Alexander Kornienko | 014225e | 2014-04-29 15:07:08 +0000 | [diff] [blame^] | 40 | TEST(ExplicitConstructorCheckTest, RemoveExplicit) { |
| 41 | EXPECT_EQ("class A { A(const A&); };\n" |
| 42 | "class B { /*asdf*/ B(const B&); };\n" |
| 43 | "class C { /*asdf*/ C(const C&); };", |
| 44 | runCheckOnCode<ExplicitConstructorCheck>( |
| 45 | "class A { explicit A(const A&); };\n" |
| 46 | "class B { explicit /*asdf*/ B(const B&); };\n" |
| 47 | "class C { explicit/*asdf*/ C(const C&); };")); |
| 48 | } |
| 49 | |
Alexander Kornienko | 0988716 | 2014-02-27 14:28:02 +0000 | [diff] [blame] | 50 | } // namespace test |
Daniel Jasper | d07c840 | 2013-07-29 08:19:24 +0000 | [diff] [blame] | 51 | } // namespace tidy |
| 52 | } // namespace clang |