vglavnyy created this revision. vglavnyy added reviewers: djasper, krasimir. Herald added a subscriber: cfe-commits.
Twice running clang-format may give unstable result for some code samples, for example: https://bugs.llvm.org/show_bug.cgi?id=23728 This commit adds stability check to clang-format unit-tests. After apply this patch 10 tests from the FormatTests will fail. > [==========] 647 tests from 19 test cases ran. (31449 ms total) > [ PASSED ] 637 tests. > [ FAILED ] 10 tests, listed below: > [ FAILED ] FormatTest.OnlyGeneratesNecessaryReplacements > [ FAILED ] FormatTest.BreaksStringLiterals > [ FAILED ] FormatTest.BreaksStringLiteralsWithTabs > [ FAILED ] FormatTest.BreaksWideAndNSStringLiterals > [ FAILED ] FormatTest.BreaksStringLiteralsWithin_TMacro > [ FAILED ] FormatTest.DoNotBreakStringLiteralsInEscapeSequence > [ FAILED ] FormatTest.OptimizeBreakPenaltyVsExcess > [ FAILED ] FormatTest.WorksFor8bitEncodings > [ FAILED ] FormatTest.SplitsUTF8Strings > [ FAILED ] FormatTest.SupportsCRLF Repository: rC Clang https://reviews.llvm.org/D53482 Files: unittests/Format/FormatTest.cpp Index: unittests/Format/FormatTest.cpp =================================================================== --- unittests/Format/FormatTest.cpp +++ unittests/Format/FormatTest.cpp @@ -38,7 +38,8 @@ std::string format(llvm::StringRef Code, const FormatStyle &Style = getLLVMStyle(), - StatusCheck CheckComplete = SC_ExpectComplete) { + StatusCheck CheckComplete = SC_ExpectComplete, + bool check = true) { LLVM_DEBUG(llvm::errs() << "---\n"); LLVM_DEBUG(llvm::errs() << Code << "\n\n"); std::vector<tooling::Range> Ranges(1, tooling::Range(0, Code.size())); @@ -54,6 +55,12 @@ auto Result = applyAllReplacements(Code, Replaces); EXPECT_TRUE(static_cast<bool>(Result)); LLVM_DEBUG(llvm::errs() << "\n" << *Result << "\n\n"); + if (check && Status.FormatComplete) { + // Do recursive call and check that format of format is valid. + LLVM_DEBUG(llvm::errs() << "\ncheck\n\n"); + auto FormatedResult = format(*Result, Style, SC_ExpectComplete, false); + EXPECT_EQ(*Result, FormatedResult); + } return *Result; }
Index: unittests/Format/FormatTest.cpp =================================================================== --- unittests/Format/FormatTest.cpp +++ unittests/Format/FormatTest.cpp @@ -38,7 +38,8 @@ std::string format(llvm::StringRef Code, const FormatStyle &Style = getLLVMStyle(), - StatusCheck CheckComplete = SC_ExpectComplete) { + StatusCheck CheckComplete = SC_ExpectComplete, + bool check = true) { LLVM_DEBUG(llvm::errs() << "---\n"); LLVM_DEBUG(llvm::errs() << Code << "\n\n"); std::vector<tooling::Range> Ranges(1, tooling::Range(0, Code.size())); @@ -54,6 +55,12 @@ auto Result = applyAllReplacements(Code, Replaces); EXPECT_TRUE(static_cast<bool>(Result)); LLVM_DEBUG(llvm::errs() << "\n" << *Result << "\n\n"); + if (check && Status.FormatComplete) { + // Do recursive call and check that format of format is valid. + LLVM_DEBUG(llvm::errs() << "\ncheck\n\n"); + auto FormatedResult = format(*Result, Style, SC_ExpectComplete, false); + EXPECT_EQ(*Result, FormatedResult); + } return *Result; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits