tests/auto/qtexttable/tst_qtexttable.cpp
changeset 33 3e2da88830cd
parent 18 2f34d5167611
--- a/tests/auto/qtexttable/tst_qtexttable.cpp	Tue Jul 06 15:10:48 2010 +0300
+++ b/tests/auto/qtexttable/tst_qtexttable.cpp	Wed Aug 18 10:37:55 2010 +0300
@@ -48,9 +48,14 @@
 #include <qtexttable.h>
 #include <qdebug.h>
 #include <qtextcursor.h>
+#include <qtextdocument.h>
+#include <qtextedit.h>
 
 //TESTED_FILES=
 
+typedef QList<int> IntList;
+Q_DECLARE_METATYPE(IntList)
+
 QT_FORWARD_DECLARE_CLASS(QTextDocument)
 
 class tst_QTextTable : public QObject
@@ -78,6 +83,7 @@
     void insertRows();
     void deleteInTable();
     void mergeCells();
+    void mergeAndInsert();
     void splitCells();
     void blocksForTableShouldHaveEmptyFormat();
     void removeTableByRemoveRows();
@@ -93,6 +99,9 @@
     void removeColumns3();
     void removeColumns4();
     void removeColumns5();
+    void removeColumnsInTableWithMergedRows();
+    void QTBUG11282_insertBeforeMergedEnding_data();
+    void QTBUG11282_insertBeforeMergedEnding();
 
 private:
     QTextTable *create2x2Table();
@@ -586,6 +595,16 @@
     QVERIFY(table->cellAt(0, 1) == table->cellAt(1, 1));
 }
 
+void tst_QTextTable::mergeAndInsert()
+{
+    QTextTable *table = cursor.insertTable(4,3);
+    table->mergeCells(0,1,3,2);
+    table->mergeCells(3,0,1,3);
+    //Don't crash !
+    table->insertColumns(1,2);
+    QCOMPARE(table->columns(), 5);
+}
+
 void tst_QTextTable::splitCells()
 {
     QTextTable *table = create4x4Table();
@@ -931,5 +950,55 @@
     QCOMPARE(table->cellAt(3, 2).firstPosition(), 11);
 }
 
+void tst_QTextTable::removeColumnsInTableWithMergedRows()
+{
+    QTextTable *table = cursor.insertTable(3, 4);
+    table->mergeCells(0, 0, 1, 4);
+    QCOMPARE(table->rows(), 3);
+    QCOMPARE(table->columns(), 4);
+
+    table->removeColumns(0, table->columns() - 1);
+
+    QCOMPARE(table->rows(), 3);
+    QCOMPARE(table->columns(), 1);
+}
+
+void tst_QTextTable::QTBUG11282_insertBeforeMergedEnding_data()
+{
+    QTest::addColumn<int>("rows");
+    QTest::addColumn<int>("columns");
+    QTest::addColumn<QList<int> >("merge");
+    QTest::addColumn<QList<int> >("insert");
+
+    QTest::newRow("2x3, merge two, insert one") << 2 << 3 << (QList<int>() << 1 << 2 << 2)
+            << (QList<int>() << 1 << 1) ;
+    QTest::newRow("3x4, merge three, insert one") << 3 << 4 << (QList<int>() << 1 << 3 << 3)
+            << (QList<int>() << 1 << 1) ;
+    QTest::newRow("4x3, merge two, insert two") << 4 << 3 << (QList<int>() << 1 << 4 << 2)
+            << (QList<int>() << 1 << 2) ;
+    QTest::newRow("4x4, merge middle two, insert one") << 4 << 4 << (QList<int>() << 1 << 4 << 2)
+            << (QList<int>() << 1 << 1) ;
+}
+
+void tst_QTextTable::QTBUG11282_insertBeforeMergedEnding()
+{
+    QFETCH(int, rows);
+    QFETCH(int, columns);
+    QFETCH(QList<int>, merge);
+    QFETCH(QList<int>, insert);
+    QTextTable *table = cursor.insertTable(rows, columns);
+    QTextEdit *textEdit = new QTextEdit;
+    textEdit->setDocument(doc);
+    textEdit->show();
+    QTest::qWaitForWindowShown(textEdit);
+    table->mergeCells(0,merge.at(0), merge.at(1), merge.at(2));
+    //Don't crash !
+    table->insertColumns(insert.at(0), insert.at(1));
+    //Check that the final size is what we expected
+    QCOMPARE(table->rows(), rows);
+    QCOMPARE(table->columns(), columns + insert.at(1));
+    delete textEdit;
+}
+
 QTEST_MAIN(tst_QTextTable)
 #include "tst_qtexttable.moc"