================ @@ -610,6 +626,113 @@ TEST_F(DefinitionBlockSeparatorTest, JavaScript) { "}", Style); } + +TEST_P(LicenseTest, SeparateLicenseFromBlock) { + constexpr StringRef LicenseSingleLineCommentStyle = {"// start license\n" + "// license text\n" + "// more license text\n" + "// end license\n"}; + constexpr StringRef LicenseMultipleLineCommentStyle{"/*\n" + "start license\n" + "license text\n" + "more license text\n" + "end license */\n"}; + + const auto Block = GetParam(); + FormatStyle Style = getLLVMStyle(); + Style.SeparateDefinitionBlocks = FormatStyle::SDS_One; + Style.MaxEmptyLinesToKeep = 2; + verifyFormat(LicenseSingleLineCommentStyle.str() + "\n" + Block, Style); + verifyFormat(LicenseMultipleLineCommentStyle.str() + "\n" + Block, Style); + + Style.SeparateDefinitionBlocks = FormatStyle::SDS_Two; + verifyFormat(LicenseSingleLineCommentStyle.str() + "\n\n" + Block, Style); + verifyFormat(LicenseMultipleLineCommentStyle.str() + "\n\n" + Block, Style); +} + +INSTANTIATE_TEST_SUITE_P( + DefinitionSeparator, LicenseTest, + ::testing::Values(std::string{"class Test {};"}, + std::string{"class Test {\n" + "public:\n" + " void test() const {}\n" + "};\n"}, + std::string{"namespace tests {};"}, + std::string{"static int variable = 10;"}, + std::string{"#ifnef __TEST__\n" + "#define __TEST__\n" + "#endif"})); + +TEST_P(IncludesTest, SeparateIncludeFromBlock) { + constexpr StringRef Includes = {"#include <string>\n" + "#include <cstdio>\n"}; + + const auto Block = GetParam(); + FormatStyle Style = getLLVMStyle(); + Style.SeparateDefinitionBlocks = FormatStyle::SDS_One; + Style.MaxEmptyLinesToKeep = 2; + verifyFormat(Includes.str() + "\n" + Block, Style); + + Style.SeparateDefinitionBlocks = FormatStyle::SDS_Two; + verifyFormat(Includes.str() + "\n\n" + Block, Style); +} + +INSTANTIATE_TEST_SUITE_P( + DefinitionSeparator, IncludesTest, + ::testing::Values(std::string{"class Test {};"}, + std::string{"class Test {\n" + "public:\n" + " void test() const {}\n" + "};\n"}, + std::string{"namespace tests {};"}, + std::string{"static int variable = 10;"}, + std::string{"#ifnef __TEST__\n" + "#define __TEST__\n" + "#endif"})); + +TEST_P(NoNewLineAtEofTest, NoNewLineAfterBlock) { + FormatStyle Style = getLLVMStyle(); + Style.SeparateDefinitionBlocks = FormatStyle::SDS_One; + Style.MaxEmptyLinesToKeep = 2; + const auto Code = GetParam(); + verifyFormat(Code, Style, Code, + /* Inverse = */ false); + + Style.SeparateDefinitionBlocks = FormatStyle::SDS_Two; + verifyFormat(Code, Style, Code, + /* Inverse = */ false); +} + +INSTANTIATE_TEST_SUITE_P(DefinitionSeparator, NoNewLineAtEofTest, + ::testing::Values(std::string{"// start license\n" + "// license text\n" + "// more license text\n" + "// end license\n"}, + std::string{"// start license"}, + std::string{"#include <string>"}, + std::string{"#include <string>\n" + "#include <cstdio>"})); + +TEST_F(DefinitionBlockSeparatorTest, + NoNewLinesWhenThereIsNoCodeAfterLicenseText) { + FormatStyle Style = getLLVMStyle(); + constexpr StringRef Code = {"// start license\n" + "// license text\n" + "// end license"}; + Style.SeparateDefinitionBlocks = FormatStyle::SDS_One; + verifyFormat(Code, Style, + "// start license\n" + "// license text\n" + "// end license", + /* Inverse = */ false); + + Style.SeparateDefinitionBlocks = FormatStyle::SDS_Two; + verifyFormat(Code, Style, + "// start license\n" + "// license text\n" + "// end license", + /* Inverse = */ false); +} ---------------- mydeveloperday wrote:
These tests are overly complex for what in my view you are trying to do... sorry I think its hard to read and doesn't matrch the style of the other tests in clang-format. https://github.com/llvm/llvm-project/pull/77918 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits