xref: /llvm-project/clang-tools-extra/clangd/unittests/tweaks/ScopifyEnumTests.cpp (revision f2daa32fcaa061daa04546c343198d876e635def)
10255b217Sckandeler //===-- DefineOutline.cpp ---------------------------------------*- C++ -*-===//
20255b217Sckandeler //
30255b217Sckandeler // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40255b217Sckandeler // See https://llvm.org/LICENSE.txt for license information.
50255b217Sckandeler // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60255b217Sckandeler //
70255b217Sckandeler //===----------------------------------------------------------------------===//
80255b217Sckandeler 
90255b217Sckandeler #include "TweakTesting.h"
100255b217Sckandeler #include "gtest/gtest.h"
110255b217Sckandeler 
120255b217Sckandeler namespace clang::clangd {
130255b217Sckandeler namespace {
140255b217Sckandeler 
150255b217Sckandeler TWEAK_TEST(ScopifyEnum);
160255b217Sckandeler 
TEST_F(ScopifyEnumTest,TriggersOnUnscopedEnumDecl)170255b217Sckandeler TEST_F(ScopifyEnumTest, TriggersOnUnscopedEnumDecl) {
180255b217Sckandeler   FileName = "Test.hpp";
190255b217Sckandeler   // Not available for scoped enum.
200255b217Sckandeler   EXPECT_UNAVAILABLE(R"cpp(enum class ^E { V };)cpp");
210255b217Sckandeler 
220255b217Sckandeler   // Not available for non-definition.
230255b217Sckandeler   EXPECT_UNAVAILABLE(R"cpp(
240255b217Sckandeler enum E { V };
250255b217Sckandeler enum ^E;
260255b217Sckandeler )cpp");
270255b217Sckandeler }
280255b217Sckandeler 
TEST_F(ScopifyEnumTest,ApplyTestWithPrefix)29*f2daa32fSChristian Kandeler TEST_F(ScopifyEnumTest, ApplyTestWithPrefix) {
300255b217Sckandeler   std::string Original = R"cpp(
310255b217Sckandeler enum ^E { EV1, EV2, EV3 };
320255b217Sckandeler enum E;
330255b217Sckandeler E func(E in)
340255b217Sckandeler {
350255b217Sckandeler   E out = EV1;
360255b217Sckandeler   if (in == EV2)
370255b217Sckandeler     out = E::EV3;
380255b217Sckandeler   return out;
390255b217Sckandeler }
400255b217Sckandeler )cpp";
410255b217Sckandeler   std::string Expected = R"cpp(
42*f2daa32fSChristian Kandeler enum class E { V1, V2, V3 };
430255b217Sckandeler enum class E;
440255b217Sckandeler E func(E in)
450255b217Sckandeler {
46*f2daa32fSChristian Kandeler   E out = E::V1;
47*f2daa32fSChristian Kandeler   if (in == E::V2)
48*f2daa32fSChristian Kandeler     out = E::V3;
49*f2daa32fSChristian Kandeler   return out;
50*f2daa32fSChristian Kandeler }
51*f2daa32fSChristian Kandeler )cpp";
52*f2daa32fSChristian Kandeler   FileName = "Test.cpp";
53*f2daa32fSChristian Kandeler   SCOPED_TRACE(Original);
54*f2daa32fSChristian Kandeler   EXPECT_EQ(apply(Original), Expected);
55*f2daa32fSChristian Kandeler }
56*f2daa32fSChristian Kandeler 
TEST_F(ScopifyEnumTest,ApplyTestWithPrefixAndUnderscore)57*f2daa32fSChristian Kandeler TEST_F(ScopifyEnumTest, ApplyTestWithPrefixAndUnderscore) {
58*f2daa32fSChristian Kandeler   std::string Original = R"cpp(
59*f2daa32fSChristian Kandeler enum ^E { E_V1, E_V2, E_V3 };
60*f2daa32fSChristian Kandeler enum E;
61*f2daa32fSChristian Kandeler E func(E in)
62*f2daa32fSChristian Kandeler {
63*f2daa32fSChristian Kandeler   E out = E_V1;
64*f2daa32fSChristian Kandeler   if (in == E_V2)
65*f2daa32fSChristian Kandeler     out = E::E_V3;
66*f2daa32fSChristian Kandeler   return out;
67*f2daa32fSChristian Kandeler }
68*f2daa32fSChristian Kandeler )cpp";
69*f2daa32fSChristian Kandeler   std::string Expected = R"cpp(
70*f2daa32fSChristian Kandeler enum class E { V1, V2, V3 };
71*f2daa32fSChristian Kandeler enum class E;
72*f2daa32fSChristian Kandeler E func(E in)
73*f2daa32fSChristian Kandeler {
74*f2daa32fSChristian Kandeler   E out = E::V1;
75*f2daa32fSChristian Kandeler   if (in == E::V2)
76*f2daa32fSChristian Kandeler     out = E::V3;
77*f2daa32fSChristian Kandeler   return out;
78*f2daa32fSChristian Kandeler }
79*f2daa32fSChristian Kandeler )cpp";
80*f2daa32fSChristian Kandeler   FileName = "Test.cpp";
81*f2daa32fSChristian Kandeler   SCOPED_TRACE(Original);
82*f2daa32fSChristian Kandeler   EXPECT_EQ(apply(Original), Expected);
83*f2daa32fSChristian Kandeler }
84*f2daa32fSChristian Kandeler 
TEST_F(ScopifyEnumTest,ApplyTestWithoutPrefix)85*f2daa32fSChristian Kandeler TEST_F(ScopifyEnumTest, ApplyTestWithoutPrefix) {
86*f2daa32fSChristian Kandeler   std::string Original = R"cpp(
87*f2daa32fSChristian Kandeler enum ^E { V1, V2, V3 };
88*f2daa32fSChristian Kandeler enum E;
89*f2daa32fSChristian Kandeler E func(E in)
90*f2daa32fSChristian Kandeler {
91*f2daa32fSChristian Kandeler   E out = V1;
92*f2daa32fSChristian Kandeler   if (in == V2)
93*f2daa32fSChristian Kandeler     out = E::V3;
94*f2daa32fSChristian Kandeler   return out;
95*f2daa32fSChristian Kandeler }
96*f2daa32fSChristian Kandeler )cpp";
97*f2daa32fSChristian Kandeler   std::string Expected = R"cpp(
98*f2daa32fSChristian Kandeler enum class E { V1, V2, V3 };
99*f2daa32fSChristian Kandeler enum class E;
100*f2daa32fSChristian Kandeler E func(E in)
101*f2daa32fSChristian Kandeler {
102*f2daa32fSChristian Kandeler   E out = E::V1;
103*f2daa32fSChristian Kandeler   if (in == E::V2)
104*f2daa32fSChristian Kandeler     out = E::V3;
1050255b217Sckandeler   return out;
1060255b217Sckandeler }
1070255b217Sckandeler )cpp";
1080255b217Sckandeler   FileName = "Test.cpp";
1090255b217Sckandeler   SCOPED_TRACE(Original);
1100255b217Sckandeler   EXPECT_EQ(apply(Original), Expected);
1110255b217Sckandeler }
1120255b217Sckandeler 
1130255b217Sckandeler } // namespace
1140255b217Sckandeler } // namespace clang::clangd
115