File: TestTableLayout.h

package info (click to toggle)
calligra 1%3A3.2.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 260,432 kB
  • sloc: cpp: 650,911; xml: 27,662; python: 6,044; perl: 2,724; yacc: 1,817; ansic: 1,325; sh: 1,277; lex: 1,107; ruby: 1,010; javascript: 495; makefile: 24
file content (141 lines) | stat: -rw-r--r-- 4,810 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*
 *  This file is part of Calligra tests
 *
 *  Copyright (C) 2006-2010 Thomas Zander <zander@kde.org>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
#ifndef TESTTABLELAYOUT_H
#define TESTTABLELAYOUT_H

#include <QObject>

#include <KoTextDocumentLayout.h>
#include <KoTextLayoutRootArea.h>
#include <KoTextLayoutTableArea.h>

class KoStyleManager;
class KoTableStyle;
class QTextDocument;
class QTextTable;

#define ROUNDING 0.126

class TestTableLayout : public QObject
{
    Q_OBJECT
public:
    TestTableLayout() {}

private Q_SLOTS:
    void initTestCase();
    void cleanupTestCase();

    /**
     * make sure our private method setupTest() does what we think it does
     */
    void testSetupTest();

    /**
     * Test merged cells. In this testcase the table is modelled after a special case where we happened
     * to end in an infinite layout-loop in the past. The loop was caused by us not being able to place
     * content in a cell and therefore we keeped on to ask for new root-areas. This test should verify
     * exactly this case.
     */
    void testMergedCells();
    /**
     * If no column-width is defined then the available width should be distributed among
     * the available columns. Since the provided rootArea's have a width of 200 and we
     * have 3 columns it is expected that every of the columns has a width of 200/3.
     */
    void testColumnWidthUndefined();

    /**
     * If the column-width is explicit defined then we expect that those widths are used.
     */
    void testColumnWidthFixed();

    /**
     * Test fixed column-width of zero.
     */
    void testColumnWidthFixedZero();

    /**
     * If the table-width is not defined then the table get's the width of it's parent
     * what is the rootArea in our case. If now the defined fixed column-width's are
     * in total larger then those table-width then they need to be shrink proportional
     * to match into the available table-width.
     */
    void testColumnWidthFixedShrink();

    /**
     * Test relative column-width.
     */
    void testColumnWidthRelative();

    /**
      * Test fixed row height. The row is smaller then the text that is within the cells. Expected
      * is that the resulting table will still match to the available space and won't be spread
      * over multiple pages. This tests for bug #275409.
      */
    void testRowHeightFixed();

    /**
     * Test minimum row-height.
     */
    void testRowHeightMinimum();

    void testOneTableNeedsTwoRootAreas();
    void testTwoTablesNeedsTwoRootAreas();
    void testMergedRowsSpansAreas();
    void testMergedRowsSpansAreas2();
    void testTwoTablesMergedRowsSpansAreas();
    void testTwoTablesMergedRowsSpansThreeAreas();
    void testRowHeightLargerThanAreaHeight();

    // With header rows
    /// Table consisting of a single header row
    void testSingleHeaderRow();
    /// Table consisting of a two header rows
    void testMultipleHeaderRows();
    /// Table consisting two rows with a single header row
    void testTableWithSingleHeaderRow();
    /// Table consisting three rows with two header rows
    void testTableWithMultipleHeaderRow();
    /// Table consisting of a single header row
    /// with height > root area height
    void testHeaderRowHeightLargerThanAreaHeight();

private:
    QTextCursor setupTest();
    void setupTest(const QString &mergedText, const QString &topRightText, const QString &midRightText, const QString &bottomLeftText, const QString &bottomMidText, const QString &bottomRightText, KoTableStyle* tableStyle = 0);
    QTextTable *addTable(QTextCursor cursor, int rows, int columns, KoTableStyle* tableStyle = 0);

private:
    QTextDocument *m_doc;
    KoTextDocumentLayout *m_layout;
    QTextBlock m_block;
    QTextBlock mergedCellBlock() const;
    QTextBlock topRightCellBlock() const;
    QTextBlock midRightCellBlock() const;
    QTextBlock bottomLeftCellBlock() const;
    QTextBlock bottomMidCellBlock() const;
    QTextBlock bottomRightCellBlock() const;
    QString m_loremIpsum;
    KoStyleManager *m_styleManager;
    QTextTable *m_table;
};

#endif