mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-25 11:00:12 +01:00
TODOs in the test for known issues. I may switch the approach to getting the variable type (on examination, this isn't working quite as well as I'd thought) but for now I think it's okay. I had an earlier approach though that may work better overall -- I'd been thinking this would work better, but as you can see in the null check for type information, I think I missed a key point. Anyways, what'd really been vexing me was `int i, j` which I think I handle passably well now. There's obviously room for improvement, but given I've been going at this for a couple days now, I thought it best to checkpoint where I was. This also includes some related framework changes to fix bumps I was running into. Overall the tool should operate a bit more smoothly with these changes. There are still issues with overlapping replacements, but I think it's primarily with range-based for loops which I just need to take some time to fix.
40 lines
1.5 KiB
C++
40 lines
1.5 KiB
C++
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
// Exceptions. See /LICENSE for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
#include "migrate_cpp/cpp_refactoring/matcher_test_base.h"
|
|
|
|
#include "clang/Tooling/Tooling.h"
|
|
#include "gmock/gmock.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
namespace ct = ::clang::tooling;
|
|
|
|
namespace Carbon {
|
|
|
|
void MatcherTestBase::ExpectReplacement(llvm::StringRef before,
|
|
llvm::StringRef after) {
|
|
auto factory = ct::newFrontendActionFactory(&finder);
|
|
constexpr char Filename[] = "test.cc";
|
|
replacements.clear();
|
|
replacements.insert({Filename, {}});
|
|
ASSERT_TRUE(ct::runToolOnCodeWithArgs(
|
|
factory->create(), before, {}, Filename, "clang-tool",
|
|
std::make_shared<clang::PCHContainerOperations>(),
|
|
ct::FileContentMappings()));
|
|
EXPECT_THAT(replacements, testing::ElementsAre(testing::Key(Filename)));
|
|
auto actual = ct::applyAllReplacements(before, replacements[Filename]);
|
|
if (after.find('\n') == std::string::npos) {
|
|
EXPECT_THAT(*actual, testing::Eq(after.str()));
|
|
} else {
|
|
// Split lines to get gmock to get an easier-to-read error.
|
|
llvm::SmallVector<llvm::StringRef, 0> actual_lines;
|
|
llvm::SplitString(*actual, actual_lines, "\n");
|
|
llvm::SmallVector<llvm::StringRef, 0> after_lines;
|
|
llvm::SplitString(after, after_lines, "\n");
|
|
EXPECT_THAT(actual_lines, testing::ContainerEq(after_lines));
|
|
}
|
|
}
|
|
|
|
} // namespace Carbon
|