115 lines · cpp
1//===-- DefineOutline.cpp ---------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "TweakTesting.h"10#include "gtest/gtest.h"11 12namespace clang::clangd {13namespace {14 15TWEAK_TEST(ScopifyEnum);16 17TEST_F(ScopifyEnumTest, TriggersOnUnscopedEnumDecl) {18 FileName = "Test.hpp";19 // Not available for scoped enum.20 EXPECT_UNAVAILABLE(R"cpp(enum class ^E { V };)cpp");21 22 // Not available for non-definition.23 EXPECT_UNAVAILABLE(R"cpp(24enum E { V };25enum ^E;26)cpp");27}28 29TEST_F(ScopifyEnumTest, ApplyTestWithPrefix) {30 std::string Original = R"cpp(31enum ^E { EV1, EV2, EV3 };32enum E;33E func(E in)34{35 E out = EV1;36 if (in == EV2)37 out = E::EV3;38 return out;39}40)cpp";41 std::string Expected = R"cpp(42enum class E { V1, V2, V3 };43enum class E;44E func(E in)45{46 E out = E::V1;47 if (in == E::V2)48 out = E::V3;49 return out;50}51)cpp";52 FileName = "Test.cpp";53 SCOPED_TRACE(Original);54 EXPECT_EQ(apply(Original), Expected);55}56 57TEST_F(ScopifyEnumTest, ApplyTestWithPrefixAndUnderscore) {58 std::string Original = R"cpp(59enum ^E { E_V1, E_V2, E_V3 };60enum E;61E func(E in)62{63 E out = E_V1;64 if (in == E_V2)65 out = E::E_V3;66 return out;67}68)cpp";69 std::string Expected = R"cpp(70enum class E { V1, V2, V3 };71enum class E;72E func(E in)73{74 E out = E::V1;75 if (in == E::V2)76 out = E::V3;77 return out;78}79)cpp";80 FileName = "Test.cpp";81 SCOPED_TRACE(Original);82 EXPECT_EQ(apply(Original), Expected);83}84 85TEST_F(ScopifyEnumTest, ApplyTestWithoutPrefix) {86 std::string Original = R"cpp(87enum ^E { V1, V2, V3 };88enum E;89E func(E in)90{91 E out = V1;92 if (in == V2)93 out = E::V3;94 return out;95}96)cpp";97 std::string Expected = R"cpp(98enum class E { V1, V2, V3 };99enum class E;100E func(E in)101{102 E out = E::V1;103 if (in == E::V2)104 out = E::V3;105 return out;106}107)cpp";108 FileName = "Test.cpp";109 SCOPED_TRACE(Original);110 EXPECT_EQ(apply(Original), Expected);111}112 113} // namespace114} // namespace clang::clangd115