Add recordpanel beside datagrid
This commit is contained in:
parent
d178d5191c
commit
04ce099adf
12 changed files with 538 additions and 8 deletions
144
tests/pglabtests/tst_RecordPanel.cpp
Normal file
144
tests/pglabtests/tst_RecordPanel.cpp
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
#include <gtest/gtest.h>
|
||||
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QPlainTextEdit>
|
||||
#include <QStandardItemModel>
|
||||
#include <QToolButton>
|
||||
|
||||
#include "CustomDataRole.h"
|
||||
#include "Pgsql_oids.h"
|
||||
#include "RecordPanel.h"
|
||||
|
||||
namespace {
|
||||
|
||||
/// Column 0 is the row number column, columns 1 to 3 are data columns
|
||||
/// id (int4, editable), body (text, editable), ro (int4, read-only)
|
||||
void fillModel(QStandardItemModel &model)
|
||||
{
|
||||
model.setColumnCount(4);
|
||||
model.setRowCount(1);
|
||||
model.setHeaderData(0, Qt::Horizontal, QStringLiteral("#"), Qt::DisplayRole);
|
||||
model.setHeaderData(1, Qt::Horizontal, QStringLiteral("id\nint4"), Qt::DisplayRole);
|
||||
model.setHeaderData(2, Qt::Horizontal, QStringLiteral("body\ntext"), Qt::DisplayRole);
|
||||
model.setHeaderData(3, Qt::Horizontal, QStringLiteral("ro\nint4"), Qt::DisplayRole);
|
||||
model.setData(model.index(0, 1), Pgsql::int4_oid, CustomDataTypeRole);
|
||||
model.setData(model.index(0, 2), Pgsql::text_oid, CustomDataTypeRole);
|
||||
model.setData(model.index(0, 3), Pgsql::int4_oid, CustomDataTypeRole);
|
||||
model.setData(model.index(0, 1), QStringLiteral("1"));
|
||||
model.setData(model.index(0, 2), QStringLiteral("hello"));
|
||||
model.setData(model.index(0, 3), QStringLiteral("7"));
|
||||
model.itemFromIndex(model.index(0, 3))->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class RecordPanelTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override
|
||||
{
|
||||
model.reset(new QStandardItemModel);
|
||||
fillModel(*model);
|
||||
panel.setModel(model.get());
|
||||
panel.setFirstDataColumn(1);
|
||||
panel.setCurrentRow(0);
|
||||
}
|
||||
|
||||
std::unique_ptr<QStandardItemModel> model;
|
||||
RecordPanel panel;
|
||||
};
|
||||
|
||||
TEST_F(RecordPanelTest, OneFieldPerDataColumnSkippingRowNumber)
|
||||
{
|
||||
ASSERT_NE(panel.widget(), nullptr);
|
||||
EXPECT_EQ(panel.widget()->findChildren<QLabel *>().size(), 6);
|
||||
EXPECT_EQ(panel.widget()->findChildren<QPlainTextEdit *>().size(), 1);
|
||||
EXPECT_EQ(panel.widget()->findChildren<QLineEdit *>().size(), 2);
|
||||
}
|
||||
|
||||
TEST_F(RecordPanelTest, ShowsValuesOfCurrentRow)
|
||||
{
|
||||
auto lines = panel.widget()->findChildren<QLineEdit *>();
|
||||
auto texts = panel.widget()->findChildren<QPlainTextEdit *>();
|
||||
ASSERT_EQ(lines.size(), 2);
|
||||
ASSERT_EQ(texts.size(), 1);
|
||||
EXPECT_EQ(lines[0]->text(), QStringLiteral("1"));
|
||||
EXPECT_EQ(texts[0]->toPlainText(), QStringLiteral("hello"));
|
||||
EXPECT_EQ(lines[1]->text(), QStringLiteral("7"));
|
||||
}
|
||||
|
||||
TEST_F(RecordPanelTest, ReadOnlyWhenCellNotEditable)
|
||||
{
|
||||
auto lines = panel.widget()->findChildren<QLineEdit *>();
|
||||
ASSERT_EQ(lines.size(), 2);
|
||||
EXPECT_FALSE(lines[0]->isReadOnly());
|
||||
EXPECT_TRUE(lines[1]->isReadOnly());
|
||||
}
|
||||
|
||||
TEST_F(RecordPanelTest, NullShowsEmptyTextWithNullPlaceholder)
|
||||
{
|
||||
model->setData(model->index(0, 1), QVariant(), Qt::EditRole);
|
||||
panel.setCurrentRow(0);
|
||||
|
||||
auto lines = panel.widget()->findChildren<QLineEdit *>();
|
||||
ASSERT_EQ(lines.size(), 2);
|
||||
EXPECT_TRUE(lines[0]->text().isEmpty());
|
||||
EXPECT_EQ(lines[0]->placeholderText(), QStringLiteral("null"));
|
||||
}
|
||||
|
||||
TEST_F(RecordPanelTest, EmptyStringShownAsQuotedEmpty)
|
||||
{
|
||||
model->setData(model->index(0, 2), QString(""), Qt::EditRole);
|
||||
panel.setCurrentRow(0);
|
||||
|
||||
auto texts = panel.widget()->findChildren<QPlainTextEdit *>();
|
||||
ASSERT_EQ(texts.size(), 1);
|
||||
EXPECT_EQ(texts[0]->toPlainText(), QStringLiteral("''"));
|
||||
}
|
||||
|
||||
TEST_F(RecordPanelTest, EditingFinishedWritesThroughModel)
|
||||
{
|
||||
auto lines = panel.widget()->findChildren<QLineEdit *>();
|
||||
ASSERT_EQ(lines.size(), 2);
|
||||
lines[0]->setText(QStringLiteral("42"));
|
||||
emit lines[0]->editingFinished();
|
||||
|
||||
EXPECT_EQ(model->index(0, 1).data(Qt::EditRole).toString(), QStringLiteral("42"));
|
||||
}
|
||||
|
||||
TEST_F(RecordPanelTest, DataChangedRefreshesEditor)
|
||||
{
|
||||
model->setData(model->index(0, 1), QStringLiteral("5"), Qt::EditRole);
|
||||
|
||||
auto lines = panel.widget()->findChildren<QLineEdit *>();
|
||||
ASSERT_EQ(lines.size(), 2);
|
||||
EXPECT_EQ(lines[0]->text(), QStringLiteral("5"));
|
||||
}
|
||||
|
||||
TEST_F(RecordPanelTest, NoCurrentRowShowsNothing)
|
||||
{
|
||||
panel.setCurrentRow(-1);
|
||||
EXPECT_EQ(panel.widget(), nullptr);
|
||||
}
|
||||
|
||||
TEST_F(RecordPanelTest, ModelResetClearsPanel)
|
||||
{
|
||||
model->clear();
|
||||
EXPECT_EQ(panel.widget(), nullptr);
|
||||
}
|
||||
|
||||
TEST_F(RecordPanelTest, ExpandButtonGrowsTextBox)
|
||||
{
|
||||
auto texts = panel.widget()->findChildren<QPlainTextEdit *>();
|
||||
auto buttons = panel.widget()->findChildren<QToolButton *>();
|
||||
ASSERT_EQ(texts.size(), 1);
|
||||
ASSERT_EQ(buttons.size(), 1);
|
||||
|
||||
int collapsed = texts[0]->maximumHeight();
|
||||
buttons[0]->setChecked(true);
|
||||
int expanded = texts[0]->maximumHeight();
|
||||
EXPECT_GT(expanded, collapsed);
|
||||
|
||||
buttons[0]->setChecked(false);
|
||||
EXPECT_EQ(texts[0]->maximumHeight(), collapsed);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue