xref: /aosp_15_r20/external/clang/unittests/Tooling/ReplacementsYamlTest.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li //===- unittests/Tooling/ReplacementsYamlTest.cpp - Serialization tests ---===//
2*67e74705SXin Li //
3*67e74705SXin Li //                     The LLVM Compiler Infrastructure
4*67e74705SXin Li //
5*67e74705SXin Li // This file is distributed under the University of Illinois Open Source
6*67e74705SXin Li // License. See LICENSE.TXT for details.
7*67e74705SXin Li //
8*67e74705SXin Li //===----------------------------------------------------------------------===//
9*67e74705SXin Li //
10*67e74705SXin Li // Tests for serialization of Replacements.
11*67e74705SXin Li //
12*67e74705SXin Li //===----------------------------------------------------------------------===//
13*67e74705SXin Li 
14*67e74705SXin Li #include "clang/Tooling/ReplacementsYaml.h"
15*67e74705SXin Li #include "gtest/gtest.h"
16*67e74705SXin Li 
17*67e74705SXin Li using namespace llvm;
18*67e74705SXin Li using namespace clang::tooling;
19*67e74705SXin Li 
TEST(ReplacementsYamlTest,serializesReplacements)20*67e74705SXin Li TEST(ReplacementsYamlTest, serializesReplacements) {
21*67e74705SXin Li 
22*67e74705SXin Li   TranslationUnitReplacements Doc;
23*67e74705SXin Li 
24*67e74705SXin Li   Doc.MainSourceFile = "/path/to/source.cpp";
25*67e74705SXin Li   Doc.Context = "some context";
26*67e74705SXin Li   Doc.Replacements
27*67e74705SXin Li       .push_back(Replacement("/path/to/file1.h", 232, 56, "replacement #1"));
28*67e74705SXin Li   Doc.Replacements
29*67e74705SXin Li       .push_back(Replacement("/path/to/file2.h", 301, 2, "replacement #2"));
30*67e74705SXin Li 
31*67e74705SXin Li   std::string YamlContent;
32*67e74705SXin Li   llvm::raw_string_ostream YamlContentStream(YamlContent);
33*67e74705SXin Li 
34*67e74705SXin Li   yaml::Output YAML(YamlContentStream);
35*67e74705SXin Li   YAML << Doc;
36*67e74705SXin Li 
37*67e74705SXin Li   // NOTE: If this test starts to fail for no obvious reason, check whitespace.
38*67e74705SXin Li   ASSERT_STREQ("---\n"
39*67e74705SXin Li                "MainSourceFile:  /path/to/source.cpp\n"
40*67e74705SXin Li                "Context:         some context\n"
41*67e74705SXin Li                "Replacements:    \n" // Extra whitespace here!
42*67e74705SXin Li                "  - FilePath:        /path/to/file1.h\n"
43*67e74705SXin Li                "    Offset:          232\n"
44*67e74705SXin Li                "    Length:          56\n"
45*67e74705SXin Li                "    ReplacementText: 'replacement #1'\n"
46*67e74705SXin Li                "  - FilePath:        /path/to/file2.h\n"
47*67e74705SXin Li                "    Offset:          301\n"
48*67e74705SXin Li                "    Length:          2\n"
49*67e74705SXin Li                "    ReplacementText: 'replacement #2'\n"
50*67e74705SXin Li                "...\n",
51*67e74705SXin Li                YamlContentStream.str().c_str());
52*67e74705SXin Li }
53*67e74705SXin Li 
TEST(ReplacementsYamlTest,deserializesReplacements)54*67e74705SXin Li TEST(ReplacementsYamlTest, deserializesReplacements) {
55*67e74705SXin Li   std::string YamlContent = "---\n"
56*67e74705SXin Li                             "MainSourceFile:      /path/to/source.cpp\n"
57*67e74705SXin Li                             "Context:             some context\n"
58*67e74705SXin Li                             "Replacements:\n"
59*67e74705SXin Li                             "  - FilePath:        /path/to/file1.h\n"
60*67e74705SXin Li                             "    Offset:          232\n"
61*67e74705SXin Li                             "    Length:          56\n"
62*67e74705SXin Li                             "    ReplacementText: 'replacement #1'\n"
63*67e74705SXin Li                             "  - FilePath:        /path/to/file2.h\n"
64*67e74705SXin Li                             "    Offset:          301\n"
65*67e74705SXin Li                             "    Length:          2\n"
66*67e74705SXin Li                             "    ReplacementText: 'replacement #2'\n"
67*67e74705SXin Li                             "...\n";
68*67e74705SXin Li   TranslationUnitReplacements DocActual;
69*67e74705SXin Li   yaml::Input YAML(YamlContent);
70*67e74705SXin Li   YAML >> DocActual;
71*67e74705SXin Li   ASSERT_FALSE(YAML.error());
72*67e74705SXin Li   ASSERT_EQ(2u, DocActual.Replacements.size());
73*67e74705SXin Li   ASSERT_EQ("/path/to/source.cpp", DocActual.MainSourceFile);
74*67e74705SXin Li   ASSERT_EQ("some context", DocActual.Context);
75*67e74705SXin Li   ASSERT_EQ("/path/to/file1.h", DocActual.Replacements[0].getFilePath());
76*67e74705SXin Li   ASSERT_EQ(232u, DocActual.Replacements[0].getOffset());
77*67e74705SXin Li   ASSERT_EQ(56u, DocActual.Replacements[0].getLength());
78*67e74705SXin Li   ASSERT_EQ("replacement #1", DocActual.Replacements[0].getReplacementText());
79*67e74705SXin Li   ASSERT_EQ("/path/to/file2.h", DocActual.Replacements[1].getFilePath());
80*67e74705SXin Li   ASSERT_EQ(301u, DocActual.Replacements[1].getOffset());
81*67e74705SXin Li   ASSERT_EQ(2u, DocActual.Replacements[1].getLength());
82*67e74705SXin Li   ASSERT_EQ("replacement #2", DocActual.Replacements[1].getReplacementText());
83*67e74705SXin Li }
84*67e74705SXin Li 
TEST(ReplacementsYamlTest,deserializesWithoutContext)85*67e74705SXin Li TEST(ReplacementsYamlTest, deserializesWithoutContext) {
86*67e74705SXin Li   // Make sure a doc can be read without the context field.
87*67e74705SXin Li   std::string YamlContent = "---\n"
88*67e74705SXin Li                             "MainSourceFile:      /path/to/source.cpp\n"
89*67e74705SXin Li                             "Replacements:\n"
90*67e74705SXin Li                             "  - FilePath:        target_file.h\n"
91*67e74705SXin Li                             "    Offset:          1\n"
92*67e74705SXin Li                             "    Length:          10\n"
93*67e74705SXin Li                             "    ReplacementText: replacement\n"
94*67e74705SXin Li                             "...\n";
95*67e74705SXin Li   TranslationUnitReplacements DocActual;
96*67e74705SXin Li   yaml::Input YAML(YamlContent);
97*67e74705SXin Li   YAML >> DocActual;
98*67e74705SXin Li   ASSERT_FALSE(YAML.error());
99*67e74705SXin Li   ASSERT_EQ("/path/to/source.cpp", DocActual.MainSourceFile);
100*67e74705SXin Li   ASSERT_EQ(1u, DocActual.Replacements.size());
101*67e74705SXin Li   ASSERT_EQ(std::string(), DocActual.Context);
102*67e74705SXin Li   ASSERT_EQ("target_file.h", DocActual.Replacements[0].getFilePath());
103*67e74705SXin Li   ASSERT_EQ(1u, DocActual.Replacements[0].getOffset());
104*67e74705SXin Li   ASSERT_EQ(10u, DocActual.Replacements[0].getLength());
105*67e74705SXin Li   ASSERT_EQ("replacement", DocActual.Replacements[0].getReplacementText());
106*67e74705SXin Li }
107