diff options
Diffstat (limited to 'unittests/Format/FormatTestUtils.h')
-rw-r--r-- | unittests/Format/FormatTestUtils.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/unittests/Format/FormatTestUtils.h b/unittests/Format/FormatTestUtils.h new file mode 100644 index 000000000000..649f5b3822c5 --- /dev/null +++ b/unittests/Format/FormatTestUtils.h @@ -0,0 +1,67 @@ +//===- unittest/Format/FormatTestUtils.h - Formatting unit tests ----------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines utility functions for Clang-Format related tests. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_FORMAT_TEST_UTILS_H +#define LLVM_CLANG_FORMAT_TEST_UTILS_H + +#include "llvm/ADT/StringRef.h" + +namespace clang { +namespace format { +namespace test { + +inline std::string messUp(llvm::StringRef Code) { + std::string MessedUp(Code.str()); + bool InComment = false; + bool InPreprocessorDirective = false; + bool JustReplacedNewline = false; + for (unsigned i = 0, e = MessedUp.size() - 1; i != e; ++i) { + if (MessedUp[i] == '/' && MessedUp[i + 1] == '/') { + if (JustReplacedNewline) + MessedUp[i - 1] = '\n'; + InComment = true; + } else if (MessedUp[i] == '#' && (JustReplacedNewline || i == 0)) { + if (i != 0) + MessedUp[i - 1] = '\n'; + InPreprocessorDirective = true; + } else if (MessedUp[i] == '\\' && MessedUp[i + 1] == '\n') { + MessedUp[i] = ' '; + MessedUp[i + 1] = ' '; + } else if (MessedUp[i] == '\n') { + if (InComment) { + InComment = false; + } else if (InPreprocessorDirective) { + InPreprocessorDirective = false; + } else { + JustReplacedNewline = true; + MessedUp[i] = ' '; + } + } else if (MessedUp[i] != ' ') { + JustReplacedNewline = false; + } + } + std::string WithoutWhitespace; + if (MessedUp[0] != ' ') + WithoutWhitespace.push_back(MessedUp[0]); + for (unsigned i = 1, e = MessedUp.size(); i != e; ++i) { + if (MessedUp[i] != ' ' || MessedUp[i - 1] != ' ') + WithoutWhitespace.push_back(MessedUp[i]); + } + return WithoutWhitespace; +} + +} // end namespace test +} // end namespace format +} // end namespace clang + +#endif // LLVM_CLANG_FORMAT_TEST_UTILS_H |