//===- unittests/Tooling/ReplacementsYamlTest.cpp - Serialization tests ---===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// Tests for serialization of Replacements.
//
//===----------------------------------------------------------------------===//

#include "clang/Tooling/ReplacementsYaml.h"
#include "gtest/gtest.h"

using namespace llvm;
using namespace clang::tooling;

TEST(ReplacementsYamlTest, serializesReplacements) {

  TranslationUnitReplacements Doc;

  Doc.MainSourceFile = "/path/to/source.cpp";
  Doc.Replacements.emplace_back("/path/to/file1.h", 232, 56, "replacement #1");
  Doc.Replacements.emplace_back("/path/to/file2.h", 301, 2, "replacement #2");

  std::string YamlContent;
  llvm::raw_string_ostream YamlContentStream(YamlContent);

  yaml::Output YAML(YamlContentStream);
  YAML << Doc;

  // NOTE: If this test starts to fail for no obvious reason, check whitespace.
  ASSERT_STREQ("---\n"
               "MainSourceFile:  /path/to/source.cpp\n"
               "Replacements:    \n" // Extra whitespace here!
               "  - FilePath:        /path/to/file1.h\n"
               "    Offset:          232\n"
               "    Length:          56\n"
               "    ReplacementText: 'replacement #1'\n"
               "  - FilePath:        /path/to/file2.h\n"
               "    Offset:          301\n"
               "    Length:          2\n"
               "    ReplacementText: 'replacement #2'\n"
               "...\n",
               YamlContentStream.str().c_str());
}

TEST(ReplacementsYamlTest, deserializesReplacements) {
  std::string YamlContent = "---\n"
                            "MainSourceFile:      /path/to/source.cpp\n"
                            "Replacements:\n"
                            "  - FilePath:        /path/to/file1.h\n"
                            "    Offset:          232\n"
                            "    Length:          56\n"
                            "    ReplacementText: 'replacement #1'\n"
                            "  - FilePath:        /path/to/file2.h\n"
                            "    Offset:          301\n"
                            "    Length:          2\n"
                            "    ReplacementText: 'replacement #2'\n"
                            "...\n";
  TranslationUnitReplacements DocActual;
  yaml::Input YAML(YamlContent);
  YAML >> DocActual;
  ASSERT_FALSE(YAML.error());
  ASSERT_EQ(2u, DocActual.Replacements.size());
  ASSERT_EQ("/path/to/source.cpp", DocActual.MainSourceFile);
  ASSERT_EQ("/path/to/file1.h", DocActual.Replacements[0].getFilePath());
  ASSERT_EQ(232u, DocActual.Replacements[0].getOffset());
  ASSERT_EQ(56u, DocActual.Replacements[0].getLength());
  ASSERT_EQ("replacement #1", DocActual.Replacements[0].getReplacementText());
  ASSERT_EQ("/path/to/file2.h", DocActual.Replacements[1].getFilePath());
  ASSERT_EQ(301u, DocActual.Replacements[1].getOffset());
  ASSERT_EQ(2u, DocActual.Replacements[1].getLength());
  ASSERT_EQ("replacement #2", DocActual.Replacements[1].getReplacementText());
}

TEST(ReplacementsYamlTest, deserializesWithoutContext) {
  // Make sure a doc can be read without the context field.
  std::string YamlContent = "---\n"
                            "MainSourceFile:      /path/to/source.cpp\n"
                            "Replacements:\n"
                            "  - FilePath:        target_file.h\n"
                            "    Offset:          1\n"
                            "    Length:          10\n"
                            "    ReplacementText: replacement\n"
                            "...\n";
  TranslationUnitReplacements DocActual;
  yaml::Input YAML(YamlContent);
  YAML >> DocActual;
  ASSERT_FALSE(YAML.error());
  ASSERT_EQ("/path/to/source.cpp", DocActual.MainSourceFile);
  ASSERT_EQ(1u, DocActual.Replacements.size());
  ASSERT_EQ("target_file.h", DocActual.Replacements[0].getFilePath());
  ASSERT_EQ(1u, DocActual.Replacements[0].getOffset());
  ASSERT_EQ(10u, DocActual.Replacements[0].getLength());
  ASSERT_EQ("replacement", DocActual.Replacements[0].getReplacementText());
}
