summaryrefslogtreecommitdiffstats
path: root/clang/unittests/Tooling/ReplacementsYamlTest.cpp
diff options
context:
space:
mode:
authorEdwin Vane <edwin.vane@intel.com>2013-08-20 19:07:21 +0000
committerEdwin Vane <edwin.vane@intel.com>2013-08-20 19:07:21 +0000
commitd7e2278f6c071741796c20b368a6d0c93bbe79e2 (patch)
tree318a3c55f9f5a7338f6a90a1bb100b08159e5e5c /clang/unittests/Tooling/ReplacementsYamlTest.cpp
parentdb0fcfbfaeb2e401c06ca55a431755f11af76720 (diff)
downloadbcm5719-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.cpp106
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());
+}
OpenPOWER on IntegriCloud