diff options
author | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2015-04-27 20:04:26 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2015-04-30 09:22:43 +0000 |
commit | a6ed9b418d1b4464f088b378e5bdb96ec420db6c (patch) | |
tree | 340e731984684982873a32a70b90dc5158bb369f | |
parent | 2d7a87870c5646e9a11f994e0f5e3dbe49228ece (diff) | |
download | qttools-a6ed9b418d1b4464f088b378e5bdb96ec420db6c.tar.gz |
invalidate message index when inserting in the middle
subsequent offsets become invalid when a message is inserted in the
middle, so the index must be invalidated (adjusting the offsets on the
fly doesn't seem worth it).
also, there is no point in updating the index if it is already invalid.
Task-number: QTBUG-45831
Change-Id: I9733cb3235c6b8b09dee7eae4d2ecf0a0cdda528
Reviewed-by: hjk <hjk@theqtcompany.com>
-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" |