| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the Qt Charts module of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:GPL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU |
| ** General Public License version 3 or (at your option) any later version |
| ** approved by the KDE Free Qt Foundation. The licenses are as published by |
| ** the Free Software Foundation and appearing in the file LICENSE.GPL3 |
| ** included in the packaging of this file. Please review the following |
| ** information to ensure the GNU General Public License requirements will |
| ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #include <QtCore/QString> |
| #include <QtTest/QtTest> |
| |
| #include <QtCharts/QChart> |
| #include <QtCharts/QChartView> |
| #include <QtCharts/QBarSeries> |
| #include <QtCharts/QBarSet> |
| #include <QtCharts/QVBarModelMapper> |
| #include <QtCharts/QHBarModelMapper> |
| #include <QtGui/QStandardItemModel> |
| |
| QT_CHARTS_USE_NAMESPACE |
| |
| class tst_qbarmodelmapper : public QObject |
| { |
| Q_OBJECT |
| |
| public: |
| tst_qbarmodelmapper(); |
| void createVerticalMapper(); |
| void createHorizontalMapper(); |
| |
| private Q_SLOTS: |
| void initTestCase(); |
| void cleanupTestCase(); |
| void init(); |
| void cleanup(); |
| void verticalMapper_data(); |
| void verticalMapper(); |
| void verticalMapperCustomMapping_data(); |
| void verticalMapperCustomMapping(); |
| void horizontalMapper_data(); |
| void horizontalMapper(); |
| void horizontalMapperCustomMapping_data(); |
| void horizontalMapperCustomMapping(); |
| void seriesUpdated(); |
| void verticalModelInsertRows(); |
| void verticalModelRemoveRows(); |
| void verticalModelInsertColumns(); |
| void verticalModelRemoveColumns(); |
| void horizontalModelInsertRows(); |
| void horizontalModelRemoveRows(); |
| void horizontalModelInsertColumns(); |
| void horizontalModelRemoveColumns(); |
| void modelUpdateCell(); |
| void verticalMapperSignals(); |
| void horizontalMapperSignals(); |
| |
| private: |
| QStandardItemModel *m_model; |
| int m_modelRowCount; |
| int m_modelColumnCount; |
| |
| QVBarModelMapper *m_vMapper; |
| QHBarModelMapper *m_hMapper; |
| |
| QBarSeries *m_series; |
| QChart *m_chart; |
| QChartView *m_chartView; |
| }; |
| |
| tst_qbarmodelmapper::tst_qbarmodelmapper(): |
| m_model(0), |
| m_modelRowCount(10), |
| m_modelColumnCount(8), |
| m_vMapper(0), |
| m_hMapper(0), |
| m_series(0), |
| m_chart(0), |
| m_chartView(0) |
| { |
| } |
| |
| void tst_qbarmodelmapper::createVerticalMapper() |
| { |
| m_vMapper = new QVBarModelMapper; |
| QVERIFY(m_vMapper->model() == 0); |
| m_vMapper->setFirstBarSetColumn(0); |
| m_vMapper->setLastBarSetColumn(4); |
| m_vMapper->setModel(m_model); |
| m_vMapper->setSeries(m_series); |
| } |
| |
| void tst_qbarmodelmapper::createHorizontalMapper() |
| { |
| m_hMapper = new QHBarModelMapper; |
| QVERIFY(m_hMapper->model() == 0); |
| m_hMapper->setFirstBarSetRow(0); |
| m_hMapper->setLastBarSetRow(4); |
| m_hMapper->setModel(m_model); |
| m_hMapper->setSeries(m_series); |
| } |
| |
| void tst_qbarmodelmapper::init() |
| { |
| m_series = new QBarSeries; |
| m_chart->addSeries(m_series); |
| |
| m_model = new QStandardItemModel(m_modelRowCount, m_modelColumnCount, this); |
| for (int row = 0; row < m_modelRowCount; ++row) { |
| for (int column = 0; column < m_modelColumnCount; column++) { |
| m_model->setData(m_model->index(row, column), row * column); |
| } |
| } |
| } |
| |
| void tst_qbarmodelmapper::cleanup() |
| { |
| m_chart->removeSeries(m_series); |
| delete m_series; |
| m_series = 0; |
| |
| m_model->clear(); |
| m_model->deleteLater(); |
| m_model = 0; |
| |
| if (m_vMapper) { |
| m_vMapper->deleteLater(); |
| m_vMapper = 0; |
| } |
| |
| if (m_hMapper) { |
| m_hMapper->deleteLater(); |
| m_hMapper = 0; |
| } |
| } |
| |
| void tst_qbarmodelmapper::initTestCase() |
| { |
| m_chart = new QChart; |
| m_chartView = new QChartView(m_chart); |
| m_chartView->resize(200, 200); |
| m_chartView->show(); |
| } |
| |
| void tst_qbarmodelmapper::cleanupTestCase() |
| { |
| delete m_chartView; |
| QTest::qWait(1); // Allow final deleteLaters to run |
| } |
| |
| void tst_qbarmodelmapper::verticalMapper_data() |
| { |
| QTest::addColumn<int>("firstBarSetColumn"); |
| QTest::addColumn<int>("lastBarSetColumn"); |
| QTest::addColumn<int>("expectedBarSetCount"); |
| QTest::newRow("lastBarSetColumn greater than firstBarSetColumn") << 0 << 1 << 2; |
| QTest::newRow("lastBarSetColumn equal to firstBarSetColumn") << 1 << 1 << 1; |
| QTest::newRow("lastBarSetColumn lesser than firstBarSetColumn") << 1 << 0 << 0; |
| QTest::newRow("invalid firstBarSetColumn and correct lastBarSetColumn") << -3 << 1 << 0; |
| QTest::newRow("firstBarSetColumn beyond the size of model and correct lastBarSetColumn") << m_modelColumnCount << 1 << 0; |
| QTest::newRow("firstBarSetColumn beyond the size of model and invalid lastBarSetColumn") << m_modelColumnCount << -1 << 0; |
| } |
| |
| void tst_qbarmodelmapper::verticalMapper() |
| { |
| QFETCH(int, firstBarSetColumn); |
| QFETCH(int, lastBarSetColumn); |
| QFETCH(int, expectedBarSetCount); |
| |
| QBarSeries *series = new QBarSeries; |
| |
| QVBarModelMapper *mapper = new QVBarModelMapper; |
| mapper->setFirstBarSetColumn(firstBarSetColumn); |
| mapper->setLastBarSetColumn(lastBarSetColumn); |
| mapper->setModel(m_model); |
| mapper->setSeries(series); |
| |
| m_chart->addSeries(series); |
| |
| QCOMPARE(series->count(), expectedBarSetCount); |
| QCOMPARE(mapper->firstBarSetColumn(), qMax(-1, firstBarSetColumn)); |
| QCOMPARE(mapper->lastBarSetColumn(), qMax(-1, lastBarSetColumn)); |
| |
| delete mapper; |
| m_chart->removeSeries(series); |
| delete series; |
| } |
| |
| void tst_qbarmodelmapper::verticalMapperCustomMapping_data() |
| { |
| QTest::addColumn<int>("first"); |
| QTest::addColumn<int>("countLimit"); |
| QTest::addColumn<int>("expectedBarSetCount"); |
| QTest::addColumn<int>("expectedCount"); |
| QTest::newRow("first: 0, unlimited count") << 0 << -1 << 2 << m_modelRowCount; |
| QTest::newRow("first: 3, unlimited count") << 3 << -1 << 2 << m_modelRowCount - 3; |
| QTest::newRow("first: 0, count: 5") << 0 << 5 << 2 << qMin(5, m_modelRowCount); |
| QTest::newRow("first: 3, count: 5") << 3 << 5 << 2 << qMin(5, m_modelRowCount - 3); |
| QTest::newRow("first: +1 greater then the number of rows in the model, unlimited count") << m_modelRowCount + 1 << -1 << 0 << 0; |
| QTest::newRow("first: +1 greater then the number of rows in the model, count: 5") << m_modelRowCount + 1 << 5 << 0 << 0; |
| QTest::newRow("first: 0, count: +3 greater than the number of rows in the model (should limit to the size of model)") << 0 << m_modelRowCount + 3 << 2 << m_modelRowCount; |
| QTest::newRow("first: -3(invalid - should default to 0), unlimited count") << -3 << -1 << 2 << m_modelRowCount; |
| QTest::newRow("first: 0, count: -3 (invalid - shlould default to -1)") << 0 << -3 << 2 << m_modelRowCount; |
| QTest::newRow("first: -3(invalid - should default to 0), count: -3 (invalid - shlould default to -1)") << -3 << -3 << 2 << m_modelRowCount; |
| } |
| |
| void tst_qbarmodelmapper::verticalMapperCustomMapping() |
| { |
| QFETCH(int, first); |
| QFETCH(int, countLimit); |
| QFETCH(int, expectedBarSetCount); |
| QFETCH(int, expectedCount); |
| |
| QBarSeries *series = new QBarSeries; |
| |
| QCOMPARE(series->count(), 0); |
| |
| QVBarModelMapper *mapper = new QVBarModelMapper; |
| mapper->setFirstBarSetColumn(0); |
| mapper->setLastBarSetColumn(1); |
| mapper->setModel(m_model); |
| mapper->setSeries(series); |
| mapper->setFirstRow(first); |
| mapper->setRowCount(countLimit); |
| m_chart->addSeries(series); |
| |
| QCOMPARE(series->count(), expectedBarSetCount); |
| |
| if (expectedBarSetCount > 0) |
| QCOMPARE(series->barSets().first()->count(), expectedCount); |
| |
| // change values column mapping to invalid |
| mapper->setFirstBarSetColumn(-1); |
| mapper->setLastBarSetColumn(1); |
| |
| QCOMPARE(series->count(), 0); |
| |
| delete mapper; |
| m_chart->removeSeries(series); |
| delete series; |
| } |
| |
| void tst_qbarmodelmapper::horizontalMapper_data() |
| { |
| QTest::addColumn<int>("firstBarSetRow"); |
| QTest::addColumn<int>("lastBarSetRow"); |
| QTest::addColumn<int>("expectedBarSetCount"); |
| QTest::newRow("lastBarSetRow greater than firstBarSetRow") << 0 << 1 << 2; |
| QTest::newRow("lastBarSetRow equal to firstBarSetRow") << 1 << 1 << 1; |
| QTest::newRow("lastBarSetRow lesser than firstBarSetRow") << 1 << 0 << 0; |
| QTest::newRow("invalid firstBarSetRow and correct lastBarSetRow") << -3 << 1 << 0; |
| QTest::newRow("firstBarSetRow beyond the size of model and correct lastBarSetRow") << m_modelRowCount << 1 << 0; |
| QTest::newRow("firstBarSetRow beyond the size of model and invalid lastBarSetRow") << m_modelRowCount << -1 << 0; |
| } |
| |
| void tst_qbarmodelmapper::horizontalMapper() |
| { |
| QFETCH(int, firstBarSetRow); |
| QFETCH(int, lastBarSetRow); |
| QFETCH(int, expectedBarSetCount); |
| |
| QBarSeries *series = new QBarSeries; |
| |
| QHBarModelMapper *mapper = new QHBarModelMapper; |
| mapper->setFirstBarSetRow(firstBarSetRow); |
| mapper->setLastBarSetRow(lastBarSetRow); |
| mapper->setModel(m_model); |
| mapper->setSeries(series); |
| |
| m_chart->addSeries(series); |
| |
| QCOMPARE(series->count(), expectedBarSetCount); |
| QCOMPARE(mapper->firstBarSetRow(), qMax(-1, firstBarSetRow)); |
| QCOMPARE(mapper->lastBarSetRow(), qMax(-1, lastBarSetRow)); |
| |
| delete mapper; |
| m_chart->removeSeries(series); |
| delete series; |
| } |
| |
| void tst_qbarmodelmapper::horizontalMapperCustomMapping_data() |
| { |
| QTest::addColumn<int>("first"); |
| QTest::addColumn<int>("countLimit"); |
| QTest::addColumn<int>("expectedBarSetCount"); |
| QTest::addColumn<int>("expectedCount"); |
| QTest::newRow("first: 0, unlimited count") << 0 << -1 << 2 << m_modelColumnCount; |
| QTest::newRow("first: 3, unlimited count") << 3 << -1 << 2 << m_modelColumnCount - 3; |
| QTest::newRow("first: 0, count: 5") << 0 << 5 << 2 << qMin(5, m_modelColumnCount); |
| QTest::newRow("first: 3, count: 5") << 3 << 5 << 2 << qMin(5, m_modelColumnCount - 3); |
| QTest::newRow("first: +1 greater then the number of rows in the model, unlimited count") << m_modelColumnCount + 1 << -1 << 0 << 0; |
| QTest::newRow("first: +1 greater then the number of rows in the model, count: 5") << m_modelColumnCount + 1 << 5 << 0 << 0; |
| QTest::newRow("first: 0, count: +3 greater than the number of rows in the model (should limit to the size of model)") << 0 << m_modelColumnCount + 3 << 2 << m_modelColumnCount; |
| QTest::newRow("first: -3(invalid - should default to 0), unlimited count") << -3 << -1 << 2 << m_modelColumnCount; |
| QTest::newRow("first: 0, count: -3 (invalid - shlould default to -1)") << 0 << -3 << 2 << m_modelColumnCount; |
| QTest::newRow("first: -3(invalid - should default to 0), count: -3 (invalid - shlould default to -1)") << -3 << -3 << 2 << m_modelColumnCount; |
| } |
| |
| void tst_qbarmodelmapper::horizontalMapperCustomMapping() |
| { |
| QFETCH(int, first); |
| QFETCH(int, countLimit); |
| QFETCH(int, expectedBarSetCount); |
| QFETCH(int, expectedCount); |
| |
| QBarSeries *series = new QBarSeries; |
| |
| QCOMPARE(series->count(), 0); |
| |
| QHBarModelMapper *mapper = new QHBarModelMapper; |
| mapper->setFirstBarSetRow(0); |
| mapper->setLastBarSetRow(1); |
| mapper->setModel(m_model); |
| mapper->setSeries(series); |
| mapper->setFirstColumn(first); |
| mapper->setColumnCount(countLimit); |
| m_chart->addSeries(series); |
| |
| QCOMPARE(series->count(), expectedBarSetCount); |
| |
| if (expectedBarSetCount > 0) |
| QCOMPARE(series->barSets().first()->count(), expectedCount); |
| |
| // change values column mapping to invalid |
| mapper->setFirstBarSetRow(-1); |
| mapper->setLastBarSetRow(1); |
| |
| QCOMPARE(series->count(), 0); |
| |
| delete mapper; |
| m_chart->removeSeries(series); |
| delete series; |
| } |
| |
| void tst_qbarmodelmapper::seriesUpdated() |
| { |
| // setup the mapper |
| createVerticalMapper(); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount); |
| QCOMPARE(m_vMapper->rowCount(), -1); |
| |
| m_series->barSets().first()->append(123); |
| QCOMPARE(m_model->rowCount(), m_modelRowCount + 1); |
| QCOMPARE(m_vMapper->rowCount(), -1); // the value should not change as it indicates 'all' items there are in the model |
| |
| m_series->barSets().last()->remove(0, m_modelRowCount); |
| QCOMPARE(m_model->rowCount(), 1); |
| QCOMPARE(m_vMapper->rowCount(), -1); // the value should not change as it indicates 'all' items there are in the model |
| |
| m_series->barSets().first()->replace(0, 444.0); |
| QCOMPARE(m_model->data(m_model->index(0, 0)).toReal(), 444.0); |
| |
| m_series->barSets().first()->setLabel("Hello"); |
| QCOMPARE(m_model->headerData(0, Qt::Horizontal).toString(), QString("Hello")); |
| |
| QList<qreal> newValues; |
| newValues << 15 << 27 << 35 << 49; |
| m_series->barSets().first()->append(newValues); |
| QCOMPARE(m_model->rowCount(), 1 + newValues.count()); |
| |
| QList<QBarSet* > newBarSets; |
| QBarSet* newBarSet_1 = new QBarSet("New_1"); |
| newBarSet_1->append(101); |
| newBarSet_1->append(102); |
| newBarSet_1->append(103); |
| newBarSets.append(newBarSet_1); |
| |
| QBarSet* newBarSet_2 = new QBarSet("New_2"); |
| newBarSet_2->append(201); |
| newBarSet_2->append(202); |
| newBarSet_2->append(203); |
| newBarSets.append(newBarSet_2); |
| |
| m_series->append(newBarSets); |
| QCOMPARE(m_model->columnCount(), m_modelColumnCount + newBarSets.count()); |
| } |
| |
| void tst_qbarmodelmapper::verticalModelInsertRows() |
| { |
| // setup the mapper |
| createVerticalMapper(); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount); |
| QVERIFY(m_vMapper->model() != 0); |
| |
| int insertCount = 4; |
| m_model->insertRows(3, insertCount); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount + insertCount); |
| |
| int first = 3; |
| m_vMapper->setFirstRow(3); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount + insertCount - first); |
| |
| m_model->insertRows(3, insertCount); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount + 2 * insertCount - first); |
| |
| int countLimit = 6; |
| m_vMapper->setRowCount(countLimit); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), qMin(countLimit, m_modelRowCount + 2 * insertCount - first)); |
| |
| m_model->insertRows(3, insertCount); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), qMin(countLimit, m_modelRowCount + 3 * insertCount - first)); |
| |
| m_vMapper->setFirstRow(0); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), qMin(countLimit, m_modelRowCount + 3 * insertCount)); |
| |
| m_vMapper->setRowCount(-1); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount + 3 * insertCount); |
| } |
| |
| void tst_qbarmodelmapper::verticalModelRemoveRows() |
| { |
| // setup the mapper |
| createVerticalMapper(); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount); |
| QVERIFY(m_vMapper->model() != 0); |
| |
| int removeCount = 2; |
| m_model->removeRows(1, removeCount); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount - removeCount); |
| |
| int first = 1; |
| m_vMapper->setFirstRow(first); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount - removeCount - first); |
| |
| m_model->removeRows(1, removeCount); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount - 2 * removeCount - first); |
| |
| int countLimit = 3; |
| m_vMapper->setRowCount(countLimit); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), qMin(countLimit, m_modelRowCount - 2 * removeCount - first)); |
| |
| m_model->removeRows(1, removeCount); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), qMin(countLimit, m_modelRowCount - 3 * removeCount - first)); |
| |
| m_vMapper->setFirstRow(0); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), qMin(countLimit, m_modelRowCount - 3 * removeCount)); |
| |
| m_vMapper->setRowCount(-1); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount - 3 * removeCount); |
| } |
| |
| void tst_qbarmodelmapper::verticalModelInsertColumns() |
| { |
| // setup the mapper |
| createVerticalMapper(); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount); |
| QVERIFY(m_vMapper->model() != 0); |
| |
| int insertCount = 4; |
| m_model->insertColumns(3, insertCount); |
| QCOMPARE(m_series->count(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount); |
| } |
| |
| void tst_qbarmodelmapper::verticalModelRemoveColumns() |
| { |
| // setup the mapper |
| createVerticalMapper(); |
| QCOMPARE(m_series->count(), qMin(m_model->columnCount(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1)); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount); |
| QVERIFY(m_vMapper->model() != 0); |
| |
| int removeCount = m_modelColumnCount - 2; |
| m_model->removeColumns(0, removeCount); |
| QCOMPARE(m_series->count(), qMin(m_model->columnCount(), m_vMapper->lastBarSetColumn() - m_vMapper->firstBarSetColumn() + 1)); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelRowCount); |
| |
| // leave all the columns |
| m_model->removeColumns(0, m_modelColumnCount - removeCount); |
| QCOMPARE(m_series->count(), 0); |
| } |
| |
| void tst_qbarmodelmapper::horizontalModelInsertRows() |
| { |
| // setup the mapper |
| createHorizontalMapper(); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount); |
| QVERIFY(m_hMapper->model() != 0); |
| |
| int insertCount = 4; |
| m_model->insertRows(3, insertCount); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount); |
| } |
| |
| void tst_qbarmodelmapper::horizontalModelRemoveRows() |
| { |
| // setup the mapper |
| createHorizontalMapper(); |
| QCOMPARE(m_series->count(), qMin(m_model->rowCount(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1)); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount); |
| QVERIFY(m_hMapper->model() != 0); |
| |
| int removeCount = m_modelRowCount - 2; |
| m_model->removeRows(0, removeCount); |
| QCOMPARE(m_series->count(), qMin(m_model->rowCount(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1)); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount); |
| |
| // leave all the columns |
| m_model->removeRows(0, m_modelRowCount - removeCount); |
| QCOMPARE(m_series->count(), 0); |
| } |
| |
| void tst_qbarmodelmapper::horizontalModelInsertColumns() |
| { |
| // setup the mapper |
| createHorizontalMapper(); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount); |
| QVERIFY(m_hMapper->model() != 0); |
| |
| int insertCount = 4; |
| m_model->insertColumns(3, insertCount); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount + insertCount); |
| |
| int first = 3; |
| m_hMapper->setFirstColumn(3); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount + insertCount - first); |
| |
| m_model->insertColumns(3, insertCount); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount + 2 * insertCount - first); |
| |
| int countLimit = 6; |
| m_hMapper->setColumnCount(countLimit); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), qMin(countLimit, m_modelColumnCount + 2 * insertCount - first)); |
| |
| m_model->insertColumns(3, insertCount); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), qMin(countLimit, m_modelColumnCount + 3 * insertCount - first)); |
| |
| m_hMapper->setFirstColumn(0); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), qMin(countLimit, m_modelColumnCount + 3 * insertCount)); |
| |
| m_hMapper->setColumnCount(-1); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount + 3 * insertCount); |
| } |
| |
| void tst_qbarmodelmapper::horizontalModelRemoveColumns() |
| { |
| // setup the mapper |
| createHorizontalMapper(); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount); |
| QVERIFY(m_hMapper->model() != 0); |
| |
| int removeCount = 2; |
| m_model->removeColumns(1, removeCount); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount - removeCount); |
| |
| int first = 1; |
| m_hMapper->setFirstColumn(first); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount - removeCount - first); |
| |
| m_model->removeColumns(1, removeCount); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount - 2 * removeCount - first); |
| |
| int countLimit = 3; |
| m_hMapper->setColumnCount(countLimit); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), qMin(countLimit, m_modelColumnCount - 2 * removeCount - first)); |
| |
| m_model->removeColumns(1, removeCount); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), qMin(countLimit, m_modelColumnCount - 3 * removeCount - first)); |
| |
| m_hMapper->setFirstColumn(0); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), qMin(countLimit, m_modelColumnCount - 3 * removeCount)); |
| |
| m_hMapper->setColumnCount(-1); |
| QCOMPARE(m_series->count(), m_hMapper->lastBarSetRow() - m_hMapper->firstBarSetRow() + 1); |
| QCOMPARE(m_series->barSets().first()->count(), m_modelColumnCount - 3 * removeCount); |
| } |
| |
| void tst_qbarmodelmapper::modelUpdateCell() |
| { |
| // setup the mapper |
| createVerticalMapper(); |
| |
| QVERIFY(m_model->setData(m_model->index(1, 0), 44)); |
| QCOMPARE(m_series->barSets().at(0)->at(1), 44.0); |
| QCOMPARE(m_model->data(m_model->index(1, 0)).toReal(), 44.0); |
| } |
| |
| void tst_qbarmodelmapper::verticalMapperSignals() |
| { |
| QVBarModelMapper *mapper = new QVBarModelMapper; |
| |
| QSignalSpy spy0(mapper, SIGNAL(firstRowChanged())); |
| QSignalSpy spy1(mapper, SIGNAL(rowCountChanged())); |
| QSignalSpy spy2(mapper, SIGNAL(firstBarSetColumnChanged())); |
| QSignalSpy spy3(mapper, SIGNAL(lastBarSetColumnChanged())); |
| QSignalSpy spy4(mapper, SIGNAL(modelReplaced())); |
| QSignalSpy spy5(mapper, SIGNAL(seriesReplaced())); |
| |
| mapper->setFirstBarSetColumn(0); |
| mapper->setLastBarSetColumn(1); |
| mapper->setModel(m_model); |
| mapper->setSeries(m_series); |
| mapper->setFirstRow(1); |
| mapper->setRowCount(5); |
| |
| QCOMPARE(spy0.count(), 1); |
| QCOMPARE(spy1.count(), 1); |
| QCOMPARE(spy2.count(), 1); |
| QCOMPARE(spy3.count(), 1); |
| QCOMPARE(spy4.count(), 1); |
| QCOMPARE(spy5.count(), 1); |
| |
| delete mapper; |
| } |
| |
| void tst_qbarmodelmapper::horizontalMapperSignals() |
| { |
| QHBarModelMapper *mapper = new QHBarModelMapper; |
| |
| QSignalSpy spy0(mapper, SIGNAL(firstColumnChanged())); |
| QSignalSpy spy1(mapper, SIGNAL(columnCountChanged())); |
| QSignalSpy spy2(mapper, SIGNAL(firstBarSetRowChanged())); |
| QSignalSpy spy3(mapper, SIGNAL(lastBarSetRowChanged())); |
| QSignalSpy spy4(mapper, SIGNAL(modelReplaced())); |
| QSignalSpy spy5(mapper, SIGNAL(seriesReplaced())); |
| |
| mapper->setFirstBarSetRow(0); |
| mapper->setLastBarSetRow(1); |
| mapper->setModel(m_model); |
| mapper->setSeries(m_series); |
| mapper->setFirstColumn(1); |
| mapper->setColumnCount(5); |
| |
| QCOMPARE(spy0.count(), 1); |
| QCOMPARE(spy1.count(), 1); |
| QCOMPARE(spy2.count(), 1); |
| QCOMPARE(spy3.count(), 1); |
| QCOMPARE(spy4.count(), 1); |
| QCOMPARE(spy5.count(), 1); |
| |
| delete mapper; |
| } |
| |
| QTEST_MAIN(tst_qbarmodelmapper) |
| |
| #include "tst_qbarmodelmapper.moc" |