blob: ab9f6c9b5d33b4c39b49b59d750f5dde9fa48469 [file] [log] [blame]
Edwin Vaned7e22782013-08-20 19:07:21 +00001//===- unittests/Tooling/ReplacementsYamlTest.cpp - Serialization tests ---===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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-exception
Edwin Vaned7e22782013-08-20 19:07:21 +00006//
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";
Alexander Kornienko9bab1992017-01-03 14:35:47 +000024 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");
Edwin Vaned7e22782013-08-20 19:07:21 +000026
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"
Zachary Turner9f169af2018-10-12 16:31:20 +000035 "MainSourceFile: '/path/to/source.cpp'\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000036 "Replacements: \n" // Extra whitespace here!
Zachary Turner9f169af2018-10-12 16:31:20 +000037 " - FilePath: '/path/to/file1.h'\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000038 " Offset: 232\n"
39 " Length: 56\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000040 " ReplacementText: 'replacement #1'\n"
Zachary Turner9f169af2018-10-12 16:31:20 +000041 " - FilePath: '/path/to/file2.h'\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000042 " Offset: 301\n"
43 " Length: 2\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000044 " ReplacementText: 'replacement #2'\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000045 "...\n",
46 YamlContentStream.str().c_str());
47}
48
49TEST(ReplacementsYamlTest, deserializesReplacements) {
50 std::string YamlContent = "---\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000051 "MainSourceFile: /path/to/source.cpp\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000052 "Replacements:\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000053 " - FilePath: /path/to/file1.h\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000054 " Offset: 232\n"
55 " Length: 56\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000056 " ReplacementText: 'replacement #1'\n"
57 " - FilePath: /path/to/file2.h\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000058 " Offset: 301\n"
59 " Length: 2\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000060 " ReplacementText: 'replacement #2'\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000061 "...\n";
62 TranslationUnitReplacements DocActual;
63 yaml::Input YAML(YamlContent);
64 YAML >> DocActual;
65 ASSERT_FALSE(YAML.error());
66 ASSERT_EQ(2u, DocActual.Replacements.size());
67 ASSERT_EQ("/path/to/source.cpp", DocActual.MainSourceFile);
Edwin Vaned7e22782013-08-20 19:07:21 +000068 ASSERT_EQ("/path/to/file1.h", DocActual.Replacements[0].getFilePath());
69 ASSERT_EQ(232u, DocActual.Replacements[0].getOffset());
70 ASSERT_EQ(56u, DocActual.Replacements[0].getLength());
71 ASSERT_EQ("replacement #1", DocActual.Replacements[0].getReplacementText());
72 ASSERT_EQ("/path/to/file2.h", DocActual.Replacements[1].getFilePath());
73 ASSERT_EQ(301u, DocActual.Replacements[1].getOffset());
74 ASSERT_EQ(2u, DocActual.Replacements[1].getLength());
75 ASSERT_EQ("replacement #2", DocActual.Replacements[1].getReplacementText());
76}
77
78TEST(ReplacementsYamlTest, deserializesWithoutContext) {
79 // Make sure a doc can be read without the context field.
80 std::string YamlContent = "---\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000081 "MainSourceFile: /path/to/source.cpp\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000082 "Replacements:\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000083 " - FilePath: target_file.h\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000084 " Offset: 1\n"
85 " Length: 10\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000086 " ReplacementText: replacement\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000087 "...\n";
88 TranslationUnitReplacements DocActual;
89 yaml::Input YAML(YamlContent);
90 YAML >> DocActual;
91 ASSERT_FALSE(YAML.error());
92 ASSERT_EQ("/path/to/source.cpp", DocActual.MainSourceFile);
93 ASSERT_EQ(1u, DocActual.Replacements.size());
Edwin Vaned7e22782013-08-20 19:07:21 +000094 ASSERT_EQ("target_file.h", DocActual.Replacements[0].getFilePath());
95 ASSERT_EQ(1u, DocActual.Replacements[0].getOffset());
96 ASSERT_EQ(10u, DocActual.Replacements[0].getLength());
97 ASSERT_EQ("replacement", DocActual.Replacements[0].getReplacementText());
98}