From accc1acc8632e5b21114600b5bcb92cf74004097 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <olivier.goffart@nokia.com>
Date: Thu, 3 Feb 2011 16:17:26 +0100
Subject: tst_qsvgrenderer: works on shadowbuild

---
 tests/auto/qsvgrenderer/qsvgrenderer.pro     | 3 +++
 tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp | 8 ++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/tests/auto/qsvgrenderer/qsvgrenderer.pro b/tests/auto/qsvgrenderer/qsvgrenderer.pro
index 0b785e3..9f0f886 100644
--- a/tests/auto/qsvgrenderer/qsvgrenderer.pro
+++ b/tests/auto/qsvgrenderer/qsvgrenderer.pro
@@ -18,3 +18,6 @@ wince*|symbian {
    }
 }
 
+!symbian: {
+    DEFINES += SRCDIR=\\\"$$PWD/\\\"
+}
diff --git a/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp b/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
index 5928a09..9fbf2a0 100644
--- a/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
+++ b/tests/auto/qsvgrenderer/tst_qsvgrenderer.cpp
@@ -51,6 +51,10 @@
 #include <QPicture>
 #include <QXmlStreamReader>
 
+#ifndef SRCDIR
+#define SRCDIR
+#endif
+
 //TESTED_CLASS=
 //TESTED_FILES=
 
@@ -647,13 +651,13 @@ void tst_QSvgRenderer::gradientRefs()
 #ifndef QT_NO_COMPRESS
 void tst_QSvgRenderer::testGzLoading()
 {
-    QSvgRenderer renderer(QLatin1String("heart.svgz"));
+    QSvgRenderer renderer(QLatin1String(SRCDIR "heart.svgz"));
     QVERIFY(renderer.isValid());
 
     QSvgRenderer resourceRenderer(QLatin1String(":/heart.svgz"));
     QVERIFY(resourceRenderer.isValid());
 
-    QFile largeFileGz("large.svgz");
+    QFile largeFileGz(SRCDIR "large.svgz");
     largeFileGz.open(QIODevice::ReadOnly);
     QByteArray data = largeFileGz.readAll();
     QSvgRenderer autoDetectGzData(data);
-- 
cgit v0.12


From 9c61e9a40e774fe32b16c133a5cdd6b9d9d29d83 Mon Sep 17 00:00:00 2001
From: Michael Goddard <michael.goddard@nokia.com>
Date: Tue, 2 Nov 2010 12:14:03 +1000
Subject: QSqlTableModel/QSqlQueryModel and insertColumns problem.

After inserting a column, fetching data through QSqlTableModel was
off by one or more, since it passed the indexInQuery through to
QSQM.  Also, the headerData would sometimes return a blank string
for an inserted column, and sometimes the column number.

The autotests have been beefed up a little to check insertRows and
insertColumns play nicely.

Change-Id: I7399d4c4d94f958884b67ab9b39b5cf2485d8416
Task-number: QTBUG-12626
Reviewed-by: Charles Yin
---
 src/sql/models/qsqlquerymodel.cpp                |   6 +-
 src/sql/models/qsqltablemodel.cpp                |  10 +-
 tests/auto/qsqldatabase/tst_databases.h          |  24 ++++
 tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp |  31 ++++-
 tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp | 166 ++++++++++++++++++++++-
 5 files changed, 223 insertions(+), 14 deletions(-)

diff --git a/src/sql/models/qsqlquerymodel.cpp b/src/sql/models/qsqlquerymodel.cpp
index 8730192..9800e67 100644
--- a/src/sql/models/qsqlquerymodel.cpp
+++ b/src/sql/models/qsqlquerymodel.cpp
@@ -279,7 +279,11 @@ QVariant QSqlQueryModel::headerData(int section, Qt::Orientation orientation, in
             val = d->headers.value(section).value(Qt::EditRole);
         if (val.isValid())
             return val;
-        if (role == Qt::DisplayRole && d->rec.count() > section)
+
+        // See if it's an inserted column (iiq.column() != -1)
+        QModelIndex dItem = indexInQuery(createIndex(0, section));
+
+        if (role == Qt::DisplayRole && d->rec.count() > section && dItem.column() != -1)
             return d->rec.fieldName(section);
     }
     return QAbstractItemModel::headerData(section, orientation, role);
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp
index 3bb46cc..6f9c284 100644
--- a/src/sql/models/qsqltablemodel.cpp
+++ b/src/sql/models/qsqltablemodel.cpp
@@ -423,6 +423,10 @@ QVariant QSqlTableModel::data(const QModelIndex &index, int role) const
     if (!index.isValid() || (role != Qt::DisplayRole && role != Qt::EditRole))
         return QVariant();
 
+    // Problem.. we need to use QSQM::indexInQuery to handle inserted columns
+    // but inserted rows we need to handle
+    // and indexInQuery is not virtual (grrr) so any values we pass to QSQM need
+    // to handle the insertedRows
     QModelIndex item = indexInQuery(index);
 
     switch (d->strategy) {
@@ -450,7 +454,9 @@ QVariant QSqlTableModel::data(const QModelIndex &index, int role) const
             return var;
         break; }
     }
-    return QSqlQueryModel::data(item, role);
+
+    // We need to handle row mapping here, but not column mapping
+    return QSqlQueryModel::data(index.sibling(item.row(), index.column()), role);
 }
 
 /*!
@@ -1225,7 +1231,7 @@ int QSqlTableModel::rowCount(const QModelIndex &parent) const
 QModelIndex QSqlTableModel::indexInQuery(const QModelIndex &item) const
 {
     Q_D(const QSqlTableModel);
-    const QModelIndex it = QSqlQueryModel::indexInQuery(item);
+    const QModelIndex it = QSqlQueryModel::indexInQuery(item); // this adjusts columns only
     if (d->strategy == OnManualSubmit) {
         int rowOffset = 0;
         QSqlTableModelPrivate::CacheMap::ConstIterator i = d->cache.constBegin();
diff --git a/tests/auto/qsqldatabase/tst_databases.h b/tests/auto/qsqldatabase/tst_databases.h
index 5dcf754..350e0d0 100644
--- a/tests/auto/qsqldatabase/tst_databases.h
+++ b/tests/auto/qsqldatabase/tst_databases.h
@@ -51,6 +51,7 @@
 #include <QDir>
 #include <QVariant>
 #include <QDebug>
+#include <QSqlTableModel>
 
 #include <QtTest/QtTest>
 
@@ -166,6 +167,29 @@ public:
         return count;
     }
 
+    int fillTestTableWithStrategies( const QString& driverPrefix = QString() ) const
+    {
+        QTest::addColumn<QString>( "dbName" );
+        QTest::addColumn<int>("submitpolicy_i");
+        int count = 0;
+
+        for ( int i = 0; i < dbNames.count(); ++i ) {
+            QSqlDatabase db = QSqlDatabase::database( dbNames.at( i ) );
+
+            if ( !db.isValid() )
+                continue;
+
+            if ( driverPrefix.isEmpty() || db.driverName().startsWith( driverPrefix ) ) {
+                QTest::newRow( QString("%1 [field]").arg(dbNames.at( i )).toLatin1() ) << dbNames.at( i ) << (int)QSqlTableModel::OnFieldChange;
+                QTest::newRow( QString("%1 [row]").arg(dbNames.at( i )).toLatin1() ) << dbNames.at( i ) << (int)QSqlTableModel::OnRowChange;
+                QTest::newRow( QString("%1 [manual]").arg(dbNames.at( i )).toLatin1() ) << dbNames.at( i ) << (int)QSqlTableModel::OnManualSubmit;
+                ++count;
+            }
+        }
+
+        return count;
+    }
+
     void addDb( const QString& driver, const QString& dbName,
                 const QString& user = QString(), const QString& passwd = QString(),
                 const QString& host = QString(), int port = -1, const QString params = QString() )
diff --git a/tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp b/tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp
index 0ca1417..e876764 100644
--- a/tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp
+++ b/tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp
@@ -318,6 +318,11 @@ void tst_QSqlQueryModel::insertColumn()
     model.setQuery(QSqlQuery("select * from " + qTableName("test", __FILE__), db));
     model.fetchMore(); // necessary???
 
+    bool isToUpper = db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2");
+    const QString idColumn(isToUpper ? "ID" : "id");
+    const QString nameColumn(isToUpper ? "NAME" : "name");
+    const QString titleColumn(isToUpper ? "TITLE" : "title");
+
     QSignalSpy spy(&model, SIGNAL(columnsInserted(QModelIndex, int, int)));
 
     QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
@@ -325,6 +330,11 @@ void tst_QSqlQueryModel::insertColumn()
     QCOMPARE(model.data(model.index(0, 2)).toInt(), 1);
     QCOMPARE(model.data(model.index(0, 3)), QVariant());
 
+    QCOMPARE(model.headerData(0, Qt::Horizontal).toString(), idColumn);
+    QCOMPARE(model.headerData(1, Qt::Horizontal).toString(), nameColumn);
+    QCOMPARE(model.headerData(2, Qt::Horizontal).toString(), titleColumn);
+    QCOMPARE(model.headerData(3, Qt::Horizontal).toString(), QString("4"));
+
     QVERIFY(model.insertColumn(1));
 
     QCOMPARE(spy.count(), 1);
@@ -344,6 +354,12 @@ void tst_QSqlQueryModel::insertColumn()
     QCOMPARE(model.data(model.index(0, 3)).toInt(), 1);
     QCOMPARE(model.data(model.index(0, 4)), QVariant());
 
+    QCOMPARE(model.headerData(0, Qt::Horizontal).toString(), idColumn);
+    QCOMPARE(model.headerData(1, Qt::Horizontal).toString(), QString("2"));
+    QCOMPARE(model.headerData(2, Qt::Horizontal).toString(), nameColumn);
+    QCOMPARE(model.headerData(3, Qt::Horizontal).toString(), titleColumn);
+    QCOMPARE(model.headerData(4, Qt::Horizontal).toString(), QString("5"));
+
     QVERIFY(!model.insertColumn(-1));
     QVERIFY(!model.insertColumn(100));
     QVERIFY(!model.insertColumn(1, model.index(1, 1)));
@@ -378,14 +394,21 @@ void tst_QSqlQueryModel::insertColumn()
     QCOMPARE(model.indexInQuery(model.index(0, 5)).column(), -1);
     QCOMPARE(model.indexInQuery(model.index(0, 6)).column(), -1);
 
-    bool isToUpper = db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2");
     QCOMPARE(model.record().field(0).name(), QString());
-    QCOMPARE(model.record().field(1).name(), isToUpper ? QString("ID") : QString("id"));
+    QCOMPARE(model.record().field(1).name(), idColumn);
     QCOMPARE(model.record().field(2).name(), QString());
-    QCOMPARE(model.record().field(3).name(), isToUpper ? QString("NAME") : QString("name"));
-    QCOMPARE(model.record().field(4).name(), isToUpper ? QString("TITLE") : QString("title"));
+    QCOMPARE(model.record().field(3).name(), nameColumn);
+    QCOMPARE(model.record().field(4).name(), titleColumn);
     QCOMPARE(model.record().field(5).name(), QString());
     QCOMPARE(model.record().field(6).name(), QString());
+
+    QCOMPARE(model.headerData(0, Qt::Horizontal).toString(), QString("1"));
+    QCOMPARE(model.headerData(1, Qt::Horizontal).toString(), idColumn);
+    QCOMPARE(model.headerData(2, Qt::Horizontal).toString(), QString("3"));
+    QCOMPARE(model.headerData(3, Qt::Horizontal).toString(), nameColumn);
+    QCOMPARE(model.headerData(4, Qt::Horizontal).toString(), titleColumn);
+    QCOMPARE(model.headerData(5, Qt::Horizontal).toString(), QString("6"));
+    QCOMPARE(model.headerData(6, Qt::Horizontal).toString(), QString("7"));
 }
 
 void tst_QSqlQueryModel::record()
diff --git a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp
index f9fcaf0..1821d9c 100644
--- a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp
+++ b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp
@@ -78,11 +78,13 @@ private slots:
 
     void select_data() { generic_data(); }
     void select();
+    void insertColumns_data() { generic_data_with_strategies(); }
+    void insertColumns();
     void submitAll_data() { generic_data(); }
     void submitAll();
     void setRecord_data()  { generic_data(); }
     void setRecord();
-    void insertRow_data() { generic_data(); }
+    void insertRow_data() { generic_data_with_strategies(); }
     void insertRow();
     void insertRecord_data() { generic_data(); }
     void insertRecord();
@@ -130,6 +132,7 @@ private slots:
     void insertBeforeDelete();
 private:
     void generic_data(const QString& engine=QString());
+    void generic_data_with_strategies(const QString& engine=QString());
 };
 
 tst_QSqlTableModel::tst_QSqlTableModel()
@@ -227,7 +230,17 @@ void tst_QSqlTableModel::recreateTestTables()
 void tst_QSqlTableModel::generic_data(const QString &engine)
 {
     if ( dbs.fillTestTable(engine) == 0 ) {
-        if(engine.isEmpty())
+        if (engine.isEmpty())
+           QSKIP( "No database drivers are available in this Qt configuration", SkipAll );
+        else
+           QSKIP( (QString("No database drivers of type %1 are available in this Qt configuration").arg(engine)).toLocal8Bit(), SkipAll );
+    }
+}
+
+void tst_QSqlTableModel::generic_data_with_strategies(const QString &engine)
+{
+    if ( dbs.fillTestTableWithStrategies(engine) == 0 ) {
+        if (engine.isEmpty())
            QSKIP( "No database drivers are available in this Qt configuration", SkipAll );
         else
            QSKIP( (QString("No database drivers of type %1 are available in this Qt configuration").arg(engine)).toLocal8Bit(), SkipAll );
@@ -289,6 +302,81 @@ void tst_QSqlTableModel::select()
     QCOMPARE(model.data(model.index(3, 3)), QVariant());
 }
 
+void tst_QSqlTableModel::insertColumns()
+{
+    // Just like the select test, with extra stuff
+    QFETCH(QString, dbName);
+    QFETCH(int, submitpolicy_i);
+    QSqlTableModel::EditStrategy submitpolicy = (QSqlTableModel::EditStrategy) submitpolicy_i;
+    QSqlDatabase db = QSqlDatabase::database(dbName);
+    CHECK_DATABASE(db);
+
+    QSqlTableModel model(0, db);
+    model.setTable(test);
+    model.setSort(0, Qt::AscendingOrder);
+    model.setEditStrategy(submitpolicy);
+
+    QVERIFY_SQL(model, select());
+
+    QCOMPARE(model.rowCount(), 3);
+    QCOMPARE(model.columnCount(), 3);
+
+    QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(0, 2)).toInt(), 1);
+    QCOMPARE(model.data(model.index(0, 3)), QVariant());
+
+    QCOMPARE(model.data(model.index(1, 0)).toInt(), 2);
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(1, 2)).toInt(), 2);
+    QCOMPARE(model.data(model.index(1, 3)), QVariant());
+
+    QCOMPARE(model.data(model.index(2, 0)).toInt(), 3);
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi"));
+    QCOMPARE(model.data(model.index(2, 2)).toInt(), 3);
+    QCOMPARE(model.data(model.index(2, 3)), QVariant());
+
+    QCOMPARE(model.data(model.index(3, 0)), QVariant());
+    QCOMPARE(model.data(model.index(3, 1)), QVariant());
+    QCOMPARE(model.data(model.index(3, 2)), QVariant());
+    QCOMPARE(model.data(model.index(3, 3)), QVariant());
+
+    // Now add a column at 0 and 2
+    model.insertColumn(0);
+    model.insertColumn(2);
+
+    QCOMPARE(model.rowCount(), 3);
+    QCOMPARE(model.columnCount(), 5);
+
+    QCOMPARE(model.data(model.index(0, 0)), QVariant());
+    QCOMPARE(model.data(model.index(0, 1)).toInt(), 1);
+    QCOMPARE(model.data(model.index(0, 2)), QVariant());
+    QCOMPARE(model.data(model.index(0, 3)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(0, 4)).toInt(), 1);
+    QCOMPARE(model.data(model.index(0, 5)), QVariant());
+
+    QCOMPARE(model.data(model.index(1, 0)), QVariant());
+    QCOMPARE(model.data(model.index(1, 1)).toInt(), 2);
+    QCOMPARE(model.data(model.index(1, 2)), QVariant());
+    QCOMPARE(model.data(model.index(1, 3)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(1, 4)).toInt(), 2);
+    QCOMPARE(model.data(model.index(1, 5)), QVariant());
+
+    QCOMPARE(model.data(model.index(2, 0)), QVariant());
+    QCOMPARE(model.data(model.index(2, 1)).toInt(), 3);
+    QCOMPARE(model.data(model.index(2, 2)), QVariant());
+    QCOMPARE(model.data(model.index(2, 3)).toString(), QString("vohi"));
+    QCOMPARE(model.data(model.index(2, 4)).toInt(), 3);
+    QCOMPARE(model.data(model.index(2, 5)), QVariant());
+
+    QCOMPARE(model.data(model.index(3, 0)), QVariant());
+    QCOMPARE(model.data(model.index(3, 1)), QVariant());
+    QCOMPARE(model.data(model.index(3, 2)), QVariant());
+    QCOMPARE(model.data(model.index(3, 3)), QVariant());
+    QCOMPARE(model.data(model.index(3, 4)), QVariant());
+    QCOMPARE(model.data(model.index(3, 5)), QVariant());
+}
+
 void tst_QSqlTableModel::setRecord()
 {
     QFETCH(QString, dbName);
@@ -339,26 +427,90 @@ void tst_QSqlTableModel::setRecord()
 void tst_QSqlTableModel::insertRow()
 {
     QFETCH(QString, dbName);
+    QFETCH(int, submitpolicy_i);
+    QSqlTableModel::EditStrategy submitpolicy = (QSqlTableModel::EditStrategy) submitpolicy_i;
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
 
     QSqlTableModel model(0, db);
-    model.setEditStrategy(QSqlTableModel::OnRowChange);
+    model.setEditStrategy(submitpolicy);
     model.setTable(test);
     model.setSort(0, Qt::AscendingOrder);
     QVERIFY_SQL(model, select());
 
+    QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(0, 2)).toInt(), 1);
+    QCOMPARE(model.data(model.index(1, 0)).toInt(), 2);
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(1, 2)).toInt(), 2);
+    QCOMPARE(model.data(model.index(2, 0)).toInt(), 3);
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi"));
+    QCOMPARE(model.data(model.index(2, 2)).toInt(), 3);
+
     QVERIFY(model.insertRow(2));
+
+    QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(0, 2)).toInt(), 1);
+    QCOMPARE(model.data(model.index(1, 0)).toInt(), 2);
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(1, 2)).toInt(), 2);
+    QCOMPARE(model.data(model.index(2, 0)).toInt(), 0);
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString());
+    QCOMPARE(model.data(model.index(2, 2)).toInt(), 0);
+    QCOMPARE(model.data(model.index(3, 0)).toInt(), 3);
+    QCOMPARE(model.data(model.index(3, 1)).toString(), QString("vohi"));
+    QCOMPARE(model.data(model.index(3, 2)).toInt(), 3);
+
     QSqlRecord rec = model.record(1);
     rec.setValue(0, 42);
-    rec.setValue(1, QString("vohi"));
+    rec.setValue(1, QString("francis"));
+
+    // FieldChange updates immediately and resorts
+    // Row/Manual submit does not resort
     QVERIFY(model.setRecord(2, rec));
 
-    QCOMPARE(model.data(model.index(2, 0)).toInt(), 42);
-    QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi"));
-    QCOMPARE(model.data(model.index(2, 2)).toInt(), 2);
+    QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(0, 2)).toInt(), 1);
+    QCOMPARE(model.data(model.index(1, 0)).toInt(), 2);
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(1, 2)).toInt(), 2);
+
+    // See comment above setRecord
+    if (submitpolicy == QSqlTableModel::OnFieldChange) {
+        QCOMPARE(model.data(model.index(2, 0)).toInt(), 3);
+        QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi"));
+        QCOMPARE(model.data(model.index(2, 2)).toInt(), 3);
+        QCOMPARE(model.data(model.index(3, 0)).toInt(), 42);
+        QCOMPARE(model.data(model.index(3, 1)).toString(), QString("francis"));
+        QCOMPARE(model.data(model.index(3, 2)).toInt(), 2);
+    } else {
+        QCOMPARE(model.data(model.index(2, 0)).toInt(), 42);
+        QCOMPARE(model.data(model.index(2, 1)).toString(), QString("francis"));
+        QCOMPARE(model.data(model.index(2, 2)).toInt(), 2);
+        QCOMPARE(model.data(model.index(3, 0)).toInt(), 3);
+        QCOMPARE(model.data(model.index(3, 1)).toString(), QString("vohi"));
+        QCOMPARE(model.data(model.index(3, 2)).toInt(), 3);
+    }
 
     QVERIFY(model.submitAll());
+
+    // After the submit we should have the resorted view
+    QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(0, 2)).toInt(), 1);
+    QCOMPARE(model.data(model.index(1, 0)).toInt(), 2);
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(1, 2)).toInt(), 2);
+    QCOMPARE(model.data(model.index(2, 0)).toInt(), 3);
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi"));
+    QCOMPARE(model.data(model.index(2, 2)).toInt(), 3);
+    QCOMPARE(model.data(model.index(3, 0)).toInt(), 42);
+    QCOMPARE(model.data(model.index(3, 1)).toString(), QString("francis"));
+    QCOMPARE(model.data(model.index(3, 2)).toInt(), 2);
+
 }
 
 void tst_QSqlTableModel::insertRecord()
-- 
cgit v0.12


From 3bed865c35d8eb920ba5a68276fdf1690c834a64 Mon Sep 17 00:00:00 2001
From: Michael Goddard <michael.goddard@nokia.com>
Date: Wed, 3 Nov 2010 11:58:36 +1000
Subject: Make sure that setRecord emits dataChanged() with OnManualSubmit.

Since the change is immediately visible through data(), this is needed
so that QSortFilterProxyModel etc work correctly.

Change-Id: Ied7afce2e6a1f516b502d3501f9d214df54e52f2
Task-number: QTBUG-14831
Reviewed-by: Charles Yin
---
 src/sql/models/qsqltablemodel.cpp                | 3 +++
 tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp | 9 +++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp
index 6f9c284..61cd1d3 100644
--- a/src/sql/models/qsqltablemodel.cpp
+++ b/src/sql/models/qsqltablemodel.cpp
@@ -1338,6 +1338,9 @@ bool QSqlTableModel::setRecord(int row, const QSqlRecord &record)
             else
                 mrow.rec.setValue(idx, record.value(i));
         }
+
+        if (isOk)
+            emit dataChanged(createIndex(row, 0), createIndex(row, columnCount() - 1));
         return isOk; }
     }
     return false;
diff --git a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp
index 1821d9c..9428ef4 100644
--- a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp
+++ b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp
@@ -402,9 +402,14 @@ void tst_QSqlTableModel::setRecord()
             rec.setValue(2, rec.value(2).toString() + 'X');
             QVERIFY(model.setRecord(i, rec));
 
-            if ((QSqlTableModel::EditStrategy)submitpolicy == QSqlTableModel::OnManualSubmit)
+            if ((QSqlTableModel::EditStrategy)submitpolicy == QSqlTableModel::OnManualSubmit) {
+                // setRecord should emit dataChanged() itself for manualSubmit
+                QCOMPARE(spy.count(), 1);
+                QCOMPARE(spy.at(0).count(), 2);
+                QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(0)), model.index(i, 0));
+                QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(1)), model.index(i, rec.count() - 1));
                 QVERIFY(model.submitAll());
-            else if ((QSqlTableModel::EditStrategy)submitpolicy == QSqlTableModel::OnRowChange && i == model.rowCount() -1)
+            } else if ((QSqlTableModel::EditStrategy)submitpolicy == QSqlTableModel::OnRowChange && i == model.rowCount() -1)
                 model.submit();
             else {
                 // dataChanged() is not emitted when submitAll() is called
-- 
cgit v0.12


From 741a5114c2c6bf4d89068d861db90c456cce371b Mon Sep 17 00:00:00 2001
From: Michael Goddard <michael.goddard@nokia.com>
Date: Wed, 3 Nov 2010 15:45:43 +1000
Subject: Update some documentation about what happens with
 select()/setQuery().

Change-Id: I5f1afada766d40273526f2cd7537ad68d5f9d09a
Task-number: QTBUG-12094
Reviewed-by: Charles Yin
---
 src/sql/models/qsqlquerymodel.cpp | 2 ++
 src/sql/models/qsqltablemodel.cpp | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/src/sql/models/qsqlquerymodel.cpp b/src/sql/models/qsqlquerymodel.cpp
index 9800e67..fbc31ff 100644
--- a/src/sql/models/qsqlquerymodel.cpp
+++ b/src/sql/models/qsqlquerymodel.cpp
@@ -310,6 +310,8 @@ void QSqlQueryModel::queryChange()
     lastError() can be used to retrieve verbose information if there
     was an error setting the query.
 
+    \note Calling setQuery() will remove any inserted columns.
+
     \sa query(), QSqlQuery::isActive(), QSqlQuery::setForwardOnly(), lastError()
 */
 void QSqlQueryModel::setQuery(const QSqlQuery &query)
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp
index 61cd1d3..c6efbad 100644
--- a/src/sql/models/qsqltablemodel.cpp
+++ b/src/sql/models/qsqltablemodel.cpp
@@ -393,6 +393,8 @@ QString QSqlTableModel::tableName() const
     specified filter and sort condition, and returns true if successful; otherwise
     returns false.
 
+    \note Calling select() will revert any unsubmitted changes and remove any inserted columns.
+
     \sa setTable(), setFilter(), selectStatement()
 */
 bool QSqlTableModel::select()
-- 
cgit v0.12


From d300e8208928084b62bbde01fb81bd66bc967bc8 Mon Sep 17 00:00:00 2001
From: Michael Goddard <michael.goddard@nokia.com>
Date: Thu, 4 Nov 2010 15:47:51 +1000
Subject: Try to document that invalid database arguments use the default
 database.

Some places documented this, some didn't.

Change-Id: Id66678dbcd9af6ec9687db745ba6f5506e951d1d
Task-number: QTBUG-3240
Reviewed-by: Charles Yin
---
 src/sql/kernel/qsqlquery.cpp      | 3 ++-
 src/sql/models/qsqlquerymodel.cpp | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/sql/kernel/qsqlquery.cpp b/src/sql/kernel/qsqlquery.cpp
index 4b92a3e..3cdc8b1 100644
--- a/src/sql/kernel/qsqlquery.cpp
+++ b/src/sql/kernel/qsqlquery.cpp
@@ -272,7 +272,7 @@ static void qInit(QSqlQuery *q, const QString& query, QSqlDatabase db)
 
 /*!
     Constructs a QSqlQuery object using the SQL \a query and the
-    database \a db. If \a db is not specified, the application's
+    database \a db. If \a db is not specified, or is invalid, the application's
     default database is used. If \a query is not an empty string, it
     will be executed.
 
@@ -286,6 +286,7 @@ QSqlQuery::QSqlQuery(const QString& query, QSqlDatabase db)
 
 /*!
     Constructs a QSqlQuery object using the database \a db.
+    If \a db is invalid, the application's default database will be used.
 
     \sa QSqlDatabase
 */
diff --git a/src/sql/models/qsqlquerymodel.cpp b/src/sql/models/qsqlquerymodel.cpp
index fbc31ff..d1051de 100644
--- a/src/sql/models/qsqlquerymodel.cpp
+++ b/src/sql/models/qsqlquerymodel.cpp
@@ -376,7 +376,8 @@ void QSqlQueryModel::setQuery(const QSqlQuery &query)
 /*! \overload
 
     Executes the query \a query for the given database connection \a
-    db. If no database is specified, the default connection is used.
+    db. If no database (or an invalid database) is specified, the
+    default connection is used.
 
     lastError() can be used to retrieve verbose information if there
     was an error setting the query.
-- 
cgit v0.12


From 594e46bdd36d2964c20cbc5a8de32abd5e343f43 Mon Sep 17 00:00:00 2001
From: Michael Goddard <michael.goddard@nokia.com>
Date: Thu, 4 Nov 2010 16:34:02 +1000
Subject: Mention the requirement for OCI when building the SQL oracle driver.

As suggested by Jean-Louis Mounier.

Change-Id: I2284d00453ddcb981fe3e1b710d4453323fe1e9e
Task-number: QTBUG-8875
Reviewed-by: Charles Yin
---
 doc/src/sql-programming/sql-driver.qdoc | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/doc/src/sql-programming/sql-driver.qdoc b/doc/src/sql-programming/sql-driver.qdoc
index 1476491..a4bcb97 100644
--- a/doc/src/sql-programming/sql-driver.qdoc
+++ b/doc/src/sql-programming/sql-driver.qdoc
@@ -314,7 +314,9 @@
     \section3 How to Build the OCI Plugin on Windows
 
     Choosing the option "Programmer" in the Oracle Client Installer from
-    the Oracle Client Installation CD is sufficient to build the plugin.
+    the Oracle Client Installation CD is generally sufficient to build the
+    plugin.  For some versions of Oracle Client, you may also need to select
+    the "Call Interface (OCI)" option if it is available.
 
     Build the plugin as follows (here it is assumed that Oracle Client is
     installed in \c{C:\oracle}):
-- 
cgit v0.12


From bdd4a9149789f60974603e1f7621d51378f0a108 Mon Sep 17 00:00:00 2001
From: Michael Goddard <michael.goddard@nokia.com>
Date: Wed, 17 Nov 2010 17:30:40 +1000
Subject: Fix some removeRows issues with QSqlTableModel.

Added some better unit testing around the problem areas.

Change-Id: Ie4749da298aebbae6aec9558ebe8c8f2196c705f
Task-number: QTBUG-14916
Reviewed-by: Charles Yin
---
 src/sql/models/qsqltablemodel.cpp                |   7 +-
 tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp | 175 ++++++++++++++++++++---
 2 files changed, 158 insertions(+), 24 deletions(-)

diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp
index c6efbad..4df1d63 100644
--- a/src/sql/models/qsqltablemodel.cpp
+++ b/src/sql/models/qsqltablemodel.cpp
@@ -1103,9 +1103,12 @@ bool QSqlTableModel::removeRows(int row, int count, const QModelIndex &parent)
             int idx = row + i;
             if (idx >= rowCount())
                 return false;
-            if (d->cache.value(idx).op == QSqlTableModelPrivate::Insert)
+            if (d->cache.value(idx).op == QSqlTableModelPrivate::Insert) {
                 revertRow(idx);
-            else {
+                // Reverting a row means all the other cache entries have been adjusted downwards
+                // so fake this by adjusting row
+                --row;
+            } else {
                 d->cache[idx].op = QSqlTableModelPrivate::Delete;
                 d->cache[idx].primaryValues = d->primaryValues(indexInQuery(createIndex(idx, 0)).row());
                 emit headerDataChanged(Qt::Vertical, idx, idx);
diff --git a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp
index 9428ef4..f7d2180 100644
--- a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp
+++ b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp
@@ -94,8 +94,10 @@ private slots:
     void removeRow();
     void removeRows_data() { generic_data(); }
     void removeRows();
-    void removeInsertedRow_data() { generic_data(); }
+    void removeInsertedRow_data() { generic_data_with_strategies(); }
     void removeInsertedRow();
+    void removeInsertedRows_data() { generic_data(); }
+    void removeInsertedRows();
     void setFilter_data() { generic_data(); }
     void setFilter();
     void setInvalidFilter_data() { generic_data(); }
@@ -695,10 +697,19 @@ void tst_QSqlTableModel::removeRows()
     QCOMPARE(model.rowCount(), 3);
 
     QSignalSpy beforeDeleteSpy(&model, SIGNAL(beforeDelete(int)));
+
+    // Make sure wrong stuff is ok
+    QVERIFY(!model.removeRows(-1,1)); // negative start
+    QVERIFY(!model.removeRows(-1, 0)); // negative start, and zero count
+    QVERIFY(!model.removeRows(1, 0)); // zero count
+    QVERIFY(!model.removeRows(5, 1)); // past end (causes a beforeDelete to be emitted)
+    QVERIFY(!model.removeRows(1, 0, model.index(2, 0))); // can't pass a valid modelindex
+
     QVERIFY_SQL(model, removeRows(0, 2));
-    QVERIFY(beforeDeleteSpy.count() == 2);
-    QVERIFY(beforeDeleteSpy.at(0).at(0).toInt() == 0);
-    QVERIFY(beforeDeleteSpy.at(1).at(0).toInt() == 1);
+    QCOMPARE(beforeDeleteSpy.count(), 3);
+    QVERIFY(beforeDeleteSpy.at(0).at(0).toInt() == 5);
+    QVERIFY(beforeDeleteSpy.at(1).at(0).toInt() == 0);
+    QVERIFY(beforeDeleteSpy.at(2).at(0).toInt() == 1);
     QCOMPARE(model.rowCount(), 1);
     QCOMPARE(model.data(model.index(0, 1)).toString(), QString("vohi"));
     model.clear();
@@ -712,6 +723,13 @@ void tst_QSqlTableModel::removeRows()
 
     // When the edit strategy is OnManualSubmit the beforeDelete() signal
     // isn't emitted until submitAll() is called.
+
+    QVERIFY(!model.removeRows(-1,1)); // negative start
+    QVERIFY(!model.removeRows(-1, 0)); // negative start, and zero count
+    QVERIFY(!model.removeRows(1, 0)); // zero count
+    QVERIFY(!model.removeRows(5, 1)); // past end (DOESN'T cause a beforeDelete to be emitted)
+    QVERIFY(!model.removeRows(1, 0, model.index(2, 0))); // can't pass a valid modelindex
+
     qRegisterMetaType<Qt::Orientation>("Qt::Orientation");
     QSignalSpy headerDataChangedSpy(&model, SIGNAL(headerDataChanged(Qt::Orientation, int, int)));
     QVERIFY(model.removeRows(0, 2, QModelIndex()));
@@ -733,33 +751,146 @@ void tst_QSqlTableModel::removeRows()
 void tst_QSqlTableModel::removeInsertedRow()
 {
     QFETCH(QString, dbName);
+    QFETCH(int, submitpolicy_i);
+    QSqlTableModel::EditStrategy submitpolicy = (QSqlTableModel::EditStrategy) submitpolicy_i;
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
 
-    for (int i = 0; i <= 1; ++i) {
+    QSqlTableModel model(0, db);
+    model.setTable(test);
+    model.setSort(0, Qt::AscendingOrder);
 
-        QSqlTableModel model(0, db);
-        model.setTable(test);
-        model.setSort(0, Qt::AscendingOrder);
+    model.setEditStrategy(submitpolicy);
+    QVERIFY_SQL(model, select());
+    QCOMPARE(model.rowCount(), 3);
 
-        model.setEditStrategy(i == 0
-                ? QSqlTableModel::OnRowChange : QSqlTableModel::OnManualSubmit);
-        QVERIFY_SQL(model, select());
-        QCOMPARE(model.rowCount(), 3);
+    QVERIFY(model.insertRow(1));
+    QCOMPARE(model.rowCount(), 4);
 
-        QVERIFY(model.insertRow(1));
-        QCOMPARE(model.rowCount(), 4);
+    QVERIFY(model.removeRow(1));
+    QCOMPARE(model.rowCount(), 3);
 
-        QVERIFY(model.removeRow(1));
-        QCOMPARE(model.rowCount(), 3);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi"));
+}
 
-        QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
-        QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond"));
-        QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi"));
-        model.clear();
+void tst_QSqlTableModel::removeInsertedRows()
+{
+    QFETCH(QString, dbName);
+    QSqlDatabase db = QSqlDatabase::database(dbName);
+    CHECK_DATABASE(db);
 
-        recreateTestTables();
-    }
+    QSqlTableModel model(0, db);
+    model.setTable(test);
+    model.setSort(0, Qt::AscendingOrder);
+    model.setEditStrategy(QSqlTableModel::OnManualSubmit); // you can't insert more than one row otherwise
+    QVERIFY_SQL(model, select());
+    QCOMPARE(model.rowCount(), 3);
+
+    // First put two empty rows, and remove them one by one
+    QVERIFY(model.insertRows(1, 2));
+    QCOMPARE(model.rowCount(), 5);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString());
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString());
+    QCOMPARE(model.data(model.index(3, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(4, 1)).toString(), QString("vohi"));
+
+    QVERIFY(model.removeRow(1));
+    QCOMPARE(model.rowCount(), 4);
+
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString());
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(3, 1)).toString(), QString("vohi"));
+
+    QVERIFY(model.removeRow(1));
+    QCOMPARE(model.rowCount(), 3);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi"));
+
+    // Now put two empty rows, and remove them all at once
+    QVERIFY(model.insertRows(1, 2));
+    QCOMPARE(model.rowCount(), 5);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString());
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString());
+    QCOMPARE(model.data(model.index(3, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(4, 1)).toString(), QString("vohi"));
+
+    QVERIFY(model.removeRows(1, 2));
+    QCOMPARE(model.rowCount(), 3);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi"));
+
+
+    // Now put two empty rows, and remove one good and two empty
+    QVERIFY(model.insertRows(1, 2));
+    QCOMPARE(model.rowCount(), 5);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString());
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString());
+    QCOMPARE(model.data(model.index(3, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(4, 1)).toString(), QString("vohi"));
+
+    QVERIFY(model.removeRows(0, 3));
+    QVERIFY(model.submitAll()); // otherwise the remove of the real row doesn't work
+
+    QCOMPARE(model.rowCount(), 2);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString("vohi"));
+
+    // Reset back again
+    model.clear();
+    recreateTestTables();
+    model.setTable(test);
+    model.setSort(0, Qt::AscendingOrder);
+    model.setEditStrategy(QSqlTableModel::OnManualSubmit); // you can't insert more than one row otherwise
+    QVERIFY_SQL(model, select());
+    QCOMPARE(model.rowCount(), 3);
+
+    // Now two empty and one good
+    QVERIFY(model.insertRows(1, 2));
+    QCOMPARE(model.rowCount(), 5);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString());
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString());
+    QCOMPARE(model.data(model.index(3, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(4, 1)).toString(), QString("vohi"));
+
+    QVERIFY(model.removeRows(1, 3));
+    QVERIFY(model.submitAll());
+    QCOMPARE(model.rowCount(), 2);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString("vohi"));
+
+    // Reset back again
+    model.clear();
+    recreateTestTables();
+    model.setTable(test);
+    model.setSort(0, Qt::AscendingOrder);
+    model.setEditStrategy(QSqlTableModel::OnManualSubmit); // you can't insert more than one row otherwise
+    QVERIFY_SQL(model, select());
+    QCOMPARE(model.rowCount(), 3);
+
+    // one empty, one good, one empty
+    QVERIFY(model.insertRows(1, 1));
+    QVERIFY(model.insertRows(3, 1));
+    QCOMPARE(model.rowCount(), 5);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString());
+    QCOMPARE(model.data(model.index(2, 1)).toString(), QString("trond"));
+    QCOMPARE(model.data(model.index(3, 1)).toString(), QString());
+    QCOMPARE(model.data(model.index(4, 1)).toString(), QString("vohi"));
+
+    QVERIFY(model.removeRows(1, 3));
+    QVERIFY(model.submitAll());
+    QCOMPARE(model.rowCount(), 2);
+    QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+    QCOMPARE(model.data(model.index(1, 1)).toString(), QString("vohi"));
 }
 
 void tst_QSqlTableModel::emptyTable()
-- 
cgit v0.12


From 47a134b9a9136dc961dc5dd07e345aeb94b2d401 Mon Sep 17 00:00:00 2001
From: Michael Goddard <michael.goddard@nokia.com>
Date: Thu, 3 Feb 2011 12:33:27 +1000
Subject: Namespace compilation - OCI typedefs should be outside Qt namespace.

psql, sqlite2 drivers already do this correctly.

Change-Id: I1f02401432d5c39fa1572e2f6255941b8a67e591
Task-number: QTBUG-17076
Reviewed-by: Charles Yin
---
 src/sql/drivers/oci/qsql_oci.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/sql/drivers/oci/qsql_oci.h b/src/sql/drivers/oci/qsql_oci.h
index 51fd14c..22bd78d 100644
--- a/src/sql/drivers/oci/qsql_oci.h
+++ b/src/sql/drivers/oci/qsql_oci.h
@@ -54,6 +54,9 @@
 
 QT_BEGIN_HEADER
 
+typedef struct OCIEnv OCIEnv;
+typedef struct OCISvcCtx OCISvcCtx;
+
 QT_BEGIN_NAMESPACE
 
 class QOCIDriver;
@@ -61,9 +64,6 @@ class QOCICols;
 struct QOCIDriverPrivate;
 struct QOCIResultPrivate;
 
-typedef struct OCIEnv OCIEnv;
-typedef struct OCISvcCtx OCISvcCtx;
-
 class Q_EXPORT_SQLDRIVER_OCI QOCIResult : public QSqlCachedResult
 {
     friend class QOCIDriver;
-- 
cgit v0.12


From e9ab35ef663e9562385c974dcbeb7cf2d03ab70f Mon Sep 17 00:00:00 2001
From: Olivier Goffart <olivier.goffart@nokia.com>
Date: Fri, 4 Feb 2011 15:10:10 +0100
Subject: Move the QtHelp tests in its own profile

Reviewed-by: Sergio Ahumada
---
 tests/auto/auto.pro |  1 +
 tests/auto/gui.pro  | 10 ----------
 tests/auto/help.pro |  8 ++++++++
 3 files changed, 9 insertions(+), 10 deletions(-)
 create mode 100644 tests/auto/help.pro

diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
index c0004f7..c677249 100644
--- a/tests/auto/auto.pro
+++ b/tests/auto/auto.pro
@@ -19,4 +19,5 @@ contains(QT_CONFIG, multimedia):            SUBDIRS += multimedia.pro
 contains(QT_CONFIG, phonon):                SUBDIRS += phonon.pro
 contains(QT_CONFIG, svg):                   SUBDIRS += svg.pro
 contains(QT_CONFIG, declarative):           SUBDIRS += declarative.pro
+!symbian                                    SUBDIRS += help.pro
 
diff --git a/tests/auto/gui.pro b/tests/auto/gui.pro
index 802e74a..4b809fb 100644
--- a/tests/auto/gui.pro
+++ b/tests/auto/gui.pro
@@ -80,11 +80,6 @@ SUBDIRS=\
     qgroupbox \
     qguivariant \
     qheaderview \
-    qhelpcontentmodel \
-    qhelpenginecore \
-    qhelpgenerator \
-    qhelpindexmodel \
-    qhelpprojectdata \
     qicoimageformat \
     qicon \
     qimageiohandler \
@@ -221,10 +216,5 @@ win32:SUBDIRS -= qtextpiecetable
            qtextpiecetable \
 
 symbian:SUBDIRS -= \
-    qhelpcontentmodel \
-    qhelpenginecore \
-    qhelpgenerator \
-    qhelpindexmodel \
-    qhelpprojectdata \
     qsystemtrayicon \
 
diff --git a/tests/auto/help.pro b/tests/auto/help.pro
new file mode 100644
index 0000000..e6ee552
--- /dev/null
+++ b/tests/auto/help.pro
@@ -0,0 +1,8 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+    qhelpcontentmodel \
+    qhelpenginecore \
+    qhelpgenerator \
+    qhelpindexmodel \
+    qhelpprojectdata \
+
-- 
cgit v0.12