diff options
-rw-r--r-- | src/linguist/shared/translator.cpp | 7 | ||||
-rw-r--r-- | tests/auto/linguist/lconvert/data/idxmerge-add.ts | 17 | ||||
-rw-r--r-- | tests/auto/linguist/lconvert/data/idxmerge.ts | 17 | ||||
-rw-r--r-- | tests/auto/linguist/lconvert/data/idxmerge.ts.out | 22 | ||||
-rw-r--r-- | tests/auto/linguist/lconvert/tst_lconvert.cpp | 12 |
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" |