summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2015-04-27 20:04:26 +0200
committerOswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>2015-04-30 09:22:43 +0000
commita6ed9b418d1b4464f088b378e5bdb96ec420db6c (patch)
tree340e731984684982873a32a70b90dc5158bb369f
parent2d7a87870c5646e9a11f994e0f5e3dbe49228ece (diff)
downloadqttools-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.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"