xref: /llvm-project/clang-tools-extra/clangd/unittests/tweaks/SpecialMembersTests.cpp (revision e26dad0a661e055076002d0de4ceb713b8ca6917)
1*68eac9a6SSam McCall //===-- SpecialMembersTests.cpp -------------------------------------------===//
2*68eac9a6SSam McCall //
3*68eac9a6SSam McCall // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*68eac9a6SSam McCall // See https://llvm.org/LICENSE.txt for license information.
5*68eac9a6SSam McCall // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*68eac9a6SSam McCall //
7*68eac9a6SSam McCall //===----------------------------------------------------------------------===//
8*68eac9a6SSam McCall 
9*68eac9a6SSam McCall #include "TweakTesting.h"
10*68eac9a6SSam McCall #include "gtest/gtest.h"
11*68eac9a6SSam McCall 
12*68eac9a6SSam McCall namespace clang {
13*68eac9a6SSam McCall namespace clangd {
14*68eac9a6SSam McCall namespace {
15*68eac9a6SSam McCall 
16*68eac9a6SSam McCall TWEAK_TEST(SpecialMembers);
17*68eac9a6SSam McCall 
TEST_F(SpecialMembersTest,Test)18*68eac9a6SSam McCall TEST_F(SpecialMembersTest, Test) {
19*68eac9a6SSam McCall   EXPECT_AVAILABLE("struct ^S {};");
20*68eac9a6SSam McCall   EXPECT_UNAVAILABLE("struct S { ^ };");
21*68eac9a6SSam McCall   EXPECT_UNAVAILABLE("union ^U {};");
22*68eac9a6SSam McCall   EXPECT_AVAILABLE("struct ^S { S(const S&); S(S&&); };");
23*68eac9a6SSam McCall   EXPECT_UNAVAILABLE("struct ^S {"
24*68eac9a6SSam McCall                      "S(const S&); S(S&&);"
25*68eac9a6SSam McCall                      "S &operator=(S&&); S &operator=(const S&);"
26*68eac9a6SSam McCall                      "};");
27*68eac9a6SSam McCall 
28*68eac9a6SSam McCall   const char *Output = R"cpp(struct S{S(const S&) = default;
29*68eac9a6SSam McCall S(S&&) = default;
30*68eac9a6SSam McCall S &operator=(const S&) = default;
31*68eac9a6SSam McCall S &operator=(S&&) = default;
32*68eac9a6SSam McCall };)cpp";
33*68eac9a6SSam McCall   EXPECT_EQ(apply("struct ^S{};"), Output);
34*68eac9a6SSam McCall 
35*68eac9a6SSam McCall   Output = R"cpp(struct S{S(const S&) = default;
36*68eac9a6SSam McCall S(S&&) = default;
37*68eac9a6SSam McCall S &operator=(const S&) = delete;
38*68eac9a6SSam McCall S &operator=(S&&) = delete;
39*68eac9a6SSam McCall int& ref;};)cpp";
40*68eac9a6SSam McCall   EXPECT_EQ(apply("struct ^S{int& ref;};"), Output);
41*68eac9a6SSam McCall }
42*68eac9a6SSam McCall 
43*68eac9a6SSam McCall } // namespace
44*68eac9a6SSam McCall } // namespace clangd
45*68eac9a6SSam McCall } // namespace clang
46