diff options
Diffstat (limited to 'unittests/Tooling/ReplacementsYamlTest.cpp')
-rw-r--r-- | unittests/Tooling/ReplacementsYamlTest.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/unittests/Tooling/ReplacementsYamlTest.cpp b/unittests/Tooling/ReplacementsYamlTest.cpp new file mode 100644 index 0000000..a20dde7 --- /dev/null +++ b/unittests/Tooling/ReplacementsYamlTest.cpp @@ -0,0 +1,106 @@ +//===- 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.Context = "some context"; + Doc.Replacements + .push_back(Replacement("/path/to/file1.h", 232, 56, "replacement #1")); + Doc.Replacements + .push_back(Replacement("/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" + "Context: some context\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" + "Context: some context\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("some context", DocActual.Context); + 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(std::string(), DocActual.Context); + 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()); +} |