summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/auto/linguist/lupdate/.gitignore2
-rw-r--r--tests/auto/linguist/lupdate/lupdate.pro3
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/backslashes/lupdatecmd2
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/backslashes/project.pro16
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/backslashes/ts/project.ts.result (renamed from tests/auto/linguist/lupdate/testdata/good/backslashes/project.ts.result)0
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/codecforsrc/project.pro15
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/codecfortr/project.pro15
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/codecfortr1/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/codecfortr2/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt5
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/heuristics/lupdatecmd2
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/heuristics/main.cpp (renamed from tests/auto/linguist/lupdate/testlupdate.h)53
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/heuristics/project.pro4
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.before38
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.result22
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/lacksqobject/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/merge_ordering/lupdatecmd6
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/merge_ordering/project.pro13
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/merge_versions/project.pro13
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/merge_whitespace/project.pro13
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergecpp/project.pro13
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/lupdatecmd6
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/project.pro13
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/project.pro13
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergeui/project.pro13
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/mergeui_obsolete/project.pro13
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/multiple_locations/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/namespaces/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parse_special_chars/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecontexts/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsejava/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parseui/project.pro12
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/prefix/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/preprocess/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsing2/project.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingpaths/project.pro5
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingpri/project.pro9
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/project.pro5
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/sub1/sub1.pro11
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/common/common.pro5
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/lupdatecmd1
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/mac/mac.pro6
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/project.pro5
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/unix/unix.pro6
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/proparsingsubs/win/win.pro6
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/reloutput/lupdatecmd2
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/reloutput/main.cpp (renamed from tests/auto/linguist/lupdate/testdata/output_ts/toplevel/library/tools/main.cpp)0
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/reloutput/project.pro3
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/reloutput/translations/project.ts.result (renamed from tests/auto/linguist/lupdate/testdata/output_ts/project.ts.result)0
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/textsimilarity/project.pro13
-rw-r--r--tests/auto/linguist/lupdate/testdata/output_ts/lupdatecmd5
-rw-r--r--tests/auto/linguist/lupdate/testdata/output_ts/toplevel/library/tools/tools.pro12
-rw-r--r--tests/auto/linguist/lupdate/testdata/output_ts/toplevel/library/tools/translations/readme.txt2
-rw-r--r--tests/auto/linguist/lupdate/testlupdate.cpp158
-rw-r--r--tests/auto/linguist/lupdate/tst_lupdate.cpp111
-rw-r--r--tools/linguist/lupdate/cpp.cpp2
-rw-r--r--tools/linguist/lupdate/main.cpp8
-rw-r--r--tools/linguist/lupdate/merge.cpp95
61 files changed, 221 insertions, 708 deletions
diff --git a/tests/auto/linguist/lupdate/.gitignore b/tests/auto/linguist/lupdate/.gitignore
index 4ba5b79..389f2dc 100644
--- a/tests/auto/linguist/lupdate/.gitignore
+++ b/tests/auto/linguist/lupdate/.gitignore
@@ -1,4 +1,4 @@
tst_lupdate
testdata/good/*/project.ts
-testdata/output_ts/toplevel/library/tools/translations/project.ts
+testdata/good/*/*/project.ts
testdata/recursivescan/*.ts
diff --git a/tests/auto/linguist/lupdate/lupdate.pro b/tests/auto/linguist/lupdate/lupdate.pro
index 19259dc..bcaaf66 100644
--- a/tests/auto/linguist/lupdate/lupdate.pro
+++ b/tests/auto/linguist/lupdate/lupdate.pro
@@ -2,6 +2,5 @@ CONFIG += qttest_p4
TARGET = tst_lupdate
-HEADERS += testlupdate.h
-SOURCES += tst_lupdate.cpp testlupdate.cpp
+SOURCES += tst_lupdate.cpp
diff --git a/tests/auto/linguist/lupdate/testdata/good/backslashes/lupdatecmd b/tests/auto/linguist/lupdate/testdata/good/backslashes/lupdatecmd
index 9b83a04..f0e1ab2 100644
--- a/tests/auto/linguist/lupdate/testdata/good/backslashes/lupdatecmd
+++ b/tests/auto/linguist/lupdate/testdata/good/backslashes/lupdatecmd
@@ -1,3 +1 @@
-# Add the command that lupdate should run here. If it can't find anything it will default to
TRANSLATION: ts\project.ts
-lupdate -silent project.pro
diff --git a/tests/auto/linguist/lupdate/testdata/good/backslashes/project.pro b/tests/auto/linguist/lupdate/testdata/good/backslashes/project.pro
index 3584c89..4698b2b 100644
--- a/tests/auto/linguist/lupdate/testdata/good/backslashes/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/backslashes/project.pro
@@ -1,19 +1,3 @@
-######################################################################
-# Automatically generated by qmake (2.01a) ma 22. jan 10:10:16 2007
-######################################################################
-
-TEMPLATE = app
-TARGET =
-DEPENDPATH += .
-INCLUDEPATH += .
-
-# Input
SOURCES += src\main.cpp
TRANSLATIONS = ts\project.ts
-
-
-!exists(ts) {
- win32: system(md ts)
- else: system(mkdir ts)
-}
diff --git a/tests/auto/linguist/lupdate/testdata/good/backslashes/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/backslashes/ts/project.ts.result
index d3a5fdf..d3a5fdf 100644
--- a/tests/auto/linguist/lupdate/testdata/good/backslashes/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/backslashes/ts/project.ts.result
diff --git a/tests/auto/linguist/lupdate/testdata/good/codecforsrc/project.pro b/tests/auto/linguist/lupdate/testdata/good/codecforsrc/project.pro
index 848ebda..7225608 100644
--- a/tests/auto/linguist/lupdate/testdata/good/codecforsrc/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/codecforsrc/project.pro
@@ -1,20 +1,7 @@
-TEMPLATE = app
-TARGET +=
-DEPENDPATH += .
-INCLUDEPATH += .
-
-# Input
SOURCES += main.cpp
+CONFIG+= console
TRANSLATIONS = project.ts
-CONFIG+= console
CODECFORTR = utf-8
CODECFORSRC = utf-8
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
-
diff --git a/tests/auto/linguist/lupdate/testdata/good/codecfortr/project.pro b/tests/auto/linguist/lupdate/testdata/good/codecfortr/project.pro
index 81273ee..64f3c85 100644
--- a/tests/auto/linguist/lupdate/testdata/good/codecfortr/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/codecfortr/project.pro
@@ -1,19 +1,6 @@
-TEMPLATE = app
-TARGET +=
-DEPENDPATH += .
-INCLUDEPATH += .
-
-# Input
SOURCES += main.cpp
+CONFIG+= console
TRANSLATIONS = project.ts
-CONFIG+= console
CODECFORTR = CP1251
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
-
diff --git a/tests/auto/linguist/lupdate/testdata/good/codecfortr1/project.pro b/tests/auto/linguist/lupdate/testdata/good/codecfortr1/project.pro
index 1d5b071..d5697eb 100644
--- a/tests/auto/linguist/lupdate/testdata/good/codecfortr1/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/codecfortr1/project.pro
@@ -1,15 +1,6 @@
-TEMPLATE = app
-
SOURCES += main.cpp
+CONFIG += console
TRANSLATIONS = project.ts
-CONFIG += console
CODECFORTR = CP1252
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
-
diff --git a/tests/auto/linguist/lupdate/testdata/good/codecfortr2/project.pro b/tests/auto/linguist/lupdate/testdata/good/codecfortr2/project.pro
index f4975f2..c95939c 100644
--- a/tests/auto/linguist/lupdate/testdata/good/codecfortr2/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/codecfortr2/project.pro
@@ -1,16 +1,7 @@
-TEMPLATE = app
-
SOURCES += main.cpp
+CONFIG += console
TRANSLATIONS = project.ts
-CONFIG += console
CODECFORSRC = CP1252
CODECFORTR = UTF-8
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
-
diff --git a/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt b/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt
new file mode 100644
index 0000000..1eed403
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/heuristics/expectedoutput.txt
@@ -0,0 +1,5 @@
+Updating 'project\.ts'\.\.\.
+ Found 3 source text\(s\) \(3 new and 0 already existing\)
+ Removed 5 obsolete entries
+ Number heuristic provided 1 translation\(s\)
+ Same-text heuristic provided 1 translation\(s\)
diff --git a/tests/auto/linguist/lupdate/testdata/good/heuristics/lupdatecmd b/tests/auto/linguist/lupdate/testdata/good/heuristics/lupdatecmd
new file mode 100644
index 0000000..6bda261
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/heuristics/lupdatecmd
@@ -0,0 +1,2 @@
+TRANSLATION: project.ts
+lupdate -verbose -disable-heuristic similartext -no-obsolete project.pro
diff --git a/tests/auto/linguist/lupdate/testlupdate.h b/tests/auto/linguist/lupdate/testdata/good/heuristics/main.cpp
index 581e5e9..9f36b33 100644
--- a/tests/auto/linguist/lupdate/testlupdate.h
+++ b/tests/auto/linguist/lupdate/testdata/good/heuristics/main.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the Qt Linguist of the Qt Toolkit.
+** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
@@ -39,49 +39,24 @@
**
****************************************************************************/
-#ifndef TESTLUPDATE_H
-#define TESTLUPDATE_H
+// IMPORTANT!!!! If you want to add testdata to this file,
+// always add it to the end in order to not change the linenumbers of translations!!!
-#include <QObject>
-#include <QProcess>
-#include <QStringList>
+#define QTCORE <QtCore>
+#include QTCORE // Hidden from lupdate, but compiles
-class TestLUpdate : public QObject
-{
+class A: public QObject {
Q_OBJECT
+ void foo()
+ {
+ // number Heuristics
+ tr("version 2.0 now");
-public:
- TestLUpdate();
- virtual ~TestLUpdate();
+ // same text match
+ tr("this is the matched same text");
- void setWorkingDirectory( const QString &workDir);
- bool run( const QString &commandline);
- bool updateProFile( const QString &arguments);
- bool qmake();
- QStringList getErrorMessages() {
- return make_result;
+ // failed same text
+ tr("this is the non-matched same text");
}
- void clearResult() {
- make_result.clear();
- }
-private:
- QString m_cmdLupdate;
- QString m_cmdQMake;
- QString m_workDir;
- QProcess *childProc;
- QStringList env_list;
- QStringList make_result;
-
- bool child_show;
- bool qws_mode;
- bool exit_ok;
-
- bool runChild( bool showOutput, const QString &program, const QStringList &argList = QStringList());
- void addMakeResult( const QString &result );
- void childHasData();
-
-private slots:
- void childReady(int exitCode);
};
-#endif // TESTLUPDATE_H
diff --git a/tests/auto/linguist/lupdate/testdata/good/heuristics/project.pro b/tests/auto/linguist/lupdate/testdata/good/heuristics/project.pro
new file mode 100644
index 0000000..034f298
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/heuristics/project.pro
@@ -0,0 +1,4 @@
+SOURCES = main.cpp
+CONFIG -= debug_and_release
+
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.before b/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.before
new file mode 100644
index 0000000..ce82810
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.before
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>A</name>
+ <message>
+ <location filename="main.cpp" line="53"/>
+ <source>version 1.0 now</source>
+ <translation>teraz wersja 1.0</translation>
+ </message>
+</context>
+<context>
+ <name>B</name>
+ <message>
+ <location filename="main.cpp" line="56"/>
+ <source>this is the matched same text</source>
+ <translation>der same-text-treffer</translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="59"/>
+ <source>this is the non-matched same text</source>
+ <translation>same-text-reinfall variante eins</translation>
+ </message>
+</context>
+<context>
+ <name>C</name>
+ <message>
+ <location filename="main.cpp" line="56"/>
+ <source>this is the matched same text</source>
+ <translation>der same-text-treffer</translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="59"/>
+ <source>this is the non-matched same text</source>
+ <translation>völlig andere variante des reinfalls mit same-text</translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.result
new file mode 100644
index 0000000..402ad9a
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/heuristics/project.ts.result
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name>A</name>
+ <message>
+ <location filename="main.cpp" line="53"/>
+ <source>version 2.0 now</source>
+ <translation type="unfinished">teraz wersja 1.0 {2.0 ?}</translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="56"/>
+ <source>this is the matched same text</source>
+ <translation type="unfinished">der same-text-treffer</translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="59"/>
+ <source>this is the non-matched same text</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/lacksqobject/project.pro b/tests/auto/linguist/lupdate/testdata/good/lacksqobject/project.pro
index 7547a8d..759bea0 100644
--- a/tests/auto/linguist/lupdate/testdata/good/lacksqobject/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/lacksqobject/project.pro
@@ -1,12 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES = main.cpp
-TRANSLATIONS += project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/merge_ordering/lupdatecmd b/tests/auto/linguist/lupdate/testdata/good/merge_ordering/lupdatecmd
index 91a4800..82b4b0d 100644
--- a/tests/auto/linguist/lupdate/testdata/good/merge_ordering/lupdatecmd
+++ b/tests/auto/linguist/lupdate/testdata/good/merge_ordering/lupdatecmd
@@ -1,5 +1 @@
-# Add the command that lupdate should run here. If it can't find anything it will default to
-# 'lupdate project.pro -ts project.ts'
-
-# lupdate project.pro
-lupdate -silent -locations relative project.pro
+lupdate -locations relative project.pro
diff --git a/tests/auto/linguist/lupdate/testdata/good/merge_ordering/project.pro b/tests/auto/linguist/lupdate/testdata/good/merge_ordering/project.pro
index e79456f..6149858 100644
--- a/tests/auto/linguist/lupdate/testdata/good/merge_ordering/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/merge_ordering/project.pro
@@ -1,14 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES += foo.cpp
-TRANSLATIONS = project.ts
-
-# Copy the ts to a temp file because:
-# 1. The depot file is usually read-only
-# 2. We don't want to modify the original file, since then it won't be possible to run the test twice
-# without reverting the original file again.
-
-win32: system(copy /Y project.ts.before $$TRANSLATIONS)
-unix: system(cp -f project.ts.before $$TRANSLATIONS && chmod a+w $$TRANSLATIONS)
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/merge_versions/project.pro b/tests/auto/linguist/lupdate/testdata/good/merge_versions/project.pro
index 6c704c2..fa56972 100644
--- a/tests/auto/linguist/lupdate/testdata/good/merge_versions/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/merge_versions/project.pro
@@ -1,14 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
FORMS += project.ui
-TRANSLATIONS = project.ts
-
-# Copy the ts to a temp file because:
-# 1. The depot file is usually read-only
-# 2. We don't want to modify the original file, since then it won't be possible to run the test twice
-# without reverting the original file again.
-
-win32: system(copy /Y project.ts.before $$TRANSLATIONS)
-unix: system(cp -f project.ts.before $$TRANSLATIONS && chmod a+w $$TRANSLATIONS)
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/merge_whitespace/project.pro b/tests/auto/linguist/lupdate/testdata/good/merge_whitespace/project.pro
index f4faf2f..759bea0 100644
--- a/tests/auto/linguist/lupdate/testdata/good/merge_whitespace/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/merge_whitespace/project.pro
@@ -1,14 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES = main.cpp
-TRANSLATIONS = project.ts
-
-# Copy the ts to a temp file because:
-# 1. The depot file is usually read-only
-# 2. We don't want to modify the original file, since then it won't be possible to run the test twice
-# without reverting the original file again.
-
-win32: system(copy /Y project.ts.before $$TRANSLATIONS)
-unix: system(cp -f project.ts.before $$TRANSLATIONS && chmod a+w $$TRANSLATIONS)
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp/project.pro b/tests/auto/linguist/lupdate/testdata/good/mergecpp/project.pro
index e988c0a..63f5d66 100644
--- a/tests/auto/linguist/lupdate/testdata/good/mergecpp/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp/project.pro
@@ -1,14 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES += finddialog.cpp
-TRANSLATIONS = project.ts
-
-# Copy the ts to a temp file because:
-# 1. The depot file is usually read-only
-# 2. We don't want to modify the original file, since then it won't be possible to run the test twice
-# without reverting the original file again.
-
-win32: system(copy /Y project.ts.before $$TRANSLATIONS)
-unix: system(cp -f project.ts.before $$TRANSLATIONS && chmod a+w $$TRANSLATIONS)
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/lupdatecmd b/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/lupdatecmd
index d200143..500a822 100644
--- a/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/lupdatecmd
+++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/lupdatecmd
@@ -1,5 +1 @@
-# Add the command that lupdate should run here. If it can't find anything it will default to
-# 'lupdate project.pro -ts project.ts'
-
-# lupdate project.pro
-lupdate -silent -noobsolete project.pro
+lupdate -noobsolete project.pro
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/project.pro b/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/project.pro
index e988c0a..63f5d66 100644
--- a/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/project.pro
@@ -1,14 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES += finddialog.cpp
-TRANSLATIONS = project.ts
-
-# Copy the ts to a temp file because:
-# 1. The depot file is usually read-only
-# 2. We don't want to modify the original file, since then it won't be possible to run the test twice
-# without reverting the original file again.
-
-win32: system(copy /Y project.ts.before $$TRANSLATIONS)
-unix: system(cp -f project.ts.before $$TRANSLATIONS && chmod a+w $$TRANSLATIONS)
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/project.pro b/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/project.pro
index e988c0a..63f5d66 100644
--- a/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/project.pro
@@ -1,14 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES += finddialog.cpp
-TRANSLATIONS = project.ts
-
-# Copy the ts to a temp file because:
-# 1. The depot file is usually read-only
-# 2. We don't want to modify the original file, since then it won't be possible to run the test twice
-# without reverting the original file again.
-
-win32: system(copy /Y project.ts.before $$TRANSLATIONS)
-unix: system(cp -f project.ts.before $$TRANSLATIONS && chmod a+w $$TRANSLATIONS)
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergeui/project.pro b/tests/auto/linguist/lupdate/testdata/good/mergeui/project.pro
index 28ba291..fa56972 100644
--- a/tests/auto/linguist/lupdate/testdata/good/mergeui/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/mergeui/project.pro
@@ -1,14 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
FORMS += project.ui
-TRANSLATIONS = project.ts
-
-# Copy the ts to a temp file because:
-# 1. The depot file is usually read-only
-# 2. We don't want to modify the original file, since then it won't be possible to run the test twice
-# without reverting the original file again.
-
-win32: system(copy /Y project.ts.before $$TRANSLATIONS)
-unix: system(cp -f project.ts.before $$TRANSLATIONS && chmod a+w $$TRANSLATIONS)
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/mergeui_obsolete/project.pro b/tests/auto/linguist/lupdate/testdata/good/mergeui_obsolete/project.pro
index 28ba291..fa56972 100644
--- a/tests/auto/linguist/lupdate/testdata/good/mergeui_obsolete/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/mergeui_obsolete/project.pro
@@ -1,14 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
FORMS += project.ui
-TRANSLATIONS = project.ts
-
-# Copy the ts to a temp file because:
-# 1. The depot file is usually read-only
-# 2. We don't want to modify the original file, since then it won't be possible to run the test twice
-# without reverting the original file again.
-
-win32: system(copy /Y project.ts.before $$TRANSLATIONS)
-unix: system(cp -f project.ts.before $$TRANSLATIONS && chmod a+w $$TRANSLATIONS)
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/multiple_locations/project.pro b/tests/auto/linguist/lupdate/testdata/good/multiple_locations/project.pro
index 4582705..bbabdfb 100644
--- a/tests/auto/linguist/lupdate/testdata/good/multiple_locations/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/multiple_locations/project.pro
@@ -1,13 +1,4 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES += main.cpp
SOURCES += finddialog.cpp
-TRANSLATIONS += project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/namespaces/project.pro b/tests/auto/linguist/lupdate/testdata/good/namespaces/project.pro
index 56d472c..c96859b 100644
--- a/tests/auto/linguist/lupdate/testdata/good/namespaces/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/namespaces/project.pro
@@ -1,12 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES += main.cpp
-TRANSLATIONS += project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/parse_special_chars/project.pro b/tests/auto/linguist/lupdate/testdata/good/parse_special_chars/project.pro
index cb18ea4..c96859b 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parse_special_chars/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/parse_special_chars/project.pro
@@ -1,12 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES += main.cpp
-TRANSLATIONS += project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecontexts/project.pro b/tests/auto/linguist/lupdate/testdata/good/parsecontexts/project.pro
index 7547a8d..759bea0 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecontexts/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecontexts/project.pro
@@ -1,12 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES = main.cpp
-TRANSLATIONS += project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.pro b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.pro
index 4582705..bbabdfb 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.pro
@@ -1,13 +1,4 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES += main.cpp
SOURCES += finddialog.cpp
-TRANSLATIONS += project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.pro b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.pro
index 7547a8d..759bea0 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.pro
@@ -1,12 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES = main.cpp
-TRANSLATIONS += project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsejava/project.pro b/tests/auto/linguist/lupdate/testdata/good/parsejava/project.pro
index 7e64c80..657b535 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsejava/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/parsejava/project.pro
@@ -1,12 +1,3 @@
-TEMPLATE = app
-LANGUAGE = Java
-
SOURCES += main.java
-TRANSLATIONS += project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/parseui/project.pro b/tests/auto/linguist/lupdate/testdata/good/parseui/project.pro
index bdc06e7..fa56972 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parseui/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/parseui/project.pro
@@ -1,13 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
FORMS += project.ui
-TRANSLATIONS = project.ts
-
-exists( $$TRANSLATIONS ) {
- win32 : system(del $$TRANSLATIONS)
- unix : system(rm $$TRANSLATIONS)
-}
-
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/prefix/project.pro b/tests/auto/linguist/lupdate/testdata/good/prefix/project.pro
index 7547a8d..759bea0 100644
--- a/tests/auto/linguist/lupdate/testdata/good/prefix/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/prefix/project.pro
@@ -1,12 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES = main.cpp
-TRANSLATIONS += project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/preprocess/project.pro b/tests/auto/linguist/lupdate/testdata/good/preprocess/project.pro
index 012c7e0..c96859b 100644
--- a/tests/auto/linguist/lupdate/testdata/good/preprocess/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/preprocess/project.pro
@@ -1,12 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES += main.cpp
-TRANSLATIONS += project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm -f $$TRANSLATIONS)
-}
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing/project.pro b/tests/auto/linguist/lupdate/testdata/good/proparsing/project.pro
index 3078817..0e920f9 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing/project.pro
@@ -1,6 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
# Try to reference a variable that does not exist:
MYVAR=$$THIS_VARIABLE_IS_NOT_DEFINED
@@ -31,10 +28,4 @@ if (exists($$member($$(PATH), 0))) {
SOURCES += main_dependpath.cpp
}
-TRANSLATIONS += project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm -f $$TRANSLATIONS)
-}
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsing2/project.pro b/tests/auto/linguist/lupdate/testdata/good/proparsing2/project.pro
index 1d6895a..3dc4208 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsing2/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsing2/project.pro
@@ -3,9 +3,6 @@
# It also tries to verify the behaviour of combining quoted and non-quoted elements with literals.
#
-TEMPLATE = app
-LANGUAGE = C++
-
QUOTED = $$quote(variable with spaces)
VERSIONAB = "a.b"
VAB = $$split(VERSIONAB, ".")
@@ -33,10 +30,4 @@ SOURCES += $$Q3
win32: SOURCES += $$system(type files-cc.txt)
unix: SOURCES += $$system(cat files-cc.txt)
-TRANSLATIONS += project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
-
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/project.pro b/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/project.pro
index 820b4fa..6bfe751 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingpaths/project.pro
@@ -3,8 +3,3 @@ SOURCES += file*.cpp filter.cpp non-existing.cpp
include(sub/sub.pri)
TRANSLATIONS = project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm -f $$TRANSLATIONS)
-}
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingpri/project.pro b/tests/auto/linguist/lupdate/testdata/good/proparsingpri/project.pro
index 3810a02..5e23538 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingpri/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingpri/project.pro
@@ -1,6 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
include(win/win.pri)
include(mac/mac.pri)
include(unix/unix.pri)
@@ -8,9 +5,5 @@ include (common/common.pri) # Important: keep the space before the '
include(relativity/relativity.pri)
message($$SOURCES)
-TRANSLATIONS = project.ts
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm $$TRANSLATIONS)
-}
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/project.pro b/tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/project.pro
index 4de6622..88f2435 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/project.pro
@@ -1,3 +1,2 @@
-TEMPLATE =subdirs
-
-SUBDIRS = sub1
+TEMPLATE = subdirs
+SUBDIRS = sub1
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/sub1/sub1.pro b/tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/sub1/sub1.pro
index 1d50c2b..df18c5a 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/sub1/sub1.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubdirs/sub1/sub1.pro
@@ -1,12 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
SOURCES += main.cpp
-TRANSLATIONS += ../project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm -f $$TRANSLATIONS)
-}
-
+TRANSLATIONS = ../project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/common/common.pro b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/common/common.pro
index a8b3106..3f6c643 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/common/common.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/common/common.pro
@@ -1,5 +1,2 @@
-TEMPLATE = app
-LANGUAGE = C++
-
-SOURCES += main.cpp
+SOURCES += main.cpp
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/lupdatecmd b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/lupdatecmd
new file mode 100644
index 0000000..b7e12cc
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/lupdatecmd
@@ -0,0 +1 @@
+lupdate project.pro -ts project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/mac/mac.pro b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/mac/mac.pro
index 87478bf..a1863b6 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/mac/mac.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/mac/mac.pro
@@ -1,5 +1 @@
-TEMPLATE = app
-LANGUAGE = C++
-
-SOURCES += main_mac.cpp
-
+SOURCES += main_mac.cpp
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/project.pro b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/project.pro
index 668ecf4..f75a462 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/project.pro
@@ -1,7 +1,2 @@
TEMPLATE = subdirs
SUBDIRS = win mac unix common
-
-exists( project.ts ) {
- win32: system(del project.ts)
- unix: system(rm project.ts)
-}
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/unix/unix.pro b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/unix/unix.pro
index d0ebec7..71b1a22 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/unix/unix.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/unix/unix.pro
@@ -1,5 +1 @@
-TEMPLATE = app
-LANGUAGE = C++
-
-SOURCES += main_unix.cpp
-
+SOURCES += main_unix.cpp
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/win/win.pro b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/win/win.pro
index a9a9751..afd7197 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/win/win.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/win/win.pro
@@ -1,5 +1 @@
-TEMPLATE = app
-LANGUAGE = C++
-
-SOURCES += main_win.cpp
-
+SOURCES += main_win.cpp
diff --git a/tests/auto/linguist/lupdate/testdata/good/reloutput/lupdatecmd b/tests/auto/linguist/lupdate/testdata/good/reloutput/lupdatecmd
new file mode 100644
index 0000000..da6103f
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/reloutput/lupdatecmd
@@ -0,0 +1,2 @@
+TRANSLATION: translations/project.ts
+lupdate project.pro -ts translations/project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/output_ts/toplevel/library/tools/main.cpp b/tests/auto/linguist/lupdate/testdata/good/reloutput/main.cpp
index 5a681e2..5a681e2 100644
--- a/tests/auto/linguist/lupdate/testdata/output_ts/toplevel/library/tools/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/reloutput/main.cpp
diff --git a/tests/auto/linguist/lupdate/testdata/good/reloutput/project.pro b/tests/auto/linguist/lupdate/testdata/good/reloutput/project.pro
new file mode 100644
index 0000000..4e2e6ad
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/reloutput/project.pro
@@ -0,0 +1,3 @@
+SOURCES += main.cpp
+
+TRANSLATIONS = translations/project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/output_ts/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/reloutput/translations/project.ts.result
index e398701..e398701 100644
--- a/tests/auto/linguist/lupdate/testdata/output_ts/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/reloutput/translations/project.ts.result
diff --git a/tests/auto/linguist/lupdate/testdata/good/textsimilarity/project.pro b/tests/auto/linguist/lupdate/testdata/good/textsimilarity/project.pro
index 28ba291..fa56972 100644
--- a/tests/auto/linguist/lupdate/testdata/good/textsimilarity/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/textsimilarity/project.pro
@@ -1,14 +1,3 @@
-TEMPLATE = app
-LANGUAGE = C++
-
FORMS += project.ui
-TRANSLATIONS = project.ts
-
-# Copy the ts to a temp file because:
-# 1. The depot file is usually read-only
-# 2. We don't want to modify the original file, since then it won't be possible to run the test twice
-# without reverting the original file again.
-
-win32: system(copy /Y project.ts.before $$TRANSLATIONS)
-unix: system(cp -f project.ts.before $$TRANSLATIONS && chmod a+w $$TRANSLATIONS)
+TRANSLATIONS = project.ts
diff --git a/tests/auto/linguist/lupdate/testdata/output_ts/lupdatecmd b/tests/auto/linguist/lupdate/testdata/output_ts/lupdatecmd
deleted file mode 100644
index 80319de..0000000
--- a/tests/auto/linguist/lupdate/testdata/output_ts/lupdatecmd
+++ /dev/null
@@ -1,5 +0,0 @@
-# Add the command that lupdate should run here. If it can't find anything it will default to
-# 'lupdate project.pro -ts project.ts'
-
-# lupdate project.pro
-lupdate toplevel/library/tools/tools.pro
diff --git a/tests/auto/linguist/lupdate/testdata/output_ts/toplevel/library/tools/tools.pro b/tests/auto/linguist/lupdate/testdata/output_ts/toplevel/library/tools/tools.pro
deleted file mode 100644
index ec6c01d..0000000
--- a/tests/auto/linguist/lupdate/testdata/output_ts/toplevel/library/tools/tools.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-TEMPLATE = app
-LANGUAGE = C++
-
-SOURCES += main.cpp
-
-TRANSLATIONS += translations/project.ts
-
-exists( $$TRANSLATIONS ) {
- win32: system(del $$TRANSLATIONS)
- unix: system(rm -f $$TRANSLATIONS)
-}
-
diff --git a/tests/auto/linguist/lupdate/testdata/output_ts/toplevel/library/tools/translations/readme.txt b/tests/auto/linguist/lupdate/testdata/output_ts/toplevel/library/tools/translations/readme.txt
deleted file mode 100644
index 83adcd2..0000000
--- a/tests/auto/linguist/lupdate/testdata/output_ts/toplevel/library/tools/translations/readme.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-This is just a dummy file so that GIT creates this folder
-
diff --git a/tests/auto/linguist/lupdate/testlupdate.cpp b/tests/auto/linguist/lupdate/testlupdate.cpp
deleted file mode 100644
index d43fbc4..0000000
--- a/tests/auto/linguist/lupdate/testlupdate.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Linguist of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "testlupdate.h"
-#include <stdlib.h>
-#include <QtGui/QApplication>
-#include <QtCore/QProcess>
-#include <QtCore/QTimer>
-#include <QtCore/QDir>
-
-#ifdef Q_OS_WIN32
-# include <windows.h>
-#endif
-
-#include <QtTest/QtTest>
-
-
-TestLUpdate::TestLUpdate()
-{
- childProc = 0;
- QString binPath = QLibraryInfo::location(QLibraryInfo::BinariesPath);
- m_cmdLupdate = binPath + QLatin1String("/lupdate");
- m_cmdQMake = binPath + QLatin1String("/qmake");
-}
-
-TestLUpdate::~TestLUpdate()
-{
- if (childProc)
- delete childProc;
-}
-
-void TestLUpdate::setWorkingDirectory(const QString &workDir)
-{
- m_workDir = workDir;
- QDir::setCurrent(m_workDir);
-}
-
-void TestLUpdate::addMakeResult( const QString &result )
-{
- make_result.append( result );
-}
-
-bool TestLUpdate::runChild( bool showOutput, const QString &program, const QStringList &argList)
-{
- make_result.clear();
- exit_ok = FALSE;
- if (childProc)
- delete childProc;
-
- child_show = showOutput;
- if ( showOutput ) {
- QString S = argList.join(" ");
- addMakeResult( program + QLatin1String(" ") + S );
- }
-
- childProc = new QProcess();
- Q_ASSERT(childProc);
-
- childProc->setWorkingDirectory(m_workDir);
- connect(childProc, SIGNAL(finished(int)), this, SLOT(childReady(int)));
- childProc->setProcessChannelMode(QProcess::MergedChannels);
- if (argList.isEmpty()) {
- childProc->start( program, QIODevice::ReadWrite | QIODevice::Text );
- } else {
- childProc->start( program, argList, QIODevice::ReadWrite | QIODevice::Text );
- }
- bool ok;
-
- ok = childProc->waitForStarted();
-
- if (ok)
- ok = childProc->waitForFinished();
-
- if (!ok)
- addMakeResult( "Error executing '" + program + "'." );
-
- childReady(ok ? 0 : -1);
-
- return ok;
-}
-
-void TestLUpdate::childReady(int /*exitCode*/)
-{
- if (childProc != 0) {
- childHasData();
- exit_ok = childProc->state() == QProcess::NotRunning
- && childProc->exitStatus() == 0;
- childProc->deleteLater();
- }
- childProc = 0;
-}
-
-void TestLUpdate::childHasData()
-{
- //QByteArray ba = childProc->readAllStandardError();
- //qDebug() << "ERROR:" << ba;
- QString stdoutput = childProc->readAllStandardOutput();
- stdoutput = stdoutput.replace("\t", " ");
- if (child_show)
- addMakeResult(stdoutput);
-}
-
-bool TestLUpdate::run(const QString &commandline)
-{
- return runChild(true, m_cmdLupdate + QLatin1String(" ") + commandline);
-}
-
-
-bool TestLUpdate::updateProFile(const QString &arguments)
-{
- QStringList args = arguments.split(QChar(' '));
- return runChild( true, m_cmdLupdate, args );
-}
-
-bool TestLUpdate::qmake()
-{
- QStringList args;
- args << "-r";
- return runChild(true, m_cmdQMake, args);
-}
diff --git a/tests/auto/linguist/lupdate/tst_lupdate.cpp b/tests/auto/linguist/lupdate/tst_lupdate.cpp
index 7140ede..80c8f4f 100644
--- a/tests/auto/linguist/lupdate/tst_lupdate.cpp
+++ b/tests/auto/linguist/lupdate/tst_lupdate.cpp
@@ -39,7 +39,6 @@
**
****************************************************************************/
-#include "testlupdate.h"
#if CHECK_SIMTEXTH
#include "../shared/simtexth.h"
#endif
@@ -55,12 +54,11 @@ class tst_lupdate : public QObject
{
Q_OBJECT
public:
- tst_lupdate() { m_basePath = QDir::currentPath() + QLatin1String("/testdata/"); }
+ tst_lupdate();
private slots:
void good_data();
void good();
- void output_ts();
void commandline_data();
void commandline();
#if CHECK_SIMTEXTH
@@ -69,7 +67,7 @@ private slots:
#endif
private:
- TestLUpdate m_lupdate;
+ QString m_cmdLupdate;
QString m_basePath;
void doCompare(const QStringList &actual, const QString &expectedFn, bool err);
@@ -77,10 +75,17 @@ private:
};
+tst_lupdate::tst_lupdate()
+{
+ QString binPath = QLibraryInfo::location(QLibraryInfo::BinariesPath);
+ m_cmdLupdate = binPath + QLatin1String("/lupdate");
+ m_basePath = QDir::currentPath() + QLatin1String("/testdata/");
+}
+
void tst_lupdate::doCompare(const QStringList &actual, const QString &expectedFn, bool err)
{
QFile file(expectedFn);
- QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
+ QVERIFY2(file.open(QIODevice::ReadOnly | QIODevice::Text), qPrintable(expectedFn));
QStringList expected = QString(file.readAll()).trimmed().split('\n');
int i = 0, ei = expected.size(), gi = actual.size();
@@ -141,7 +146,7 @@ void tst_lupdate::doCompare(const QStringList &actual, const QString &expectedFn
void tst_lupdate::doCompare(const QString &actualFn, const QString &expectedFn, bool err)
{
QFile afile(actualFn);
- QVERIFY(afile.open(QIODevice::ReadOnly | QIODevice::Text));
+ QVERIFY2(afile.open(QIODevice::ReadOnly | QIODevice::Text), qPrintable(actualFn));
QStringList actual = QString(afile.readAll()).trimmed().split('\n');
doCompare(actual, expectedFn, err);
@@ -167,20 +172,16 @@ void tst_lupdate::good()
QFETCH(QString, directory);
QString dir = m_basePath + "good/" + directory;
- QString expectedFile = dir + QLatin1String("/project.ts.result");
qDebug() << "Checking...";
- // qmake will delete the previous one, to ensure that we don't do any merging....
- QString generatedtsfile(QLatin1String("project.ts"));
+ QString generatedtsfile(dir + QLatin1String("/project.ts"));
- m_lupdate.setWorkingDirectory(dir);
- m_lupdate.qmake();
// look for a command
QString lupdatecmd;
QFile file(dir + "/lupdatecmd");
if (file.exists()) {
- QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
+ QVERIFY2(file.open(QIODevice::ReadOnly | QIODevice::Text), qPrintable(file.fileName()));
while (!file.atEnd()) {
QByteArray cmdstring = file.readLine().simplified();
if (cmdstring.startsWith('#'))
@@ -197,72 +198,39 @@ void tst_lupdate::good()
file.close();
}
- if (lupdatecmd.isEmpty()) {
- lupdatecmd = QLatin1String("project.pro -ts project.ts");
- }
- lupdatecmd.prepend("-silent ");
- m_lupdate.updateProFile(lupdatecmd);
-
- // If the file expectedoutput.txt exists, compare the
- // console output with the content of that file
- QFile outfile(dir + "/expectedoutput.txt");
- if (outfile.exists()) {
- QString errs = m_lupdate.getErrorMessages().at(1).trimmed();
- QStringList errslist = errs.split(QLatin1Char('\n'));
- doCompare(errslist, outfile.fileName(), true);
- if (QTest::currentTestFailed())
- return;
- }
-
- doCompare(generatedtsfile, expectedFile, false);
-}
-
-void tst_lupdate::output_ts()
-{
- QString dir = m_basePath + "output_ts";
- m_lupdate.setWorkingDirectory(dir);
-
- // look for a command
- QString lupdatecmd;
- QFile file(dir + "/lupdatecmd");
- if (file.exists()) {
- QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
- while (!file.atEnd()) {
- QByteArray cmdstring = file.readLine().simplified();
- if (cmdstring.startsWith('#'))
- continue;
- if (cmdstring.startsWith("lupdate")) {
- cmdstring.remove(0, 8);
- lupdatecmd.append(cmdstring);
- break;
- }
- }
- file.close();
- }
-
- QDir parsingDir(m_basePath + "output_ts");
-
- QString generatedtsfile =
- dir + QLatin1String("/toplevel/library/tools/translations/project.ts");
-
QFile::remove(generatedtsfile);
+ QString beforetsfile = generatedtsfile + QLatin1String(".before");
+ if (QFile::exists(beforetsfile))
+ QVERIFY2(QFile::copy(beforetsfile, generatedtsfile), qPrintable(beforetsfile));
+ if (lupdatecmd.isEmpty())
+ lupdatecmd = QLatin1String("project.pro");
lupdatecmd.prepend("-silent ");
- m_lupdate.qmake();
- m_lupdate.updateProFile(lupdatecmd);
+
+ QProcess proc;
+ proc.setWorkingDirectory(dir);
+ proc.setProcessChannelMode(QProcess::MergedChannels);
+ proc.start(m_cmdLupdate + ' ' + lupdatecmd, QIODevice::ReadWrite | QIODevice::Text);
+ QVERIFY2(proc.waitForFinished(5000), qPrintable(lupdatecmd));
+ QByteArray output = proc.readAll().trimmed();
+ QVERIFY2(proc.exitStatus() == QProcess::NormalExit,
+ "\"lupdate " + lupdatecmd.toLatin1() + "\" crashed\n" + output);
+ QVERIFY2(!proc.exitCode(),
+ "\"lupdate " + lupdatecmd.toLatin1() + "\" exited with code " +
+ QByteArray::number(proc.exitCode()) + "\n" + proc.readAll());
// If the file expectedoutput.txt exists, compare the
// console output with the content of that file
QFile outfile(dir + "/expectedoutput.txt");
if (outfile.exists()) {
- QString errs = m_lupdate.getErrorMessages().at(1).trimmed();
- QStringList errslist = errs.split(QLatin1Char('\n'));
+ QStringList errslist = QString::fromLatin1(output).split(QLatin1Char('\n'));
doCompare(errslist, outfile.fileName(), true);
if (QTest::currentTestFailed())
return;
}
- doCompare(generatedtsfile, dir + QLatin1String("/project.ts.result"), false);
+ QString expectedFile = generatedtsfile + QLatin1String(".result");
+ doCompare(generatedtsfile, expectedFile, false);
}
void tst_lupdate::commandline_data()
@@ -285,14 +253,21 @@ void tst_lupdate::commandline()
QFETCH(QString, generatedtsfile);
QFETCH(QString, expectedtsfile);
- m_lupdate.setWorkingDirectory(m_basePath + currentPath);
QString generated =
m_basePath + currentPath + QLatin1Char('/') + generatedtsfile;
QFile gen(generated);
if (gen.exists())
QVERIFY(gen.remove());
- if (!m_lupdate.run("-silent " + commandline))
- qDebug() << m_lupdate.getErrorMessages().last();
+ QProcess proc;
+ proc.setWorkingDirectory(m_basePath + currentPath);
+ proc.setProcessChannelMode(QProcess::MergedChannels);
+ proc.start(m_cmdLupdate + " -silent " + commandline, QIODevice::ReadWrite | QIODevice::Text);
+ QVERIFY2(proc.waitForFinished(5000), qPrintable(commandline));
+ QVERIFY2(proc.exitStatus() == QProcess::NormalExit,
+ "\"lupdate -silent " + commandline.toLatin1() + "\" crashed\n" + proc.readAll());
+ QVERIFY2(!proc.exitCode(),
+ "\"lupdate -silent " + commandline.toLatin1() + "\" exited with code " +
+ QByteArray::number(proc.exitCode()) + "\n" + proc.readAll());
doCompare(generated, m_basePath + currentPath + QLatin1Char('/') + expectedtsfile, false);
}
diff --git a/tools/linguist/lupdate/cpp.cpp b/tools/linguist/lupdate/cpp.cpp
index 857233e..b7f7807 100644
--- a/tools/linguist/lupdate/cpp.cpp
+++ b/tools/linguist/lupdate/cpp.cpp
@@ -1732,7 +1732,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
plural = true;
}
}
- if (!pendingContext.isEmpty()) {
+ if (!pendingContext.isEmpty() && !prefix.startsWith(strColons)) {
QStringList unresolved;
if (!fullyQualify(namespaces, pendingContext, true, &functionContext, &unresolved)) {
functionContextUnresolved = unresolved.join(strColons);
diff --git a/tools/linguist/lupdate/main.cpp b/tools/linguist/lupdate/main.cpp
index 9a9af68..a0ab7f9 100644
--- a/tools/linguist/lupdate/main.cpp
+++ b/tools/linguist/lupdate/main.cpp
@@ -237,18 +237,12 @@ int main(int argc, char **argv)
Verbose | // verbose is on by default starting with Qt 4.2
HeuristicSameText | HeuristicSimilarText | HeuristicNumber;
int numFiles = 0;
- bool standardSyntax = true;
bool metTsFlag = false;
bool recursiveScan = true;
QString extensions = m_defaultExtensions;
QSet<QString> extensionsNameFilters;
- for (int i = 1; i < argc; ++i) {
- if (args.at(i) == QLatin1String("-ts"))
- standardSyntax = false;
- }
-
for (int i = 1; i < argc; ++i) {
QString arg = args.at(i);
if (arg == QLatin1String("-help")
@@ -375,8 +369,6 @@ int main(int argc, char **argv)
numFiles++;
- QString fullText;
-
codecForTr.clear();
codecForSource.clear();
diff --git a/tools/linguist/lupdate/merge.cpp b/tools/linguist/lupdate/merge.cpp
index fa0dd3d..b657282 100644
--- a/tools/linguist/lupdate/merge.cpp
+++ b/tools/linguist/lupdate/merge.cpp
@@ -50,9 +50,6 @@
#include <QtCore/QTextCodec>
#include <QtCore/QVector>
-typedef QList<TranslatorMessage> TML;
-typedef QMap<QString, TranslatorMessage> TMM;
-
QT_BEGIN_NAMESPACE
@@ -63,7 +60,7 @@ static bool isDigitFriendly(QChar c)
static int numberLength(const QString &s, int i)
{
- if (i < s.size() || !s.at(i).isDigit())
+ if (i >= s.size() || !s.at(i).isDigit())
return 0;
int pos = i;
@@ -90,7 +87,7 @@ static QString zeroKey(const QString &key)
QString zeroed;
bool metSomething = false;
- for (int i = 0; i != key.size(); ++i) {
+ for (int i = 0; i < key.size(); ++i) {
int len = numberLength(key, i);
if (len > 0) {
i += len;
@@ -225,31 +222,36 @@ static QString translationAttempt(const QString &oldTranslation,
*/
int applyNumberHeuristic(Translator &tor)
{
- TMM translated, untranslated;
- TMM::Iterator t, u;
- TML all = tor.messages();
- TML::Iterator it;
+ QMap<QString, QPair<QString, QString> > translated;
+ QVector<bool> untranslated(tor.messageCount());
int inserted = 0;
- for (it = all.begin(); it != all.end(); ++it) {
- bool hasTranslation = it->isTranslated();
- if (it->type() == TranslatorMessage::Unfinished) {
+ for (int i = 0; i < tor.messageCount(); ++i) {
+ const TranslatorMessage &msg = tor.message(i);
+ bool hasTranslation = msg.isTranslated();
+ if (msg.type() == TranslatorMessage::Unfinished) {
if (!hasTranslation)
- untranslated.insert(it->context() + QLatin1Char('\n')
- + it->sourceText() + QLatin1Char('\n')
- + it->comment(), *it);
- } else if (hasTranslation && it->translations().count() == 1) {
- translated.insert(zeroKey(it->sourceText()), *it);
+ untranslated[i] = true;
+ } else if (hasTranslation && msg.translations().count() == 1) {
+ const QString &key = zeroKey(msg.sourceText());
+ if (!key.isEmpty())
+ translated.insert(key, qMakePair(msg.sourceText(), msg.translation()));
}
}
- for (u = untranslated.begin(); u != untranslated.end(); ++u) {
- t = translated.find(zeroKey((*u).sourceText()));
- if (t != translated.end() && !t.key().isEmpty()
- && t->sourceText() != u->sourceText()) {
- u->setTranslation(translationAttempt(t->translation(), t->sourceText(),
- u->sourceText()));
- inserted++;
+ for (int i = 0; i < tor.messageCount(); ++i) {
+ if (untranslated[i]) {
+ TranslatorMessage &msg = tor.message(i);
+ const QString &key = zeroKey(msg.sourceText());
+ if (!key.isEmpty()) {
+ QMap<QString, QPair<QString, QString> >::ConstIterator t =
+ translated.constFind(key);
+ if (t != translated.constEnd() && t->first != msg.sourceText()) {
+ msg.setTranslation(translationAttempt(t->second, t->first,
+ msg.sourceText()));
+ inserted++;
+ }
+ }
}
}
return inserted;
@@ -268,43 +270,42 @@ int applyNumberHeuristic(Translator &tor)
int applySameTextHeuristic(Translator &tor)
{
- TMM translated;
- TMM avoid;
- TMM::Iterator t;
- TML untranslated;
- TML::Iterator u;
- TML all = tor.messages();
- TML::Iterator it;
+ QMap<QString, QStringList> translated;
+ QMap<QString, bool> avoid; // Want a QTreeSet, in fact
+ QVector<bool> untranslated(tor.messageCount());
int inserted = 0;
- for (it = all.begin(); it != all.end(); ++it) {
- if (!it->isTranslated()) {
- if (it->type() == TranslatorMessage::Unfinished)
- untranslated.append(*it);
+ for (int i = 0; i < tor.messageCount(); ++i) {
+ const TranslatorMessage &msg = tor.message(i);
+ if (!msg.isTranslated()) {
+ if (msg.type() == TranslatorMessage::Unfinished)
+ untranslated[i] = true;
} else {
- QString key = it->sourceText();
- t = translated.find(key);
- if (t != translated.end()) {
+ const QString &key = msg.sourceText();
+ QMap<QString, QStringList>::ConstIterator t = translated.constFind(key);
+ if (t != translated.constEnd()) {
/*
The same source text is translated at least two
different ways. Do nothing then.
*/
- if (t->translations() != it->translations()) {
+ if (*t != msg.translations()) {
translated.remove(key);
- avoid.insert(key, *it);
+ avoid.insert(key, true);
}
} else if (!avoid.contains(key)) {
- translated.insert(key, *it);
+ translated.insert(key, msg.translations());
}
}
}
- for (u = untranslated.begin(); u != untranslated.end(); ++u) {
- QString key = u->sourceText();
- t = translated.find(key);
- if (t != translated.end()) {
- u->setTranslations(t->translations());
- ++inserted;
+ for (int i = 0; i < tor.messageCount(); ++i) {
+ if (untranslated[i]) {
+ TranslatorMessage &msg = tor.message(i);
+ QMap<QString, QStringList>::ConstIterator t = translated.constFind(msg.sourceText());
+ if (t != translated.constEnd()) {
+ msg.setTranslations(*t);
+ ++inserted;
+ }
}
}
return inserted;