diff options
| author | Edwin Vane <edwin.vane@intel.com> | 2013-08-20 19:07:21 +0000 |
|---|---|---|
| committer | Edwin Vane <edwin.vane@intel.com> | 2013-08-20 19:07:21 +0000 |
| commit | d7e2278f6c071741796c20b368a6d0c93bbe79e2 (patch) | |
| tree | 318a3c55f9f5a7338f6a90a1bb100b08159e5e5c /clang/unittests/Tooling/ReplacementsYamlTest.cpp | |
| parent | db0fcfbfaeb2e401c06ca55a431755f11af76720 (diff) | |
| download | bcm5719-llvm-d7e2278f6c071741796c20b368a6d0c93bbe79e2.tar.gz bcm5719-llvm-d7e2278f6c071741796c20b368a6d0c93bbe79e2.zip | |
Adding Replacement serialization support
Adding a new data structure for storing the Replacements generated for a single
translation unit. Structure contains a vector of Replacements as well a field
indicating the main source file of the translation unit. An optional 'Context'
field allows for tools to provide any information they want about the context
the Replacements were generated in. This context is printed, for example, when
detecting conflicts during Replacement deduplication.
YAML serialization for this data structure is implemented in this patch. Tests
are included.
Differential Revision: http://llvm-reviews.chandlerc.com/D1422
llvm-svn: 188818
Diffstat (limited to 'clang/unittests/Tooling/ReplacementsYamlTest.cpp')
| -rw-r--r-- | clang/unittests/Tooling/ReplacementsYamlTest.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/clang/unittests/Tooling/ReplacementsYamlTest.cpp b/clang/unittests/Tooling/ReplacementsYamlTest.cpp new file mode 100644 index 00000000000..627002a74e0 --- /dev/null +++ b/clang/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()); +} |

