//===- unittest/Format/FormatTestUtils.h - Formatting unit tests ----------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
//  This file defines utility functions for Clang-Format related tests.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_UNITTESTS_FORMAT_FORMATTESTUTILS_H
#define LLVM_CLANG_UNITTESTS_FORMAT_FORMATTESTUTILS_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 || MessedUp[i - 1] == '\n')) {
      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
