From a6ed9b418d1b4464f088b378e5bdb96ec420db6c Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 27 Apr 2015 20:04:26 +0200 Subject: [PATCH] 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 --- src/linguist/shared/translator.cpp | 7 ++++++- tests/auto/linguist/lconvert/data/idxmerge-add.ts | 17 +++++++++++++++++ tests/auto/linguist/lconvert/data/idxmerge.ts | 17 +++++++++++++++++ tests/auto/linguist/lconvert/data/idxmerge.ts.out | 22 ++++++++++++++++++++++ tests/auto/linguist/lconvert/tst_lconvert.cpp | 12 ++++++++++++ 5 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 tests/auto/linguist/lconvert/data/idxmerge-add.ts create mode 100644 tests/auto/linguist/lconvert/data/idxmerge.ts create mode 100644 tests/auto/linguist/lconvert/data/idxmerge.ts.out diff --git a/src/linguist/shared/translator.cpp b/src/linguist/shared/translator.cpp index f976596..ad66663 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 0000000..bc4910a --- /dev/null +++ b/tests/auto/linguist/lconvert/data/idxmerge-add.ts @@ -0,0 +1,17 @@ + + + + + a + + + Second String + + + + + Duplicated String + + + + diff --git a/tests/auto/linguist/lconvert/data/idxmerge.ts b/tests/auto/linguist/lconvert/data/idxmerge.ts new file mode 100644 index 0000000..0784355 --- /dev/null +++ b/tests/auto/linguist/lconvert/data/idxmerge.ts @@ -0,0 +1,17 @@ + + + + + a + + + First String + + + + + Duplicated String + + + + 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 0000000..fa4c7dd --- /dev/null +++ b/tests/auto/linguist/lconvert/data/idxmerge.ts.out @@ -0,0 +1,22 @@ + + + + + a + + + First String + + + + + Second String + + + + + Duplicated String + + + + diff --git a/tests/auto/linguist/lconvert/tst_lconvert.cpp b/tests/auto/linguist/lconvert/tst_lconvert.cpp index d44de1e..98f92d1 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" -- 2.7.4