blob: 3e4193d2adfb28e70e9535c6ec8bd673786c575b [file] [log] [blame]
Edwin Vaned7e22782013-08-20 19:07:21 +00001//===- unittests/Tooling/ReplacementsYamlTest.cpp - Serialization tests ---===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Tests for serialization of Replacements.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/Tooling/ReplacementsYaml.h"
15#include "gtest/gtest.h"
16
17using namespace llvm;
18using namespace clang::tooling;
19
20TEST(ReplacementsYamlTest, serializesReplacements) {
21
22 TranslationUnitReplacements Doc;
23
24 Doc.MainSourceFile = "/path/to/source.cpp";
Alexander Kornienko9bab1992017-01-03 14:35:47 +000025 Doc.Replacements.emplace_back("/path/to/file1.h", 232, 56, "replacement #1");
26 Doc.Replacements.emplace_back("/path/to/file2.h", 301, 2, "replacement #2");
Edwin Vaned7e22782013-08-20 19:07:21 +000027
28 std::string YamlContent;
29 llvm::raw_string_ostream YamlContentStream(YamlContent);
30
31 yaml::Output YAML(YamlContentStream);
32 YAML << Doc;
33
34 // NOTE: If this test starts to fail for no obvious reason, check whitespace.
35 ASSERT_STREQ("---\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000036 "MainSourceFile: /path/to/source.cpp\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000037 "Replacements: \n" // Extra whitespace here!
Rui Ueyama2ceba792013-09-11 04:00:35 +000038 " - FilePath: /path/to/file1.h\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000039 " Offset: 232\n"
40 " Length: 56\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000041 " ReplacementText: 'replacement #1'\n"
42 " - FilePath: /path/to/file2.h\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000043 " Offset: 301\n"
44 " Length: 2\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000045 " ReplacementText: 'replacement #2'\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000046 "...\n",
47 YamlContentStream.str().c_str());
48}
49
50TEST(ReplacementsYamlTest, deserializesReplacements) {
51 std::string YamlContent = "---\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000052 "MainSourceFile: /path/to/source.cpp\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000053 "Replacements:\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000054 " - FilePath: /path/to/file1.h\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000055 " Offset: 232\n"
56 " Length: 56\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000057 " ReplacementText: 'replacement #1'\n"
58 " - FilePath: /path/to/file2.h\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000059 " Offset: 301\n"
60 " Length: 2\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000061 " ReplacementText: 'replacement #2'\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000062 "...\n";
63 TranslationUnitReplacements DocActual;
64 yaml::Input YAML(YamlContent);
65 YAML >> DocActual;
66 ASSERT_FALSE(YAML.error());
67 ASSERT_EQ(2u, DocActual.Replacements.size());
68 ASSERT_EQ("/path/to/source.cpp", DocActual.MainSourceFile);
Edwin Vaned7e22782013-08-20 19:07:21 +000069 ASSERT_EQ("/path/to/file1.h", DocActual.Replacements[0].getFilePath());
70 ASSERT_EQ(232u, DocActual.Replacements[0].getOffset());
71 ASSERT_EQ(56u, DocActual.Replacements[0].getLength());
72 ASSERT_EQ("replacement #1", DocActual.Replacements[0].getReplacementText());
73 ASSERT_EQ("/path/to/file2.h", DocActual.Replacements[1].getFilePath());
74 ASSERT_EQ(301u, DocActual.Replacements[1].getOffset());
75 ASSERT_EQ(2u, DocActual.Replacements[1].getLength());
76 ASSERT_EQ("replacement #2", DocActual.Replacements[1].getReplacementText());
77}
78
79TEST(ReplacementsYamlTest, deserializesWithoutContext) {
80 // Make sure a doc can be read without the context field.
81 std::string YamlContent = "---\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000082 "MainSourceFile: /path/to/source.cpp\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000083 "Replacements:\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000084 " - FilePath: target_file.h\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000085 " Offset: 1\n"
86 " Length: 10\n"
Rui Ueyama2ceba792013-09-11 04:00:35 +000087 " ReplacementText: replacement\n"
Edwin Vaned7e22782013-08-20 19:07:21 +000088 "...\n";
89 TranslationUnitReplacements DocActual;
90 yaml::Input YAML(YamlContent);
91 YAML >> DocActual;
92 ASSERT_FALSE(YAML.error());
93 ASSERT_EQ("/path/to/source.cpp", DocActual.MainSourceFile);
94 ASSERT_EQ(1u, DocActual.Replacements.size());
Edwin Vaned7e22782013-08-20 19:07:21 +000095 ASSERT_EQ("target_file.h", DocActual.Replacements[0].getFilePath());
96 ASSERT_EQ(1u, DocActual.Replacements[0].getOffset());
97 ASSERT_EQ(10u, DocActual.Replacements[0].getLength());
98 ASSERT_EQ("replacement", DocActual.Replacements[0].getReplacementText());
99}