summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/linguist/shared/translator.cpp7
-rw-r--r--tests/auto/linguist/lconvert/data/idxmerge-add.ts17
-rw-r--r--tests/auto/linguist/lconvert/data/idxmerge.ts17
-rw-r--r--tests/auto/linguist/lconvert/data/idxmerge.ts.out22
-rw-r--r--tests/auto/linguist/lconvert/tst_lconvert.cpp12
5 files changed, 74 insertions, 1 deletions
diff --git a/src/linguist/shared/translator.cpp b/src/linguist/shared/translator.cpp
index f976596ff..ad66663b0 100644
--- a/src/linguist/shared/translator.cpp
+++ b/src/linguist/shared/translator.cpp
@@ -187,7 +187,12 @@ void Translator::extend(const TranslatorMessage &msg, ConversionData &cd)
void Translator::insert(int idx, const TranslatorMessage &msg)
{
- addIndex(idx, msg);
+ if (m_indexOk) {
+ if (idx == m_messages.count())
+ addIndex(idx, msg);
+ else
+ m_indexOk = false;
+ }
m_messages.insert(idx, msg);
}
diff --git a/tests/auto/linguist/lconvert/data/idxmerge-add.ts b/tests/auto/linguist/lconvert/data/idxmerge-add.ts
new file mode 100644
index 000000000..bc4910ad7
--- /dev/null
+++ b/tests/auto/linguist/lconvert/data/idxmerge-add.ts
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="es_ES">
+<context>
+ <name>a</name>
+ <message>
+ <location filename="a.cpp" line="193"/>
+ <source>Second String</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="a.cpp" line="380"/>
+ <source>Duplicated String</source>
+ <translation></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lconvert/data/idxmerge.ts b/tests/auto/linguist/lconvert/data/idxmerge.ts
new file mode 100644
index 000000000..0784355a4
--- /dev/null
+++ b/tests/auto/linguist/lconvert/data/idxmerge.ts
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="es_ES">
+<context>
+ <name>a</name>
+ <message>
+ <location filename="a.cpp" line="93"/>
+ <source>First String</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="a.cpp" line="380"/>
+ <source>Duplicated String</source>
+ <translation></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lconvert/data/idxmerge.ts.out b/tests/auto/linguist/lconvert/data/idxmerge.ts.out
new file mode 100644
index 000000000..fa4c7ddec
--- /dev/null
+++ b/tests/auto/linguist/lconvert/data/idxmerge.ts.out
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="es_ES">
+<context>
+ <name>a</name>
+ <message>
+ <location filename="a.cpp" line="93"/>
+ <source>First String</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="a.cpp" line="193"/>
+ <source>Second String</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="a.cpp" line="380"/>
+ <source>Duplicated String</source>
+ <translation></translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lconvert/tst_lconvert.cpp b/tests/auto/linguist/lconvert/tst_lconvert.cpp
index d44de1e57..98f92d1fc 100644
--- a/tests/auto/linguist/lconvert/tst_lconvert.cpp
+++ b/tests/auto/linguist/lconvert/tst_lconvert.cpp
@@ -53,6 +53,7 @@ private slots:
void chains_data();
void chains();
#endif
+ void merge();
private:
void doWait(QProcess *cvt, int stage);
@@ -327,6 +328,17 @@ void tst_lconvert::roundtrips()
convertRoundtrip(fileName, stations, args);
}
+void tst_lconvert::merge()
+{
+ QProcess cvt;
+ QStringList args;
+ args << (dataDir + "idxmerge.ts") << (dataDir + "idxmerge-add.ts");
+ cvt.start(binDir + "/lconvert", args, QIODevice::ReadWrite | QIODevice::Text);
+ doWait(&cvt, 1);
+ if (!QTest::currentTestFailed())
+ doCompare(&cvt, dataDir + "idxmerge.ts.out");
+}
+
QTEST_APPLESS_MAIN(tst_lconvert)
#include "tst_lconvert.moc"