diff options
author | Tareq A. Siraj <tareq.a.siraj@intel.com> | 2013-08-13 14:58:50 +0000 |
---|---|---|
committer | Tareq A. Siraj <tareq.a.siraj@intel.com> | 2013-08-13 14:58:50 +0000 |
commit | 3baabf396876af59f80a06b6ce5cfac8c2c9afda (patch) | |
tree | 2cf08348e4f268a6a79e14940c6681001b10dfd2 /clang-tools-extra/unittests/cpp11-migrate/ReplacementsYamlTest.cpp | |
parent | f77718ad1d2b20c834126ce7884755f97a93eb50 (diff) | |
download | bcm5719-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.cpp | 76 |
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()); + } +} |