ReplacementsYamlTest.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. //===- unittests/Tooling/ReplacementsYamlTest.cpp - Serialization tests ---===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. //
  10. // Tests for serialization of Replacements.
  11. //
  12. //===----------------------------------------------------------------------===//
  13. #include "clang/Tooling/ReplacementsYaml.h"
  14. #include "gtest/gtest.h"
  15. using namespace llvm;
  16. using namespace clang::tooling;
  17. TEST(ReplacementsYamlTest, serializesReplacements) {
  18. TranslationUnitReplacements Doc;
  19. Doc.MainSourceFile = "/path/to/source.cpp";
  20. Doc.Context = "some context";
  21. Doc.Replacements
  22. .push_back(Replacement("/path/to/file1.h", 232, 56, "replacement #1"));
  23. Doc.Replacements
  24. .push_back(Replacement("/path/to/file2.h", 301, 2, "replacement #2"));
  25. std::string YamlContent;
  26. llvm::raw_string_ostream YamlContentStream(YamlContent);
  27. yaml::Output YAML(YamlContentStream);
  28. YAML << Doc;
  29. // NOTE: If this test starts to fail for no obvious reason, check whitespace.
  30. ASSERT_STREQ("---\n"
  31. "MainSourceFile: /path/to/source.cpp\n"
  32. "Context: some context\n"
  33. "Replacements: \n" // Extra whitespace here!
  34. " - FilePath: /path/to/file1.h\n"
  35. " Offset: 232\n"
  36. " Length: 56\n"
  37. " ReplacementText: 'replacement #1'\n"
  38. " - FilePath: /path/to/file2.h\n"
  39. " Offset: 301\n"
  40. " Length: 2\n"
  41. " ReplacementText: 'replacement #2'\n"
  42. "...\n",
  43. YamlContentStream.str().c_str());
  44. }
  45. TEST(ReplacementsYamlTest, deserializesReplacements) {
  46. std::string YamlContent = "---\n"
  47. "MainSourceFile: /path/to/source.cpp\n"
  48. "Context: some context\n"
  49. "Replacements:\n"
  50. " - FilePath: /path/to/file1.h\n"
  51. " Offset: 232\n"
  52. " Length: 56\n"
  53. " ReplacementText: 'replacement #1'\n"
  54. " - FilePath: /path/to/file2.h\n"
  55. " Offset: 301\n"
  56. " Length: 2\n"
  57. " ReplacementText: 'replacement #2'\n"
  58. "...\n";
  59. TranslationUnitReplacements DocActual;
  60. yaml::Input YAML(YamlContent);
  61. YAML >> DocActual;
  62. ASSERT_FALSE(YAML.error());
  63. ASSERT_EQ(2u, DocActual.Replacements.size());
  64. ASSERT_EQ("/path/to/source.cpp", DocActual.MainSourceFile);
  65. ASSERT_EQ("some context", DocActual.Context);
  66. ASSERT_EQ("/path/to/file1.h", DocActual.Replacements[0].getFilePath());
  67. ASSERT_EQ(232u, DocActual.Replacements[0].getOffset());
  68. ASSERT_EQ(56u, DocActual.Replacements[0].getLength());
  69. ASSERT_EQ("replacement #1", DocActual.Replacements[0].getReplacementText());
  70. ASSERT_EQ("/path/to/file2.h", DocActual.Replacements[1].getFilePath());
  71. ASSERT_EQ(301u, DocActual.Replacements[1].getOffset());
  72. ASSERT_EQ(2u, DocActual.Replacements[1].getLength());
  73. ASSERT_EQ("replacement #2", DocActual.Replacements[1].getReplacementText());
  74. }
  75. TEST(ReplacementsYamlTest, deserializesWithoutContext) {
  76. // Make sure a doc can be read without the context field.
  77. std::string YamlContent = "---\n"
  78. "MainSourceFile: /path/to/source.cpp\n"
  79. "Replacements:\n"
  80. " - FilePath: target_file.h\n"
  81. " Offset: 1\n"
  82. " Length: 10\n"
  83. " ReplacementText: replacement\n"
  84. "...\n";
  85. TranslationUnitReplacements DocActual;
  86. yaml::Input YAML(YamlContent);
  87. YAML >> DocActual;
  88. ASSERT_FALSE(YAML.error());
  89. ASSERT_EQ("/path/to/source.cpp", DocActual.MainSourceFile);
  90. ASSERT_EQ(1u, DocActual.Replacements.size());
  91. ASSERT_EQ(std::string(), DocActual.Context);
  92. ASSERT_EQ("target_file.h", DocActual.Replacements[0].getFilePath());
  93. ASSERT_EQ(1u, DocActual.Replacements[0].getOffset());
  94. ASSERT_EQ(10u, DocActual.Replacements[0].getLength());
  95. ASSERT_EQ("replacement", DocActual.Replacements[0].getReplacementText());
  96. }