Browse Source

qgcunittest: add unit test for metadata translation

QGC4.4
Beat Küng 2 years ago
parent
commit
afc1f52302
  1. 2
      UnitTest.qrc
  2. 2
      qgroundcontrol.pro
  3. 1
      src/CMakeLists.txt
  4. 2
      src/qgcunittest/CMakeLists.txt
  5. 46
      src/qgcunittest/ComponentInformationTranslationTest.cc
  6. 34
      src/qgcunittest/ComponentInformationTranslationTest.h
  7. 151
      src/qgcunittest/TranslationTest.json
  8. 186
      src/qgcunittest/TranslationTest_de_DE.ts
  9. 2
      src/qgcunittest/UnitTestList.cc

2
UnitTest.qrc

@ -15,6 +15,8 @@ @@ -15,6 +15,8 @@
<file alias="PolygonBadXml.kml">src/MissionManager/UnitTest/PolygonBadXml.kml</file>
<file alias="PolygonBadCoordinatesNode.kml">src/MissionManager/UnitTest/PolygonBadCoordinatesNode.kml</file>
<file alias="MockLinkOptionsDlg.qml">src/comm/MockLinkOptionsDlg.qml</file>
<file alias="TranslationTest.json">src/qgcunittest/TranslationTest.json</file>
<file alias="TranslationTest_de_DE.ts">src/qgcunittest/TranslationTest_de_DE.ts</file>
</qresource>
<qresource prefix="/qml">
<file alias="QGroundControl/Controls/MockLinkOptionsDlg.qml">src/comm/MockLinkOptionsDlg.qml</file>

2
qgroundcontrol.pro

@ -499,6 +499,7 @@ DebugBuild { PX4FirmwarePlugin { PX4FirmwarePluginFactory { APMFirmwarePlugin { @@ -499,6 +499,7 @@ DebugBuild { PX4FirmwarePlugin { PX4FirmwarePluginFactory { APMFirmwarePlugin {
src/MissionManager/TransectStyleComplexItemTestBase.h \
src/MissionManager/VisualMissionItemTest.h \
src/qgcunittest/ComponentInformationCacheTest.h \
src/qgcunittest/ComponentInformationTranslationTest.h \
src/qgcunittest/GeoTest.h \
src/qgcunittest/MavlinkLogTest.h \
src/qgcunittest/MultiSignalSpy.h \
@ -547,6 +548,7 @@ DebugBuild { PX4FirmwarePlugin { PX4FirmwarePluginFactory { APMFirmwarePlugin { @@ -547,6 +548,7 @@ DebugBuild { PX4FirmwarePlugin { PX4FirmwarePluginFactory { APMFirmwarePlugin {
src/MissionManager/TransectStyleComplexItemTestBase.cc \
src/MissionManager/VisualMissionItemTest.cc \
src/qgcunittest/ComponentInformationCacheTest.cc \
src/qgcunittest/ComponentInformationTranslationTest.cc \
src/qgcunittest/GeoTest.cc \
src/qgcunittest/MavlinkLogTest.cc \
src/qgcunittest/MultiSignalSpy.cc \

1
src/CMakeLists.txt

@ -33,6 +33,7 @@ if(BUILD_TESTING) @@ -33,6 +33,7 @@ if(BUILD_TESTING)
add_subdirectory(qgcunittest)
add_qgc_test(ComponentInformationCacheTest)
add_qgc_test(ComponentInformationTranslationTest)
add_qgc_test(CameraCalcTest)
add_qgc_test(CameraSectionTest)
add_qgc_test(CorridorScanComplexItemTest)

2
src/qgcunittest/CMakeLists.txt

@ -6,6 +6,8 @@ add_library(qgcunittest @@ -6,6 +6,8 @@ add_library(qgcunittest
#FileManagerTest.h
ComponentInformationCacheTest.cc
ComponentInformationCacheTest.h
ComponentInformationTranslationTest.cc
ComponentInformationTranslationTest.h
GeoTest.cc
GeoTest.h
#MainWindowTest.cc

46
src/qgcunittest/ComponentInformationTranslationTest.cc

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
/****************************************************************************
*
* (c) 2021 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "ComponentInformationTranslationTest.h"
void ComponentInformationTranslationTest::_basic_test()
{
QString translationJson = ":/unittest/TranslationTest.json";
QString translationTs = ":/unittest/TranslationTest_de_DE.ts";
ComponentInformationTranslation* translation = new ComponentInformationTranslation(this, new QGCCachedFileDownload(this, ""));
QString tempFilename = translation->translateJsonUsingTS(translationJson, translationTs);
QVERIFY(!tempFilename.isEmpty());
// Compare json files
QFile translationJsonFile(translationJson);
QVERIFY(translationJsonFile.open(QFile::ReadOnly | QFile::Text));
QByteArray expectedOutput = translationJsonFile.readAll().replace("translate-me", "TRANSLATED");
QJsonDocument expectedJson;
readJson(expectedOutput, expectedJson);
QFile tempJson(tempFilename);
QVERIFY(tempJson.open(QFile::ReadOnly | QFile::Text));
QByteArray translatedOutput = tempJson.readAll();
QJsonDocument translatedJson;
readJson(translatedOutput, translatedJson);
QVERIFY(expectedJson == translatedJson);
}
void ComponentInformationTranslationTest::readJson(const QByteArray& bytes, QJsonDocument& jsonDoc)
{
QJsonParseError parseError;
jsonDoc = QJsonDocument::fromJson(bytes, &parseError);
QTEST_ASSERT(parseError.error == QJsonParseError::NoError);
QVERIFY(!jsonDoc.isEmpty());
}

34
src/qgcunittest/ComponentInformationTranslationTest.h

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
/****************************************************************************
*
* (c) 2021 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once
#include "ComponentInformationTranslation.h"
#include "UnitTest.h"
#include <QString>
#include <QJsonDocument>
#include <QByteArray>
class ComponentInformationTranslationTest : public UnitTest
{
Q_OBJECT
public:
ComponentInformationTranslationTest() = default;
virtual ~ComponentInformationTranslationTest() = default;
private slots:
void _basic_test();
private:
void readJson(const QByteArray& bytes, QJsonDocument& jsonDoc);
};

151
src/qgcunittest/TranslationTest.json

@ -0,0 +1,151 @@ @@ -0,0 +1,151 @@
{
"version": 1,
"translation": {
"items": {
"first_element": {
"items": {
"first_list_element": {
"list": {
"key": "name",
"translate": ["label", "text"]
}
},
"second_list_element": {
"list": {
"translate": ["label", "text"]
}
},
"object1": {
"translate": ["list_of_strings"]
},
"object2": {
"items": {
"*": {
"translate": ["name"]
}
}
}
}
},
"second_element": {
"items": {
"*": {
"translate-global": ["category"]
}
}
},
"third_element": {
"items": {
"subgroups": {
"$ref": "#/$defs/recursive-def"
}
}
}
},
"$defs": {
"recursive-def": {
"list": {
"translate": ["description"],
"items": {
"subgroups": {
"$ref": "#/$defs/recursive-def"
}
}
}
}
}
},
"first_element": {
"first_list_element": [
{
"name": "1. element",
"label": "translate-me-list1-1.0",
"text": "translate-me-list1-1.1"
},
{
"name": "2. element",
"label": "translate-me-list1-2.0",
"text": "translate-me-list1-2.1"
},
{
"name": "3. element",
"label": "translate-me-list1-3.0",
"text": "translate-me-list1-3.1"
}
],
"second_list_element": [
{
"name": "1. element",
"label": "translate-me-list2-1.0",
"text": "translate-me-list2-1.1"
},
{
"name": "2. element",
"label": "translate-me-list2-2.0",
"text": "translate-me-list2-2.1"
},
{
"name": "3. element",
"label": "translate-me-list2-3.0",
"text": "translate-me-list2-3.1"
}
],
"object1": {
"list_of_strings": ["translate-me-list-of-strings-1", "translate-me-list-of-strings-2", "translate-me-list-of-strings-3"]
},
"object2": {
"key1": {
"name": "translate-me-name1"
},
"key2": {
"name": "translate-me-name2"
},
"key3": {
"name": "translate-me-name3"
}
}
},
"second_element": {
"element1": {
"category": "translate-me-global-cat1"
},
"element2": {
"category": "translate-me-global-cat2"
},
"element3": {
"category": "translate-me-global-cat1"
},
"element4": {
"category": "translate-me-global-cat2"
},
"element5": {
"category": "translate-me-global-cat <> special symbol"
}
},
"third_element": {
"subgroups": [
{
"description": "translate-me-subgroup1",
"subgroups": [
{
"description": "translate-me-subgroup1-1",
"subgroups": [
{
"description": "translate-me-subgroup1-1-1"
}
]
},
{
"description": "translate-me-subgroup1-2",
"subgroups": [
{
"description": "translate-me-subgroup1-2-1"
}
]
}
]
}
]
}
}

186
src/qgcunittest/TranslationTest_de_DE.ts

@ -0,0 +1,186 @@ @@ -0,0 +1,186 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>/first_element/first_list_element/1. element/label</name>
<message>
<source>translate-me-list1-1.0</source>
<translation>TRANSLATED-list1-1.0</translation>
</message>
</context>
<context>
<name>/first_element/first_list_element/1. element/text</name>
<message>
<source>translate-me-list1-1.1</source>
<translation>TRANSLATED-list1-1.1</translation>
</message>
</context>
<context>
<name>/first_element/first_list_element/2. element/label</name>
<message>
<source>translate-me-list1-2.0</source>
<translation>TRANSLATED-list1-2.0</translation>
</message>
</context>
<context>
<name>/first_element/first_list_element/2. element/text</name>
<message>
<source>translate-me-list1-2.1</source>
<translation>TRANSLATED-list1-2.1</translation>
</message>
</context>
<context>
<name>/first_element/first_list_element/3. element/label</name>
<message>
<source>translate-me-list1-3.0</source>
<translation>TRANSLATED-list1-3.0</translation>
</message>
</context>
<context>
<name>/first_element/first_list_element/3. element/text</name>
<message>
<source>translate-me-list1-3.1</source>
<translation>TRANSLATED-list1-3.1</translation>
</message>
</context>
<context>
<name>/first_element/second_list_element/0/label</name>
<message>
<source>translate-me-list2-1.0</source>
<translation>TRANSLATED-list2-1.0</translation>
</message>
</context>
<context>
<name>/first_element/second_list_element/0/text</name>
<message>
<source>translate-me-list2-1.1</source>
<translation>TRANSLATED-list2-1.1</translation>
</message>
</context>
<context>
<name>/first_element/second_list_element/1/label</name>
<message>
<source>translate-me-list2-2.0</source>
<translation>TRANSLATED-list2-2.0</translation>
</message>
</context>
<context>
<name>/first_element/second_list_element/1/text</name>
<message>
<source>translate-me-list2-2.1</source>
<translation>TRANSLATED-list2-2.1</translation>
</message>
</context>
<context>
<name>/first_element/second_list_element/2/label</name>
<message>
<source>translate-me-list2-3.0</source>
<translation>TRANSLATED-list2-3.0</translation>
</message>
</context>
<context>
<name>/first_element/second_list_element/2/text</name>
<message>
<source>translate-me-list2-3.1</source>
<translation>TRANSLATED-list2-3.1</translation>
</message>
</context>
<context>
<name>/first_element/object1/list_of_strings/0</name>
<message>
<source>translate-me-list-of-strings-1</source>
<translation>TRANSLATED-list-of-strings-1</translation>
</message>
</context>
<context>
<name>/first_element/object1/list_of_strings/1</name>
<message>
<source>translate-me-list-of-strings-2</source>
<translation>TRANSLATED-list-of-strings-2</translation>
</message>
</context>
<context>
<name>/first_element/object1/list_of_strings/2</name>
<message>
<source>translate-me-list-of-strings-3</source>
<translation>TRANSLATED-list-of-strings-3</translation>
</message>
</context>
<context>
<name>/first_element/object2/key1/name</name>
<message>
<source>translate-me-name1</source>
<translation>TRANSLATED-name1</translation>
</message>
</context>
<context>
<name>/first_element/object2/key2/name</name>
<message>
<source>translate-me-name2</source>
<translation>TRANSLATED-name2</translation>
</message>
</context>
<context>
<name>/first_element/object2/key3/name</name>
<message>
<source>translate-me-name3</source>
<translation>TRANSLATED-name3</translation>
</message>
</context>
<context>
<name>/third_element/subgroups/0/description</name>
<message>
<source>translate-me-subgroup1</source>
<translation>TRANSLATED-subgroup1</translation>
</message>
</context>
<context>
<name>/third_element/subgroups/0/subgroups/0/description</name>
<message>
<source>translate-me-subgroup1-1</source>
<translation>TRANSLATED-subgroup1-1</translation>
</message>
</context>
<context>
<name>/third_element/subgroups/0/subgroups/0/subgroups/0/description</name>
<message>
<source>translate-me-subgroup1-1-1</source>
<translation>TRANSLATED-subgroup1-1-1</translation>
</message>
</context>
<context>
<name>/third_element/subgroups/0/subgroups/1/description</name>
<message>
<source>translate-me-subgroup1-2</source>
<translation>TRANSLATED-subgroup1-2</translation>
</message>
</context>
<context>
<name>/third_element/subgroups/0/subgroups/1/subgroups/0/description</name>
<message>
<source>translate-me-subgroup1-2-1</source>
<translation>TRANSLATED-subgroup1-2-1</translation>
</message>
</context>
<context>
<name>$globals/category/translate-me-global-cat &lt;&gt; special symbol</name>
<message>
<source>translate-me-global-cat &lt;&gt; special symbol</source>
<translation>TRANSLATED-global-cat &lt;&gt; special symbol</translation>
</message>
</context>
<context>
<name>$globals/category/translate-me-global-cat2</name>
<message>
<source>translate-me-global-cat2</source>
<translation>TRANSLATED-global-cat2</translation>
</message>
</context>
<context>
<name>$globals/category/translate-me-global-cat1</name>
<message>
<source>translate-me-global-cat1</source>
<translation>TRANSLATED-global-cat1</translation>
</message>
</context>
</TS>

2
src/qgcunittest/UnitTestList.cc

@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
// ones are enabled/disabled
#include "ComponentInformationCacheTest.h"
#include "ComponentInformationTranslationTest.h"
#include "FactSystemTestGeneric.h"
#include "FactSystemTestPX4.h"
//#include "FileDialogTest.h"
@ -52,6 +53,7 @@ @@ -52,6 +53,7 @@
#include "InitialConnectTest.h"
UT_REGISTER_TEST(ComponentInformationCacheTest)
UT_REGISTER_TEST(ComponentInformationTranslationTest)
UT_REGISTER_TEST(FactSystemTestGeneric)
UT_REGISTER_TEST(FactSystemTestPX4)
//UT_REGISTER_TEST(FileDialogTest)

Loading…
Cancel
Save