1b03877abSKrasimir Georgiev //===- UsingDeclarationsSorterTest.cpp - Formatting unit tests ------------===//
2b03877abSKrasimir Georgiev //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6b03877abSKrasimir Georgiev //
7b03877abSKrasimir Georgiev //===----------------------------------------------------------------------===//
8b03877abSKrasimir Georgiev
9b03877abSKrasimir Georgiev #include "clang/Format/Format.h"
10b03877abSKrasimir Georgiev
11b03877abSKrasimir Georgiev #include "llvm/Support/Debug.h"
12b03877abSKrasimir Georgiev #include "gtest/gtest.h"
13b03877abSKrasimir Georgiev
14b03877abSKrasimir Georgiev #define DEBUG_TYPE "using-declarations-sorter-test"
15b03877abSKrasimir Georgiev
16b03877abSKrasimir Georgiev namespace clang {
17b03877abSKrasimir Georgiev namespace format {
18b03877abSKrasimir Georgiev namespace {
19b03877abSKrasimir Georgiev
20b03877abSKrasimir Georgiev class UsingDeclarationsSorterTest : public ::testing::Test {
21b03877abSKrasimir Georgiev protected:
sortUsingDeclarations(llvm::StringRef Code,const std::vector<tooling::Range> & Ranges,const FormatStyle & Style=getLLVMStyle ())22b03877abSKrasimir Georgiev std::string sortUsingDeclarations(llvm::StringRef Code,
23b03877abSKrasimir Georgiev const std::vector<tooling::Range> &Ranges,
24b03877abSKrasimir Georgiev const FormatStyle &Style = getLLVMStyle()) {
253538b39eSNicola Zaghen LLVM_DEBUG(llvm::errs() << "---\n");
263538b39eSNicola Zaghen LLVM_DEBUG(llvm::errs() << Code << "\n\n");
27b03877abSKrasimir Georgiev tooling::Replacements Replaces =
28b03877abSKrasimir Georgiev clang::format::sortUsingDeclarations(Style, Code, Ranges, "<stdin>");
29b03877abSKrasimir Georgiev auto Result = applyAllReplacements(Code, Replaces);
30b03877abSKrasimir Georgiev EXPECT_TRUE(static_cast<bool>(Result));
313538b39eSNicola Zaghen LLVM_DEBUG(llvm::errs() << "\n" << *Result << "\n\n");
32b03877abSKrasimir Georgiev return *Result;
33b03877abSKrasimir Georgiev }
34b03877abSKrasimir Georgiev
sortUsingDeclarations(llvm::StringRef Code,const FormatStyle & Style=getLLVMStyle ())35b03877abSKrasimir Georgiev std::string sortUsingDeclarations(llvm::StringRef Code,
36b03877abSKrasimir Georgiev const FormatStyle &Style = getLLVMStyle()) {
37b03877abSKrasimir Georgiev return sortUsingDeclarations(Code,
38b03877abSKrasimir Georgiev /*Ranges=*/{1, tooling::Range(0, Code.size())},
39b03877abSKrasimir Georgiev Style);
40b03877abSKrasimir Georgiev }
41b03877abSKrasimir Georgiev };
42b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,SwapsTwoConsecutiveUsingDeclarations)43b03877abSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, SwapsTwoConsecutiveUsingDeclarations) {
44b03877abSKrasimir Georgiev EXPECT_EQ("using a;\n"
45b03877abSKrasimir Georgiev "using b;",
46b03877abSKrasimir Georgiev sortUsingDeclarations("using a;\n"
47b03877abSKrasimir Georgiev "using b;"));
48b03877abSKrasimir Georgiev EXPECT_EQ("using a;\n"
49b03877abSKrasimir Georgiev "using aa;",
50b03877abSKrasimir Georgiev sortUsingDeclarations("using aa;\n"
51b03877abSKrasimir Georgiev "using a;"));
52818da9bbSKrasimir Georgiev EXPECT_EQ("using a;\n"
53818da9bbSKrasimir Georgiev "using ::a;",
54b03877abSKrasimir Georgiev sortUsingDeclarations("using a;\n"
55b03877abSKrasimir Georgiev "using ::a;"));
56b03877abSKrasimir Georgiev
57b03877abSKrasimir Georgiev EXPECT_EQ("using a::bcd;\n"
58b03877abSKrasimir Georgiev "using a::cd;",
59b03877abSKrasimir Georgiev sortUsingDeclarations("using a::cd;\n"
60b03877abSKrasimir Georgiev "using a::bcd;"));
61b03877abSKrasimir Georgiev
62b03877abSKrasimir Georgiev EXPECT_EQ("using a;\n"
63b03877abSKrasimir Georgiev "using a::a;",
64b03877abSKrasimir Georgiev sortUsingDeclarations("using a::a;\n"
65b03877abSKrasimir Georgiev "using a;"));
66b03877abSKrasimir Georgiev
67b03877abSKrasimir Georgiev EXPECT_EQ("using a::ba::aa;\n"
68b03877abSKrasimir Georgiev "using a::bb::ccc;",
69b03877abSKrasimir Georgiev sortUsingDeclarations("using a::bb::ccc;\n"
70b03877abSKrasimir Georgiev "using a::ba::aa;"));
71b03877abSKrasimir Georgiev
72b03877abSKrasimir Georgiev EXPECT_EQ("using a;\n"
73b03877abSKrasimir Georgiev "using typename a;",
74b03877abSKrasimir Georgiev sortUsingDeclarations("using typename a;\n"
75b03877abSKrasimir Georgiev "using a;"));
76b03877abSKrasimir Georgiev
77b03877abSKrasimir Georgiev EXPECT_EQ("using typename z;\n"
78b03877abSKrasimir Georgiev "using typenamea;",
79b03877abSKrasimir Georgiev sortUsingDeclarations("using typenamea;\n"
80b03877abSKrasimir Georgiev "using typename z;"));
81b03877abSKrasimir Georgiev
82b03877abSKrasimir Georgiev EXPECT_EQ("using a, b;\n"
83b03877abSKrasimir Georgiev "using aa;",
84b03877abSKrasimir Georgiev sortUsingDeclarations("using aa;\n"
85b03877abSKrasimir Georgiev "using a, b;"));
86b03877abSKrasimir Georgiev }
87b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,UsingDeclarationOrder)88818da9bbSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, UsingDeclarationOrder) {
897fc53367SKrasimir Georgiev EXPECT_EQ("using A;\n"
907fc53367SKrasimir Georgiev "using a;",
917fc53367SKrasimir Georgiev sortUsingDeclarations("using A;\n"
927fc53367SKrasimir Georgiev "using a;"));
93818da9bbSKrasimir Georgiev EXPECT_EQ("using a;\n"
94818da9bbSKrasimir Georgiev "using A;",
957fc53367SKrasimir Georgiev sortUsingDeclarations("using a;\n"
967fc53367SKrasimir Georgiev "using A;"));
97818da9bbSKrasimir Georgiev EXPECT_EQ("using a;\n"
98818da9bbSKrasimir Georgiev "using B;",
997fc53367SKrasimir Georgiev sortUsingDeclarations("using B;\n"
1007fc53367SKrasimir Georgiev "using a;"));
101c47fc31dSKrasimir Georgiev
102818da9bbSKrasimir Georgiev // Ignores leading '::'.
103818da9bbSKrasimir Georgiev EXPECT_EQ("using ::a;\n"
104818da9bbSKrasimir Georgiev "using A;",
105818da9bbSKrasimir Georgiev sortUsingDeclarations("using ::a;\n"
106818da9bbSKrasimir Georgiev "using A;"));
107818da9bbSKrasimir Georgiev
108818da9bbSKrasimir Georgiev EXPECT_EQ("using ::A;\n"
109818da9bbSKrasimir Georgiev "using a;",
110818da9bbSKrasimir Georgiev sortUsingDeclarations("using ::A;\n"
111818da9bbSKrasimir Georgiev "using a;"));
112818da9bbSKrasimir Georgiev
113818da9bbSKrasimir Georgiev // Sorts '_' before 'a' and 'A'.
114c47fc31dSKrasimir Georgiev EXPECT_EQ("using _;\n"
115c47fc31dSKrasimir Georgiev "using A;",
116c47fc31dSKrasimir Georgiev sortUsingDeclarations("using A;\n"
117c47fc31dSKrasimir Georgiev "using _;"));
1187fc53367SKrasimir Georgiev EXPECT_EQ("using _;\n"
1197fc53367SKrasimir Georgiev "using a;",
1207fc53367SKrasimir Georgiev sortUsingDeclarations("using a;\n"
1217fc53367SKrasimir Georgiev "using _;"));
1227fc53367SKrasimir Georgiev EXPECT_EQ("using a::_;\n"
1237fc53367SKrasimir Georgiev "using a::a;",
1247fc53367SKrasimir Georgiev sortUsingDeclarations("using a::a;\n"
1257fc53367SKrasimir Georgiev "using a::_;"));
1267fc53367SKrasimir Georgiev
127818da9bbSKrasimir Georgiev // Sorts non-namespace names before namespace names at the same level.
1287fc53367SKrasimir Georgiev EXPECT_EQ("using ::testing::_;\n"
1297fc53367SKrasimir Georgiev "using ::testing::Aardvark;\n"
130818da9bbSKrasimir Georgiev "using ::testing::kMax;\n"
1317fc53367SKrasimir Georgiev "using ::testing::Xylophone;\n"
132c47fc31dSKrasimir Georgiev "using ::testing::apple::Honeycrisp;\n"
1337fc53367SKrasimir Georgiev "using ::testing::zebra::Stripes;",
1347fc53367SKrasimir Georgiev sortUsingDeclarations("using ::testing::Aardvark;\n"
1357fc53367SKrasimir Georgiev "using ::testing::Xylophone;\n"
136818da9bbSKrasimir Georgiev "using ::testing::kMax;\n"
1377fc53367SKrasimir Georgiev "using ::testing::_;\n"
1387fc53367SKrasimir Georgiev "using ::testing::apple::Honeycrisp;\n"
1397fc53367SKrasimir Georgiev "using ::testing::zebra::Stripes;"));
1407fc53367SKrasimir Georgiev }
1417fc53367SKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,SortsStably)142818da9bbSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, SortsStably) {
143818da9bbSKrasimir Georgiev EXPECT_EQ("using a;\n"
144818da9bbSKrasimir Georgiev "using A;\n"
145818da9bbSKrasimir Georgiev "using a;\n"
146818da9bbSKrasimir Georgiev "using A;\n"
147818da9bbSKrasimir Georgiev "using a;\n"
148818da9bbSKrasimir Georgiev "using A;\n"
149818da9bbSKrasimir Georgiev "using a;\n"
150818da9bbSKrasimir Georgiev "using B;\n"
151818da9bbSKrasimir Georgiev "using b;\n"
152818da9bbSKrasimir Georgiev "using B;\n"
153818da9bbSKrasimir Georgiev "using b;\n"
154818da9bbSKrasimir Georgiev "using B;\n"
155818da9bbSKrasimir Georgiev "using b;",
156818da9bbSKrasimir Georgiev sortUsingDeclarations("using a;\n"
157818da9bbSKrasimir Georgiev "using B;\n"
158818da9bbSKrasimir Georgiev "using a;\n"
159818da9bbSKrasimir Georgiev "using b;\n"
160818da9bbSKrasimir Georgiev "using A;\n"
161818da9bbSKrasimir Georgiev "using a;\n"
162818da9bbSKrasimir Georgiev "using b;\n"
163818da9bbSKrasimir Georgiev "using B;\n"
164818da9bbSKrasimir Georgiev "using b;\n"
165818da9bbSKrasimir Georgiev "using A;\n"
166818da9bbSKrasimir Georgiev "using a;\n"
167818da9bbSKrasimir Georgiev "using b;\n"
168818da9bbSKrasimir Georgiev "using b;\n"
169818da9bbSKrasimir Georgiev "using B;\n"
170818da9bbSKrasimir Georgiev "using b;\n"
171818da9bbSKrasimir Georgiev "using A;\n"
172818da9bbSKrasimir Georgiev "using a;"));
173818da9bbSKrasimir Georgiev }
174818da9bbSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,SortsMultipleTopLevelDeclarations)175b03877abSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, SortsMultipleTopLevelDeclarations) {
176b03877abSKrasimir Georgiev EXPECT_EQ("using a;\n"
177b03877abSKrasimir Georgiev "using b;\n"
178b03877abSKrasimir Georgiev "using c;\n"
179b03877abSKrasimir Georgiev "using d;\n"
180b03877abSKrasimir Georgiev "using e;",
181b03877abSKrasimir Georgiev sortUsingDeclarations("using d;\n"
182b03877abSKrasimir Georgiev "using b;\n"
183b03877abSKrasimir Georgiev "using e;\n"
184b03877abSKrasimir Georgiev "using a;\n"
185b03877abSKrasimir Georgiev "using c;"));
186b03877abSKrasimir Georgiev
187b03877abSKrasimir Georgiev EXPECT_EQ("#include <iostream>\n"
188b03877abSKrasimir Georgiev "using std::cin;\n"
189b03877abSKrasimir Georgiev "using std::cout;\n"
190818da9bbSKrasimir Georgiev "using ::std::endl;\n"
191b03877abSKrasimir Georgiev "int main();",
192b03877abSKrasimir Georgiev sortUsingDeclarations("#include <iostream>\n"
193b03877abSKrasimir Georgiev "using std::cout;\n"
194b03877abSKrasimir Georgiev "using ::std::endl;\n"
195818da9bbSKrasimir Georgiev "using std::cin;\n"
196b03877abSKrasimir Georgiev "int main();"));
197b03877abSKrasimir Georgiev }
198b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,BreaksOnEmptyLines)199b03877abSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, BreaksOnEmptyLines) {
200b03877abSKrasimir Georgiev EXPECT_EQ("using b;\n"
201b03877abSKrasimir Georgiev "using c;\n"
202b03877abSKrasimir Georgiev "\n"
203b03877abSKrasimir Georgiev "using a;\n"
204b03877abSKrasimir Georgiev "using d;",
205b03877abSKrasimir Georgiev sortUsingDeclarations("using c;\n"
206b03877abSKrasimir Georgiev "using b;\n"
207b03877abSKrasimir Georgiev "\n"
208b03877abSKrasimir Georgiev "using d;\n"
209b03877abSKrasimir Georgiev "using a;"));
210b03877abSKrasimir Georgiev }
211b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,BreaksOnUsingNamespace)212b03877abSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, BreaksOnUsingNamespace) {
213b03877abSKrasimir Georgiev EXPECT_EQ("using b;\n"
214b03877abSKrasimir Georgiev "using namespace std;\n"
215b03877abSKrasimir Georgiev "using a;",
216b03877abSKrasimir Georgiev sortUsingDeclarations("using b;\n"
217b03877abSKrasimir Georgiev "using namespace std;\n"
218b03877abSKrasimir Georgiev "using a;"));
219b03877abSKrasimir Georgiev }
220b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,KeepsUsingDeclarationsInPPDirectives)221b03877abSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, KeepsUsingDeclarationsInPPDirectives) {
222b03877abSKrasimir Georgiev EXPECT_EQ("#define A \\\n"
223b03877abSKrasimir Georgiev "using b;\\\n"
224b03877abSKrasimir Georgiev "using a;",
225b03877abSKrasimir Georgiev sortUsingDeclarations("#define A \\\n"
226b03877abSKrasimir Georgiev "using b;\\\n"
227b03877abSKrasimir Georgiev "using a;"));
228b03877abSKrasimir Georgiev }
229b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,KeepsTypeAliases)230b03877abSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, KeepsTypeAliases) {
231b03877abSKrasimir Georgiev auto Code = "struct C { struct B { struct A; }; };\n"
232b03877abSKrasimir Georgiev "using B = C::B;\n"
233b03877abSKrasimir Georgiev "using A = B::A;";
234b03877abSKrasimir Georgiev EXPECT_EQ(Code, sortUsingDeclarations(Code));
235b03877abSKrasimir Georgiev }
236b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,MovesTrailingCommentsWithDeclarations)237b03877abSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, MovesTrailingCommentsWithDeclarations) {
238b03877abSKrasimir Georgiev EXPECT_EQ("using a; // line a1\n"
239b03877abSKrasimir Georgiev "using b; /* line b1\n"
240b03877abSKrasimir Georgiev " * line b2\n"
241b03877abSKrasimir Georgiev " * line b3 */\n"
242b03877abSKrasimir Georgiev "using c; // line c1\n"
243b03877abSKrasimir Georgiev " // line c2",
244b03877abSKrasimir Georgiev sortUsingDeclarations("using c; // line c1\n"
245b03877abSKrasimir Georgiev " // line c2\n"
246b03877abSKrasimir Georgiev "using b; /* line b1\n"
247b03877abSKrasimir Georgiev " * line b2\n"
248b03877abSKrasimir Georgiev " * line b3 */\n"
249b03877abSKrasimir Georgiev "using a; // line a1"));
250b03877abSKrasimir Georgiev }
251b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,SortsInStructScope)252b03877abSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, SortsInStructScope) {
253b03877abSKrasimir Georgiev EXPECT_EQ("struct pt3 : pt2 {\n"
254b03877abSKrasimir Georgiev " using pt2::x;\n"
255b03877abSKrasimir Georgiev " using pt2::y;\n"
256b03877abSKrasimir Georgiev " float z;\n"
257b03877abSKrasimir Georgiev "};",
258b03877abSKrasimir Georgiev sortUsingDeclarations("struct pt3 : pt2 {\n"
259b03877abSKrasimir Georgiev " using pt2::y;\n"
260b03877abSKrasimir Georgiev " using pt2::x;\n"
261b03877abSKrasimir Georgiev " float z;\n"
262b03877abSKrasimir Georgiev "};"));
263b03877abSKrasimir Georgiev }
264b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,KeepsOperators)265b03877abSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, KeepsOperators) {
266b03877abSKrasimir Georgiev EXPECT_EQ("using a::operator();\n"
267b03877abSKrasimir Georgiev "using a::operator-;\n"
268b03877abSKrasimir Georgiev "using a::operator+;",
269b03877abSKrasimir Georgiev sortUsingDeclarations("using a::operator();\n"
270b03877abSKrasimir Georgiev "using a::operator-;\n"
271b03877abSKrasimir Georgiev "using a::operator+;"));
272b03877abSKrasimir Georgiev }
273b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,SortsUsingDeclarationsInsideNamespaces)274b03877abSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, SortsUsingDeclarationsInsideNamespaces) {
275b03877abSKrasimir Georgiev EXPECT_EQ("namespace A {\n"
276b03877abSKrasimir Georgiev "struct B;\n"
277b03877abSKrasimir Georgiev "struct C;\n"
278b03877abSKrasimir Georgiev "}\n"
279b03877abSKrasimir Georgiev "namespace X {\n"
280b03877abSKrasimir Georgiev "using A::B;\n"
281b03877abSKrasimir Georgiev "using A::C;\n"
282b03877abSKrasimir Georgiev "}",
283b03877abSKrasimir Georgiev sortUsingDeclarations("namespace A {\n"
284b03877abSKrasimir Georgiev "struct B;\n"
285b03877abSKrasimir Georgiev "struct C;\n"
286b03877abSKrasimir Georgiev "}\n"
287b03877abSKrasimir Georgiev "namespace X {\n"
288b03877abSKrasimir Georgiev "using A::C;\n"
289b03877abSKrasimir Georgiev "using A::B;\n"
290b03877abSKrasimir Georgiev "}"));
291b03877abSKrasimir Georgiev }
292b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,SupportsClangFormatOff)293b03877abSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, SupportsClangFormatOff) {
294b03877abSKrasimir Georgiev EXPECT_EQ("// clang-format off\n"
295b03877abSKrasimir Georgiev "using b;\n"
296b03877abSKrasimir Georgiev "using a;\n"
297b03877abSKrasimir Georgiev "// clang-format on\n"
298b03877abSKrasimir Georgiev "using c;\n"
299b03877abSKrasimir Georgiev "using d;",
300b03877abSKrasimir Georgiev sortUsingDeclarations("// clang-format off\n"
301b03877abSKrasimir Georgiev "using b;\n"
302b03877abSKrasimir Georgiev "using a;\n"
303b03877abSKrasimir Georgiev "// clang-format on\n"
304b03877abSKrasimir Georgiev "using d;\n"
305b03877abSKrasimir Georgiev "using c;"));
306b03877abSKrasimir Georgiev }
307b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,SortsPartialRangeOfUsingDeclarations)308b03877abSKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, SortsPartialRangeOfUsingDeclarations) {
3099da65aa8SKrasimir Georgiev // Sorts the whole block of using declarations surrounding the range.
3109da65aa8SKrasimir Georgiev EXPECT_EQ("using a;\n"
3119da65aa8SKrasimir Georgiev "using b;\n"
312b03877abSKrasimir Georgiev "using c;",
313b03877abSKrasimir Georgiev sortUsingDeclarations("using b;\n"
314b03877abSKrasimir Georgiev "using c;\n" // starts at offset 10
315b03877abSKrasimir Georgiev "using a;",
316b03877abSKrasimir Georgiev {tooling::Range(10, 15)}));
3179da65aa8SKrasimir Georgiev EXPECT_EQ("using a;\n"
3189da65aa8SKrasimir Georgiev "using b;\n"
3199da65aa8SKrasimir Georgiev "using c;\n"
3209da65aa8SKrasimir Georgiev "using A = b;",
3219da65aa8SKrasimir Georgiev sortUsingDeclarations("using b;\n"
3229da65aa8SKrasimir Georgiev "using c;\n" // starts at offset 10
3239da65aa8SKrasimir Georgiev "using a;\n"
3249da65aa8SKrasimir Georgiev "using A = b;",
3259da65aa8SKrasimir Georgiev {tooling::Range(10, 15)}));
3269da65aa8SKrasimir Georgiev
3279da65aa8SKrasimir Georgiev EXPECT_EQ("using d;\n"
3289da65aa8SKrasimir Georgiev "using c;\n"
3299da65aa8SKrasimir Georgiev "\n"
3309da65aa8SKrasimir Georgiev "using a;\n"
3319da65aa8SKrasimir Georgiev "using b;\n"
3329da65aa8SKrasimir Georgiev "\n"
3339da65aa8SKrasimir Georgiev "using f;\n"
3349da65aa8SKrasimir Georgiev "using e;",
3359da65aa8SKrasimir Georgiev sortUsingDeclarations("using d;\n"
3369da65aa8SKrasimir Georgiev "using c;\n"
3379da65aa8SKrasimir Georgiev "\n"
3389da65aa8SKrasimir Georgiev "using b;\n" // starts at offset 19
3399da65aa8SKrasimir Georgiev "using a;\n"
3409da65aa8SKrasimir Georgiev "\n"
3419da65aa8SKrasimir Georgiev "using f;\n"
3429da65aa8SKrasimir Georgiev "using e;",
3439da65aa8SKrasimir Georgiev {tooling::Range(19, 1)}));
344b03877abSKrasimir Georgiev }
345b03877abSKrasimir Georgiev
TEST_F(UsingDeclarationsSorterTest,SortsUsingDeclarationsWithLeadingkComments)346*ece7e95fSmydeveloperday TEST_F(UsingDeclarationsSorterTest,
347*ece7e95fSmydeveloperday SortsUsingDeclarationsWithLeadingkComments) {
348028d815eSDaniel Jasper EXPECT_EQ("/* comment */ using a;\n"
349028d815eSDaniel Jasper "/* comment */ using b;",
350028d815eSDaniel Jasper sortUsingDeclarations("/* comment */ using b;\n"
351028d815eSDaniel Jasper "/* comment */ using a;"));
352028d815eSDaniel Jasper }
353028d815eSDaniel Jasper
TEST_F(UsingDeclarationsSorterTest,DeduplicatesUsingDeclarations)354f09c4285SKrasimir Georgiev TEST_F(UsingDeclarationsSorterTest, DeduplicatesUsingDeclarations) {
355f09c4285SKrasimir Georgiev EXPECT_EQ("using a;\n"
356f09c4285SKrasimir Georgiev "using b;\n"
357f09c4285SKrasimir Georgiev "using c;\n"
358f09c4285SKrasimir Georgiev "\n"
359f09c4285SKrasimir Georgiev "using a;\n"
360f09c4285SKrasimir Georgiev "using e;",
361f09c4285SKrasimir Georgiev sortUsingDeclarations("using c;\n"
362f09c4285SKrasimir Georgiev "using a;\n"
363f09c4285SKrasimir Georgiev "using b;\n"
364f09c4285SKrasimir Georgiev "using a;\n"
365f09c4285SKrasimir Georgiev "using b;\n"
366f09c4285SKrasimir Georgiev "\n"
367f09c4285SKrasimir Georgiev "using e;\n"
368f09c4285SKrasimir Georgiev "using a;\n"
369f09c4285SKrasimir Georgiev "using e;"));
370f09c4285SKrasimir Georgiev }
371f09c4285SKrasimir Georgiev
372b03877abSKrasimir Georgiev } // end namespace
373b03877abSKrasimir Georgiev } // end namespace format
374b03877abSKrasimir Georgiev } // end namespace clang
375