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"