summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/testlib/doc/src/qttestlib-manual.qdoc4
-rw-r--r--src/testlib/qtesttable.cpp15
2 files changed, 19 insertions, 0 deletions
diff --git a/src/testlib/doc/src/qttestlib-manual.qdoc b/src/testlib/doc/src/qttestlib-manual.qdoc
index 0098fdcc80..6112d3e424 100644
--- a/src/testlib/doc/src/qttestlib-manual.qdoc
+++ b/src/testlib/doc/src/qttestlib-manual.qdoc
@@ -731,6 +731,10 @@
the type of the column whose value it supplies. If any assertion fails,
the test is aborted.
+ The names of rows and columns, in a given test function's data table, should
+ be unique: if two rows share a name, or two columns share a name, a warning
+ will (since Qt 6.5) be produced.
+
\section1 Rewriting the Test Function
Our test function can now be rewritten:
diff --git a/src/testlib/qtesttable.cpp b/src/testlib/qtesttable.cpp
index 934d1797c7..6950b2494e 100644
--- a/src/testlib/qtesttable.cpp
+++ b/src/testlib/qtesttable.cpp
@@ -37,6 +37,7 @@ public:
void addColumn(int elemType, const char *elemName) { elementList.push_back(Element(elemName, elemType)); }
void addRow(QTestData *data) { dataList.push_back(data); }
+ bool hasRow(const char *name) const;
static QTestTable *currentTestTable;
static QTestTable *gTable;
@@ -49,6 +50,8 @@ void QTestTable::addColumn(int type, const char *name)
{
QTEST_ASSERT(type);
QTEST_ASSERT(name);
+ if (indexOf(name) != -1)
+ qWarning() << "Duplicate data column" << name << "- please rename.";
d->addColumn(type, name);
}
@@ -70,6 +73,9 @@ bool QTestTable::isEmpty() const
QTestData *QTestTable::newData(const char *tag)
{
+ if (d->hasRow(tag))
+ qWarning() << "Duplicate data tag" << tag << "- please rename.";
+
QTestData *dt = new QTestData(tag, this);
d->addRow(dt);
return dt;
@@ -110,10 +116,19 @@ public:
bool operator()(const QTestTablePrivate::Element &e) const
{ return !strcmp(e.name, m_needle); }
+ bool operator()(const QTestData *e) const
+ { return !strcmp(e->dataTag(), m_needle); }
+
private:
const char *m_needle;
};
+bool QTestTablePrivate::hasRow(const char *rowName) const
+{
+ QTEST_ASSERT(rowName);
+ return std::find_if(dataList.begin(), dataList.end(), NamePredicate(rowName)) != dataList.end();
+}
+
int QTestTable::indexOf(const char *elementName) const
{
QTEST_ASSERT(elementName);