forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===- 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
 |