1 //===-- clang-doc/GeneratorTest.cpp ---------------------------------------===// 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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "ClangDocTest.h" 10 #include "Generators.h" 11 #include "Representation.h" 12 #include "Serialize.h" 13 #include "gtest/gtest.h" 14 15 namespace clang { 16 namespace doc { 17 18 TEST(GeneratorTest, emitIndex) { 19 Index Idx; 20 auto InfoA = std::make_unique<Info>(); 21 InfoA->Name = "A"; 22 InfoA->USR = serialize::hashUSR("1"); 23 Generator::addInfoToIndex(Idx, InfoA.get()); 24 auto InfoC = std::make_unique<Info>(); 25 InfoC->Name = "C"; 26 InfoC->USR = serialize::hashUSR("3"); 27 Reference RefB = Reference("B"); 28 RefB.USR = serialize::hashUSR("2"); 29 InfoC->Namespace = {std::move(RefB)}; 30 Generator::addInfoToIndex(Idx, InfoC.get()); 31 auto InfoD = std::make_unique<Info>(); 32 InfoD->Name = "D"; 33 InfoD->USR = serialize::hashUSR("4"); 34 auto InfoF = std::make_unique<Info>(); 35 InfoF->Name = "F"; 36 InfoF->USR = serialize::hashUSR("6"); 37 Reference RefD = Reference("D"); 38 RefD.USR = serialize::hashUSR("4"); 39 Reference RefE = Reference("E"); 40 RefE.USR = serialize::hashUSR("5"); 41 InfoF->Namespace = {std::move(RefE), std::move(RefD)}; 42 Generator::addInfoToIndex(Idx, InfoF.get()); 43 auto InfoG = std::make_unique<Info>(InfoType::IT_namespace); 44 Generator::addInfoToIndex(Idx, InfoG.get()); 45 46 Index ExpectedIdx; 47 Index IndexA; 48 IndexA.Name = "A"; 49 ExpectedIdx.Children.emplace_back(std::move(IndexA)); 50 Index IndexB; 51 IndexB.Name = "B"; 52 Index IndexC; 53 IndexC.Name = "C"; 54 IndexB.Children.emplace_back(std::move(IndexC)); 55 ExpectedIdx.Children.emplace_back(std::move(IndexB)); 56 Index IndexD; 57 IndexD.Name = "D"; 58 Index IndexE; 59 IndexE.Name = "E"; 60 Index IndexF; 61 IndexF.Name = "F"; 62 IndexE.Children.emplace_back(std::move(IndexF)); 63 IndexD.Children.emplace_back(std::move(IndexE)); 64 ExpectedIdx.Children.emplace_back(std::move(IndexD)); 65 Index IndexG; 66 IndexG.Name = "GlobalNamespace"; 67 IndexG.RefType = InfoType::IT_namespace; 68 ExpectedIdx.Children.emplace_back(std::move(IndexG)); 69 70 CheckIndex(ExpectedIdx, Idx); 71 } 72 73 TEST(GeneratorTest, sortIndex) { 74 Index Idx; 75 Idx.Children.emplace_back("b"); 76 Idx.Children.emplace_back("aA"); 77 Idx.Children.emplace_back("aa"); 78 Idx.Children.emplace_back("A"); 79 Idx.Children.emplace_back("a"); 80 Idx.sort(); 81 82 Index ExpectedIdx; 83 ExpectedIdx.Children.emplace_back("a"); 84 ExpectedIdx.Children.emplace_back("A"); 85 ExpectedIdx.Children.emplace_back("aa"); 86 ExpectedIdx.Children.emplace_back("aA"); 87 ExpectedIdx.Children.emplace_back("b"); 88 89 CheckIndex(ExpectedIdx, Idx); 90 } 91 92 } // namespace doc 93 } // namespace clang 94