diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt
index 69533cfff..285359faa 100644
--- a/src/libcalamares/CMakeLists.txt
+++ b/src/libcalamares/CMakeLists.txt
@@ -215,10 +215,29 @@ calamares_add_test(
${geoip_src}
)
+# Build up translations for this one test
+set( trans_file "localetest" )
+set( trans_infile ${CMAKE_CURRENT_BINARY_DIR}/${trans_file}.qrc )
+set( trans_outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${trans_file}.cxx )
+set( calamares_i18n_qrc_content "localetest_nl.qm" )
+configure_file( ${CMAKE_SOURCE_DIR}/lang/calamares_i18n.qrc.in ${trans_infile} @ONLY )
+
+qt5_add_translation(QM_FILES "${CMAKE_CURRENT_SOURCE_DIR}/testdata/localetest_nl.ts")
+
+# Run the resource compiler (rcc_options should already be set)
+add_custom_command(
+ OUTPUT ${trans_outfile}
+ COMMAND "${Qt5Core_RCC_EXECUTABLE}"
+ ARGS ${rcc_options} --format-version 1 -name ${trans_file} -o ${trans_outfile} ${trans_infile}
+ MAIN_DEPENDENCY ${trans_infile}
+ DEPENDS ${QM_FILES}
+)
+
calamares_add_test(
libcalamareslocaletest
SOURCES
locale/Tests.cpp
+ ${trans_outfile}
)
calamares_add_test(
diff --git a/src/libcalamares/locale/Tests.cpp b/src/libcalamares/locale/Tests.cpp
index b701ce849..05e8f610c 100644
--- a/src/libcalamares/locale/Tests.cpp
+++ b/src/libcalamares/locale/Tests.cpp
@@ -16,6 +16,7 @@
#include "CalamaresVersion.h"
#include "GlobalStorage.h"
#include "utils/Logger.h"
+#include "utils/Retranslator.h"
#include
@@ -33,6 +34,7 @@ private Q_SLOTS:
void testTranslatableLanguages();
void testTranslatableConfig1();
void testTranslatableConfig2();
+ void testTranslatableConfigContext();
void testLanguageScripts();
void testEsperanto();
@@ -246,6 +248,32 @@ LocaleTests::testTranslatableConfig2()
QCOMPARE( ts3.count(), 1 ); // The empty string
}
+void
+LocaleTests::testTranslatableConfigContext()
+{
+ using TS = CalamaresUtils::Locale::TranslatedString;
+
+ const QString original( "Quit" );
+ TS quitUntranslated( original );
+ TS quitTranslated( original, metaObject()->className() );
+
+ QCOMPARE( quitUntranslated.get(), original );
+ QCOMPARE( quitTranslated.get(), original );
+
+ // Load translation data from QRC
+ QVERIFY( QFile::exists( ":/lang/localetest_nl.qm" ) );
+ QTranslator t;
+ QVERIFY( t.load( QString( ":/lang/localetest_nl" ) ) );
+ QCoreApplication::installTranslator( &t );
+
+ // Translation doesn't affect the one without context
+ QCOMPARE( quitUntranslated.get(), original );
+ // But the translation **does** affect this class' context
+ QCOMPARE( quitTranslated.get(), QStringLiteral( "Ophouden" ) );
+ QCOMPARE( tr( "Quit" ), QStringLiteral( "Ophouden" ) );
+}
+
+
void
LocaleTests::testRegions()
{
diff --git a/src/libcalamares/testdata/localetest_nl.ts b/src/libcalamares/testdata/localetest_nl.ts
new file mode 100644
index 000000000..65a3a284b
--- /dev/null
+++ b/src/libcalamares/testdata/localetest_nl.ts
@@ -0,0 +1,15 @@
+
+
+
+
+
+ LocaleTests
+
+
+ Quit
+ Ophouden
+
+
+