summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/unittests/cpp11-migrate/ReplacementsYamlTest.cpp
diff options
context:
space:
mode:
authorTareq A. Siraj <tareq.a.siraj@intel.com>2013-08-13 14:58:50 +0000
committerTareq A. Siraj <tareq.a.siraj@intel.com>2013-08-13 14:58:50 +0000
commit3baabf396876af59f80a06b6ce5cfac8c2c9afda (patch)
tree2cf08348e4f268a6a79e14940c6681001b10dfd2 /clang-tools-extra/unittests/cpp11-migrate/ReplacementsYamlTest.cpp
parentf77718ad1d2b20c834126ce7884755f97a93eb50 (diff)
downloadbcm5719-llvm-3baabf396876af59f80a06b6ce5cfac8c2c9afda.tar.gz
bcm5719-llvm-3baabf396876af59f80a06b6ce5cfac8c2c9afda.zip
cpp11-migrate: Write header replacements to disk
Another attempt to commit r187204 after windows related problems has been fixed. Note that changes to this patch reflect the current behavior of cpp11-migrate. Header replacements are now written to disk in YAML format for an external tool to merge. A unique file will be created in the same directory as the header with all replacements that came from a source file that included the header file. The YAML file will have: - Name of the header file - Name of the source file that included the header file - Transform ID that generated the replacement - Offset - Length - Replacement text Any tool reading these replacements should read them using the HeaderChangeDocument struct. Differential Revision: http://llvm-reviews.chandlerc.com/D1369 llvm-svn: 188274
Diffstat (limited to 'clang-tools-extra/unittests/cpp11-migrate/ReplacementsYamlTest.cpp')
-rw-r--r--clang-tools-extra/unittests/cpp11-migrate/ReplacementsYamlTest.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/clang-tools-extra/unittests/cpp11-migrate/ReplacementsYamlTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/ReplacementsYamlTest.cpp
new file mode 100644
index 00000000000..7b95e4dcadd
--- /dev/null
+++ b/clang-tools-extra/unittests/cpp11-migrate/ReplacementsYamlTest.cpp
@@ -0,0 +1,76 @@
+//===- unittests/cpp11-migrate/ReplacementsYamlTest.cpp -------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Test for the Yaml files generated by transforms on header files.
+//
+//===----------------------------------------------------------------------===//
+
+#include "Utility.h"
+#include "Core/FileOverrides.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+
+TEST(ReplacementsYamlTest, writeReadTest) {
+ using clang::tooling::Replacement;
+
+ const std::string HeaderFileName = "/path/to/common.h";
+ const std::string SourceFileName = "/path/to/source.cpp";
+ const std::string TransformID = "loop-convert";
+ const unsigned int ReplacementOffset1 = 232;
+ const unsigned int ReplacementLength1 = 56;
+ const std::string ReplacementText1 = "(auto & elem : V)";
+ const unsigned int ReplacementOffset2 = 301;
+ const unsigned int ReplacementLength2 = 2;
+ const std::string ReplacementText2 = "elem";
+
+ HeaderChangeDocument HCD;
+ HCD.TransformID = TransformID;
+ HCD.Replacements.push_back(Replacement(HeaderFileName, ReplacementOffset1,
+ ReplacementLength1, ReplacementText1));
+ HCD.Replacements.push_back(Replacement(HeaderFileName, ReplacementOffset2,
+ ReplacementLength2, ReplacementText2));
+
+ HCD.HeaderFileName = HeaderFileName.c_str();
+ HCD.SourceFileName = SourceFileName.c_str();
+
+ std::string YamlContent;
+ llvm::raw_string_ostream YamlContentStream(YamlContent);
+
+ // Write to the YAML file.
+ {
+ yaml::Output YAML(YamlContentStream);
+ YAML << HCD;
+ YamlContentStream.str();
+ ASSERT_NE(YamlContent.length(), 0u);
+ }
+
+ // Read from the YAML file and verify that what was written is exactly what
+ // we read back.
+ {
+ HeaderChangeDocument HCDActual;
+ yaml::Input YAML(YamlContent);
+ YAML >> HCDActual;
+ ASSERT_NO_ERROR(YAML.error());
+ EXPECT_EQ(HeaderFileName, HCDActual.HeaderFileName);
+ EXPECT_EQ(SourceFileName, HCDActual.SourceFileName);
+ EXPECT_EQ(TransformID, HCDActual.TransformID);
+ ASSERT_EQ(2u, HCDActual.Replacements.size());
+
+ EXPECT_EQ(ReplacementOffset1, HCDActual.Replacements[0].getOffset());
+ EXPECT_EQ(ReplacementLength1, HCDActual.Replacements[0].getLength());
+ EXPECT_EQ(ReplacementText1,
+ HCDActual.Replacements[0].getReplacementText().str());
+
+ EXPECT_EQ(ReplacementOffset2, HCDActual.Replacements[1].getOffset());
+ EXPECT_EQ(ReplacementLength2, HCDActual.Replacements[1].getLength());
+ EXPECT_EQ(ReplacementText2,
+ HCDActual.Replacements[1].getReplacementText().str());
+ }
+}
OpenPOWER on IntegriCloud