File indexing completed on 2024-05-12 04:38:20
0001 /* 0002 SPDX-FileCopyrightText: 2021 Igor Kushnir <igorkuo@gmail.com> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "test_languagecontroller.h" 0008 0009 #include <ilanguagecontroller.h> 0010 #include <language/interfaces/ilanguagesupport.h> 0011 #include <tests/testhelpers.h> 0012 0013 #include <QString> 0014 #include <QTest> 0015 #include <QUrl> 0016 0017 #include <future> 0018 0019 void TestLanguageController::testLanguagesForUrlInTheMainThread() 0020 { 0021 QFETCH(QUrl, url); 0022 QFETCH(QString, languageName); 0023 0024 const auto languages = m_subject->languagesForUrl(url); 0025 QCOMPARE(languages.size(), 1); 0026 QCOMPARE(languages.back()->name(), languageName); 0027 } 0028 0029 void TestLanguageController::testLanguagesForUrlInTheMainThread_data() 0030 { 0031 matchingLanguagesForUrlTestData(); 0032 } 0033 0034 void TestLanguageController::testLanguagesForUrlWithCache() 0035 { 0036 QFETCH(QUrl, url); 0037 QFETCH(QString, languageName); 0038 0039 // Add the MIME type to LanguageController's cache for use in the background thread. 0040 const auto languages = m_subject->languagesForUrl(url); 0041 QCOMPARE(languages.size(), 1); 0042 QCOMPARE(languages.back()->name(), languageName); 0043 0044 auto future = std::async(std::launch::async, [&] { 0045 const auto languages = m_subject->languagesForUrl(url); 0046 QCOMPARE_RETURN(languages.size(), 1, false); 0047 QCOMPARE_RETURN(languages.back()->name(), languageName, false); 0048 return true; 0049 }); 0050 QVERIFY(future.get()); 0051 } 0052 0053 void TestLanguageController::testLanguagesForUrlWithCache_data() 0054 { 0055 matchingLanguagesForUrlInBackgroundThreadTestData(); 0056 } 0057 0058 void TestLanguageController::testLanguagesForUrlNoCache() 0059 { 0060 QFETCH(QUrl, url); 0061 0062 auto future = std::async(std::launch::async, [&] { 0063 const auto languages = m_subject->languagesForUrl(url); 0064 // When languagesForUrl() is called from a non-main thread, it cannot 0065 // determine languages for a MIME type without a cache. 0066 QVERIFY_RETURN(languages.empty(), false); 0067 return true; 0068 }); 0069 QVERIFY(future.get()); 0070 } 0071 0072 void TestLanguageController::testLanguagesForUrlNoCache_data() 0073 { 0074 matchingLanguagesForUrlTestData(); 0075 } 0076 0077 void TestLanguageController::testLanguagesForUrlNoMatch() 0078 { 0079 QFETCH(QUrl, url); 0080 0081 const auto languages = m_subject->languagesForUrl(url); 0082 QVERIFY(languages.empty()); 0083 } 0084 0085 void TestLanguageController::testLanguagesForUrlNoMatch_data() 0086 { 0087 nonmatchingLanguagesForUrlTestData(); 0088 } 0089 0090 QTEST_MAIN(TestLanguageController) 0091 0092 #include "moc_test_languagecontroller.cpp"