brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · 9558d72 Raw
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