File indexing completed on 2024-05-12 04:38:19
0001 /* 0002 SPDX-FileCopyrightText: 2021 Igor Kushnir <igorkuo@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "languagecontrollertestbase.h" 0008 0009 #include "testfilepaths.h" 0010 0011 #include <ilanguagecontroller.h> 0012 #include <language/backgroundparser/backgroundparser.h> 0013 #include <languagecontroller.h> 0014 #include <shell/core.h> 0015 #include <tests/autotestshell.h> 0016 #include <tests/testcore.h> 0017 #include <tests/testhelpers.h> 0018 0019 #include <QByteArray> 0020 #include <QFileInfo> 0021 #include <QString> 0022 #include <QTest> 0023 #include <QUrl> 0024 0025 using namespace KDevelop; 0026 0027 namespace { 0028 QUrl testUrl(const QString& filename) 0029 { 0030 return QUrl::fromLocalFile(filename); 0031 } 0032 0033 QUrl existentTestUrl(const QString& filename) 0034 { 0035 const QString filePath = TEST_FILES_DIR "/" + filename; 0036 QVERIFY_RETURN(QFileInfo::exists(filePath), QUrl{}); 0037 return QUrl::fromLocalFile(filePath); 0038 } 0039 } 0040 0041 LanguageControllerTestBase::LanguageControllerTestBase(QObject* parent) 0042 : QObject(parent) 0043 , m_differentLanguagesUrls{ 0044 {testUrl("plus.cc"), "clang"}, 0045 {testUrl("project.cmake"), "CMake"}, 0046 {testUrl("patch.diff"), "diff"}, 0047 {testUrl("gui.qml"), "qml/js"}, 0048 } 0049 { 0050 } 0051 0052 void LanguageControllerTestBase::initTestCase() 0053 { 0054 AutoTestShell::init({"kdevclangsupport", "kdevpatchreview", "kdevqmljs", 0055 "KDevCMakeManager", "KDevCMakeBuilder", "KDevMakeBuilder", "KDevStandardOutputView"}); 0056 TestCore::initialize(); 0057 m_subject = Core::self()->languageController(); 0058 } 0059 0060 void LanguageControllerTestBase::init() 0061 { 0062 Core::self()->languageControllerInternal()->initialize(); 0063 m_subject->backgroundParser()->suspend(); 0064 } 0065 0066 void LanguageControllerTestBase::cleanup() 0067 { 0068 Core::self()->languageControllerInternal()->cleanup(); 0069 } 0070 0071 void LanguageControllerTestBase::cleanupTestCase() 0072 { 0073 TestCore::shutdown(); 0074 } 0075 0076 void LanguageControllerTestBase::fillLanguageControllerMimeTypeCache() const 0077 { 0078 for (const auto& url : m_differentLanguagesUrls) { 0079 const auto languages = m_subject->languagesForUrl(url.url); 0080 QCOMPARE(languages.size(), 1); 0081 QCOMPARE(languages.back()->name(), url.languageName); 0082 } 0083 } 0084 0085 void LanguageControllerTestBase::matchingLanguagesForUrlInBackgroundThreadTestData() const 0086 { 0087 QTest::addColumn<QUrl>("url"); 0088 QTest::addColumn<QString>("languageName"); 0089 0090 QTest::newRow("CMakeLists") << testUrl("CMakeLists.txt") << "CMake"; 0091 QTest::newRow("cmakelists wrong case") << testUrl("cmakelists.TXT") << "CMake"; 0092 0093 QTest::newRow("lower-case") << testUrl("x.cpp") << "clang"; 0094 QTest::newRow("upper-case") << testUrl("Y.CPP") << "clang"; 0095 QTest::newRow("mixed-case") << testUrl("aBc.CpP") << "clang"; 0096 0097 QTest::newRow(".C") << testUrl("ambiguous.C") << "clang"; 0098 QTest::newRow(".cl") << testUrl("Open.cl") << "clang"; 0099 0100 QTest::newRow("existent C with extension") << existentTestUrl("t.c") << "clang"; 0101 0102 for (const auto& url : m_differentLanguagesUrls) { 0103 const auto filename = url.url.fileName(); 0104 const auto extension = filename.mid(filename.lastIndexOf('.')); 0105 QTest::newRow(extension.toUtf8().constData()) << url.url << url.languageName; 0106 } 0107 } 0108 0109 void LanguageControllerTestBase::matchingLanguagesForUrlTestData() const 0110 { 0111 matchingLanguagesForUrlInBackgroundThreadTestData(); 0112 0113 QTest::newRow("existent C w/o extension") << existentTestUrl("X") << "clang"; 0114 QTest::newRow("existent patch w/o extension") << existentTestUrl("y") << "diff"; 0115 } 0116 0117 void LanguageControllerTestBase::nonmatchingLanguagesForUrlTestData() 0118 { 0119 QTest::addColumn<QUrl>("url"); 0120 0121 QTest::newRow("empty") << testUrl(QString()); 0122 QTest::newRow("archive") << testUrl("a.tar.gz"); 0123 QTest::newRow("OpenDocument Text") << testUrl("b.odt"); 0124 QTest::newRow("existent archive with extension") << existentTestUrl("N.tar.gz"); 0125 QTest::newRow("existent archive w/o extension") << existentTestUrl("z"); 0126 } 0127 0128 #include "moc_languagecontrollertestbase.cpp"