TEST_F(ClangdVFSTest, SearchLibDir) { // Checks that searches for GCC installation is done through vfs. MockFSProvider FS; ErrorCheckingDiagConsumer DiagConsumer; MockCompilationDatabase CDB; CDB.ExtraClangFlags.insert(CDB.ExtraClangFlags.end(), {"-xc++", "-target", "x86_64-linux-unknown", "-m64", "--gcc-toolchain=/randomusr", "-stdlib=libstdc++"}); ClangdServer Server(CDB, FS, DiagConsumer, ClangdServer::optsForTest()); // Just a random gcc version string SmallString<8> Version("4.9.3"); // A lib dir for gcc installation SmallString<64> LibDir("/randomusr/lib/gcc/x86_64-linux-gnu"); llvm::sys::path::append(LibDir, Version); // Put crtbegin.o into LibDir/64 to trick clang into thinking there's a gcc // installation there. SmallString<64> DummyLibFile; llvm::sys::path::append(DummyLibFile, LibDir, "64", "crtbegin.o"); FS.Files[DummyLibFile] = ""; SmallString<64> IncludeDir("/randomusr/include/c++"); llvm::sys::path::append(IncludeDir, Version); SmallString<64> StringPath; llvm::sys::path::append(StringPath, IncludeDir, "string"); FS.Files[StringPath] = "class mock_string {};"; auto FooCpp = testPath("foo.cpp"); const auto SourceContents = R"cpp( #include <string> mock_string x; )cpp"; FS.Files[FooCpp] = SourceContents; runAddDocument(Server, FooCpp, SourceContents); EXPECT_FALSE(DiagConsumer.hadErrorInLastDiags()); const auto SourceContentsWithError = R"cpp( #include <string> std::string x; )cpp";
// ---------------------------------------------------- // Put all available libraries into ComboBox. void QucsLib::putLibrariesIntoCombobox() { Library->clear(); UserLibCount = 0; QStringList LibFiles; QStringList::iterator it; if(UserLibDir.cd(".")) { // user library directory exists ? LibFiles = UserLibDir.entryList("*.lib", QDir::Files, QDir::Name); UserLibCount = LibFiles.count(); for(it = LibFiles.begin(); it != LibFiles.end(); it++) Library->insertItem((*it).left((*it).length()-4)); } QDir LibDir(QucsSettings.LibDir); LibFiles = LibDir.entryList("*.lib", QDir::Files, QDir::Name); for(it = LibFiles.begin(); it != LibFiles.end(); it++) Library->insertItem((*it).left((*it).length()-4)); slotSelectLibrary(0); }
// ************************************************************ void SearchDialog::slotSearch() { if(SearchEdit->text().isEmpty()) { reject(); return; } bool findComponent = false; QDir LibDir(QucsSettings.LibDir); QStringList LibFiles = LibDir.entryList(QStringList("*.lib"), QDir::Files, QDir::Name); QFile File; QTextStream ReadWhole; QString LibraryString, LibName, CompName; QStringList::iterator it; int Start, End, NameStart, NameEnd; for(it = LibFiles.begin(); it != LibFiles.end(); it++) { // all library files File.setFileName(QucsSettings.LibDir + (*it)); if(!File.open(QIODevice::ReadOnly)) continue; ReadWhole.setDevice(&File); LibraryString = ReadWhole.readAll(); File.close(); Start = LibraryString.indexOf("<Qucs Library "); if(Start < 0) continue; End = LibraryString.indexOf('>', Start); if(End < 0) continue; LibName = LibraryString.mid(Start, End-Start).section('"', 1, 1); // check all components of the current library while((Start=LibraryString.indexOf("\n<Component ", Start)) > 0) { Start++; NameStart = Start + 11; NameEnd = LibraryString.indexOf('>', NameStart); if(NameEnd < 0) continue; CompName = LibraryString.mid(NameStart, NameEnd-NameStart); End = LibraryString.indexOf("\n</Component>", NameEnd); if(End < 0) continue; End += 13; // does search criterion match ? if(CompName.indexOf(SearchEdit->text()) >= 0) { if(!findComponent) { ParentDialog->DefaultSymbol = ""; ParentDialog->CompList->clear(); ParentDialog->LibraryComps.clear(); } findComponent = true; ParentDialog->CompList->addItem(CompName); ParentDialog->LibraryComps.append( LibName+'\n'+LibraryString.mid(Start, End-Start)); } Start = End; } } if(findComponent) { End = ParentDialog->Library->count(); if(ParentDialog->Library->itemText(End-1) != tr("Search result")) ParentDialog->Library->addItem(tr("Search result")); ParentDialog->Library->setCurrentIndex(End); reject(); } else accept(); }