123 lines · cpp
1//===- unittests/Tooling/ReplacementsYamlTest.cpp - Serialization tests ---===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// Tests for serialization of Replacements.10//11//===----------------------------------------------------------------------===//12 13#include "clang/Tooling/ReplacementsYaml.h"14#include "gtest/gtest.h"15 16using namespace llvm;17using namespace clang::tooling;18 19TEST(ReplacementsYamlTest, serializesReplacements) {20 21 TranslationUnitReplacements Doc;22 23 Doc.MainSourceFile = "/path/to/source.cpp";24 Doc.Replacements.emplace_back("/path/to/file1.h", 232, 56, "replacement #1");25 Doc.Replacements.emplace_back("/path/to/file2.h", 301, 2, "replacement #2");26 27 std::string YamlContent;28 llvm::raw_string_ostream YamlContentStream(YamlContent);29 30 yaml::Output YAML(YamlContentStream);31 YAML << Doc;32 33 // NOTE: If this test starts to fail for no obvious reason, check whitespace.34 ASSERT_STREQ("---\n"35 "MainSourceFile: '/path/to/source.cpp'\n"36 "Replacements:\n"37 " - FilePath: '/path/to/file1.h'\n"38 " Offset: 232\n"39 " Length: 56\n"40 " ReplacementText: 'replacement #1'\n"41 " - FilePath: '/path/to/file2.h'\n"42 " Offset: 301\n"43 " Length: 2\n"44 " ReplacementText: 'replacement #2'\n"45 "...\n",46 YamlContent.c_str());47}48 49TEST(ReplacementsYamlTest, serializesNewLines) {50 TranslationUnitReplacements Doc;51 52 Doc.MainSourceFile = "/path/to/source.cpp";53 Doc.Replacements.emplace_back("/path/to/file1.h", 0, 0, "#include <utility>\n");54 55 std::string YamlContent;56 llvm::raw_string_ostream YamlContentStream(YamlContent);57 58 yaml::Output YAML(YamlContentStream);59 YAML << Doc;60 61 // NOTE: If this test starts to fail for no obvious reason, check whitespace.62 ASSERT_STREQ("---\n"63 "MainSourceFile: '/path/to/source.cpp'\n"64 "Replacements:\n"65 " - FilePath: '/path/to/file1.h'\n"66 " Offset: 0\n"67 " Length: 0\n"68 " ReplacementText: \"#include <utility>\\n\"\n"69 "...\n",70 YamlContent.c_str());71}72 73TEST(ReplacementsYamlTest, deserializesReplacements) {74 std::string YamlContent = "---\n"75 "MainSourceFile: /path/to/source.cpp\n"76 "Replacements:\n"77 " - FilePath: /path/to/file1.h\n"78 " Offset: 232\n"79 " Length: 56\n"80 " ReplacementText: 'replacement #1'\n"81 " - FilePath: /path/to/file2.h\n"82 " Offset: 301\n"83 " Length: 2\n"84 " ReplacementText: 'replacement #2'\n"85 "...\n";86 TranslationUnitReplacements DocActual;87 yaml::Input YAML(YamlContent);88 YAML >> DocActual;89 ASSERT_FALSE(YAML.error());90 ASSERT_EQ(2u, DocActual.Replacements.size());91 ASSERT_EQ("/path/to/source.cpp", DocActual.MainSourceFile);92 ASSERT_EQ("/path/to/file1.h", DocActual.Replacements[0].getFilePath());93 ASSERT_EQ(232u, DocActual.Replacements[0].getOffset());94 ASSERT_EQ(56u, DocActual.Replacements[0].getLength());95 ASSERT_EQ("replacement #1", DocActual.Replacements[0].getReplacementText());96 ASSERT_EQ("/path/to/file2.h", DocActual.Replacements[1].getFilePath());97 ASSERT_EQ(301u, DocActual.Replacements[1].getOffset());98 ASSERT_EQ(2u, DocActual.Replacements[1].getLength());99 ASSERT_EQ("replacement #2", DocActual.Replacements[1].getReplacementText());100}101 102TEST(ReplacementsYamlTest, deserializesWithoutContext) {103 // Make sure a doc can be read without the context field.104 std::string YamlContent = "---\n"105 "MainSourceFile: /path/to/source.cpp\n"106 "Replacements:\n"107 " - FilePath: target_file.h\n"108 " Offset: 1\n"109 " Length: 10\n"110 " ReplacementText: replacement\n"111 "...\n";112 TranslationUnitReplacements DocActual;113 yaml::Input YAML(YamlContent);114 YAML >> DocActual;115 ASSERT_FALSE(YAML.error());116 ASSERT_EQ("/path/to/source.cpp", DocActual.MainSourceFile);117 ASSERT_EQ(1u, DocActual.Replacements.size());118 ASSERT_EQ("target_file.h", DocActual.Replacements[0].getFilePath());119 ASSERT_EQ(1u, DocActual.Replacements[0].getOffset());120 ASSERT_EQ(10u, DocActual.Replacements[0].getLength());121 ASSERT_EQ("replacement", DocActual.Replacements[0].getReplacementText());122}123