diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ECMPoQmToolsTest/CMakeLists.txt | 44 | ||||
| -rw-r--r-- | tests/ECMPoQmToolsTest/check.cmake.in | 3 | ||||
| -rw-r--r-- | tests/ECMPoQmToolsTest/check_conf.cmake.in | 2 | ||||
| -rw-r--r-- | tests/ECMPoQmToolsTest/tr_thread_test.cpp | 69 | ||||
| -rw-r--r-- | tests/ECMPoQmToolsTest/tr_thread_test_module.cpp | 12 | 
5 files changed, 128 insertions, 2 deletions
| diff --git a/tests/ECMPoQmToolsTest/CMakeLists.txt b/tests/ECMPoQmToolsTest/CMakeLists.txt index 73d2b427..2cd76f8f 100644 --- a/tests/ECMPoQmToolsTest/CMakeLists.txt +++ b/tests/ECMPoQmToolsTest/CMakeLists.txt @@ -82,7 +82,7 @@ target_link_libraries(tr_test PRIVATE Qt5::Core)  # -# single-threaded test (different catalog name) +# single-threaded test (different catalog name, automoc)  #  # This is to check we don't overwrite previously-generated files.  set(tr_test_2_SRCS @@ -90,15 +90,55 @@ set(tr_test_2_SRCS  )  ecm_create_qm_loader(tr_test_2_SRCS catalog2)  add_executable(tr_test_2 ${tr_test_2_SRCS}) +set_target_properties(tr_test_2 PROPERTIES AUTOMOC ON) +target_include_directories(tr_test_2 PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")  target_link_libraries(tr_test_2 PRIVATE Qt5::Core)  # +# module for tr_thread_test +# +add_library(tr_thread_module MODULE tr_thread_test_module.cpp ${QMLOADER_FILES}) +target_link_libraries(tr_thread_module PRIVATE Qt5::Core) + + +# +# loading a module on a thread other than the main thread +# (automoc) +# +set(tr_thread_test_SRCS +    tr_thread_test.cpp +) +ecm_create_qm_loader(tr_thread_test_SRCS catalog) +add_executable(tr_thread_test ${tr_thread_test_SRCS}) +set_target_properties(tr_thread_test PROPERTIES AUTOMOC ON) +target_include_directories(tr_thread_test PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") +target_compile_definitions(tr_thread_test PRIVATE "MODULE_PATH=\"$<TARGET_FILE:tr_thread_module>\"") +target_link_libraries(tr_thread_test PRIVATE Qt5::Core) + + +# +# loading a module on a thread other than the main thread +# (different catalog, no AUTOMOC) +# +qt5_generate_moc(tr_thread_test.cpp "${CMAKE_CURRENT_BINARY_DIR}/tr_thread_test.moc") +set(tr_thread_test_2_SRCS +    tr_thread_test.cpp +    "${CMAKE_CURRENT_BINARY_DIR}/tr_thread_test.moc" +) +ecm_create_qm_loader(tr_thread_test_2_SRCS catalog2) +add_executable(tr_thread_test_2 ${tr_thread_test_2_SRCS}) +target_include_directories(tr_thread_test_2 PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") +target_compile_definitions(tr_thread_test_2 PRIVATE "MODULE_PATH=\"$<TARGET_FILE:tr_thread_module>\"") +target_link_libraries(tr_thread_test_2 PRIVATE Qt5::Core) + + +#  # call to ecm_create_qm_loader is in a different CMakeLists.txt to where  # the target it is added to is defined  #  # This is not something we want people to do, but it's unfortunately something -# projects have done and we need to keep them building +# projects have done and we need to keep them building.  unset(QMLOADER_FILES)  ecm_create_qm_loader(QMLOADER_FILES catalog)  assert_var_defined(QMLOADER_FILES) diff --git a/tests/ECMPoQmToolsTest/check.cmake.in b/tests/ECMPoQmToolsTest/check.cmake.in index 5329b78d..4fe2ac33 100644 --- a/tests/ECMPoQmToolsTest/check.cmake.in +++ b/tests/ECMPoQmToolsTest/check.cmake.in @@ -87,6 +87,9 @@ if("@CMAKE_SYSTEM_NAME@" STREQUAL "Linux")      check_translations(TR_TEST_2 "${TR_TEST_2_EXEC}" catalog2)      check_translations(TR_TEST_SUBDIR "${TR_TEST_SUBDIR_EXEC}" catalog) + +    check_translations(TR_THREAD_TEST "${TR_THREAD_TEST_EXEC}" catalog) +    check_translations(TR_THREAD_TEST_2 "${TR_THREAD_TEST_2_EXEC}" catalog2)  endif()  if (fail) diff --git a/tests/ECMPoQmToolsTest/check_conf.cmake.in b/tests/ECMPoQmToolsTest/check_conf.cmake.in index 7bd11c36..a752d5bd 100644 --- a/tests/ECMPoQmToolsTest/check_conf.cmake.in +++ b/tests/ECMPoQmToolsTest/check_conf.cmake.in @@ -1,3 +1,5 @@  set(TR_TEST_EXEC "$<TARGET_FILE:tr_test>")  set(TR_TEST_2_EXEC "$<TARGET_FILE:tr_test_2>")  set(TR_TEST_SUBDIR_EXEC "$<TARGET_FILE:tr_test_subdir>") +set(TR_THREAD_TEST_EXEC "$<TARGET_FILE:tr_thread_test>") +set(TR_THREAD_TEST_2_EXEC "$<TARGET_FILE:tr_thread_test_2>") diff --git a/tests/ECMPoQmToolsTest/tr_thread_test.cpp b/tests/ECMPoQmToolsTest/tr_thread_test.cpp new file mode 100644 index 00000000..40e4d1eb --- /dev/null +++ b/tests/ECMPoQmToolsTest/tr_thread_test.cpp @@ -0,0 +1,69 @@ +#include <QCoreApplication> +#include <QLibrary> +#include <QMetaObject> +#include <QThread> + +class Thread : public QThread +{ +    Q_OBJECT + +    QLibrary *m_lib; + +public: +    Thread() +        : m_lib(0) +    {} +    ~Thread() +    { +        delete m_lib; +    } + +Q_SIGNALS: +    void libraryLoaded(); + +public Q_SLOTS: +    void printStrings() +    { +        Q_ASSERT(QThread::currentThread() == QCoreApplication::instance()->thread()); + +        QFunctionPointer print_strings = m_lib->resolve("print_strings"); +        if (print_strings) { +            print_strings(); +        } else { +            qFatal("Could not resolve print_strings: %s", qPrintable(m_lib->errorString())); +        } + +        QCoreApplication::instance()->quit(); +    } +protected: +    void run() +    { +        m_lib = new QLibrary(MODULE_PATH); + +        if (!m_lib->load()) { +            qFatal("Could not load module: %s", m_lib->errorString().toUtf8().data()); +        } + +        // Queue a call to printStrings() on the main event loop (giving the +        // translations a chance to be loaded). +        QMetaObject::invokeMethod(this, "printStrings", Qt::QueuedConnection); +    } +}; + +int main(int argc, char** argv) +{ +    QCoreApplication app(argc, argv); + +    Thread thread; + +    // Start the thread *after* QCoreApplication is started (otherwise the +    // plugin's startup function won't be run on the Thread, and we won't test +    // what we wanted to test). +    QMetaObject::invokeMethod(&thread, "start", Qt::QueuedConnection); + +    app.exec(); + +    return 0; +} + +#include "tr_thread_test.moc" diff --git a/tests/ECMPoQmToolsTest/tr_thread_test_module.cpp b/tests/ECMPoQmToolsTest/tr_thread_test_module.cpp new file mode 100644 index 00000000..b9000ffa --- /dev/null +++ b/tests/ECMPoQmToolsTest/tr_thread_test_module.cpp @@ -0,0 +1,12 @@ +#include <QCoreApplication> +#include <QTextStream> + +#include <stdio.h> + +extern "C" Q_DECL_EXPORT void print_strings() +{ +    QTextStream output(stdout); + +    output << QCoreApplication::translate("testcontext", "test string") << ":"; +    output << QCoreApplication::translate("testcontext", "test plural %n", 0, 5) << '\n'; +} | 
