Adding some more tests

This commit is contained in:
deeaitch committed 2026-10-07 19:43:17 -04:00
1 parent 8bf5dcff30
commit 344beaf58c
5 files changed
+620 -4

No files matched your search

+71
View File
@@ -4,6 +4,7 @@
#include <QAbstractItemModelTester>
#include <QSignalSpy>
#include <QTemporaryFile>
#include <QStringList>
#include <QtTest>
#include <limits>
@@ -22,6 +23,76 @@ static std::unique_ptr<TreeNode> ParsedTree() {
class ModelTest : public QObject {
Q_OBJECT
private Q_SLOTS:
void additionalMetadata() {
DbcDatabase database;
FrameInfo frame;
frame.name = "Extended";
frame.canId = 0x18F00442U;
frame.isExtended = true;
frame.dlc = 8U;
frame.comment = "Frame tooltip";
SignalInfo signal;
signal.name = "SignedMotorola";
signal.startBit = 7U;
signal.length = 16U;
signal.isLittleEndian = false;
signal.isSigned = true;
signal.unit = "rpm";
signal.comment = "Signal tooltip";
frame.signals.push_back(signal);
database.frames.push_back(frame);
DbcTreeModel model;
model.SetTree(DbcTreeBuilder().Build(database));
const QModelIndex parent = model.index(0, 0);
QCOMPARE(model.data(model.index(0, DbcTreeModel::ByteOrder, parent)).toString(), QString("Motorola"));
QCOMPARE(model.data(model.index(0, DbcTreeModel::Signed, parent)).toString(), QString("Signed"));
QCOMPARE(model.data(model.index(0, DbcTreeModel::CanId)).toString(), QString("0X18F00442"));
const QStringList headers = {"Name", "CAN ID", "Payload (bytes)", "Start bit",
"Length (bits)", "Byte order", "Signedness", "Unit", "Comment"};
for (int column = 0; column < model.columnCount(); ++column) {
const auto frameIndex = model.index(0, column);
const auto signalIndex = model.index(0, column, parent);
QCOMPARE(model.headerData(column, Qt::Horizontal).toString(), headers.at(column));
QVERIFY(!model.headerData(column, Qt::Horizontal, Qt::ToolTipRole).isValid());
QCOMPARE(model.data(frameIndex, Qt::ToolTipRole).toString(), QString("Frame tooltip"));
QCOMPARE(model.data(signalIndex, Qt::ToolTipRole).toString(), QString("Signal tooltip"));
QCOMPARE(model.data(frameIndex, DbcTreeModel::CommentRole).toString(), QString("Frame tooltip"));
QCOMPARE(model.data(signalIndex, DbcTreeModel::CommentRole).toString(), QString("Signal tooltip"));
QCOMPARE(model.data(frameIndex, DbcTreeModel::CanIdRole).toUInt(), frame.canId);
QCOMPARE(model.data(frameIndex, DbcTreeModel::PayloadLengthRole).toInt(), 8);
QCOMPARE(model.data(frameIndex, DbcTreeModel::ExtendedRole).toBool(), true);
QCOMPARE(model.data(signalIndex, DbcTreeModel::StartBitRole).toUInt(), 7U);
QCOMPARE(model.data(signalIndex, DbcTreeModel::BitLengthRole).toUInt(), 16U);
QCOMPARE(model.data(signalIndex, DbcTreeModel::LittleEndianRole).toBool(), false);
QCOMPARE(model.data(signalIndex, DbcTreeModel::SignedRole).toBool(), true);
QCOMPARE(model.data(signalIndex, DbcTreeModel::UnitRole).toString(), QString("rpm"));
const auto descriptions = model.data(signalIndex, DbcTreeModel::ValueDescriptionsRole);
QVERIFY(descriptions.isValid());
QVERIFY(descriptions.toList().isEmpty());
QVERIFY(!model.data(frameIndex, Qt::UserRole + 1000).isValid());
QVERIFY(!model.data(signalIndex, Qt::UserRole + 1000).isValid());
QVERIFY(!model.setData(frameIndex, "Changed", Qt::EditRole));
QVERIFY(!model.setData(signalIndex, "Changed", Qt::EditRole));
}
QCOMPARE(model.data(parent).toString(), QString("Extended"));
QCOMPARE(model.data(model.index(0, 0, parent)).toString(), QString("SignedMotorola"));
}
void emptyRootAndRejectedReplacement() {
DbcTreeModel model;
QAbstractItemModelTester tester(&model, QAbstractItemModelTester::FailureReportingMode::QtTest);
model.SetTree(ParsedTree());
QPersistentModelIndex retained(model.index(0, 0));
QSignalSpy resets(&model, &QAbstractItemModel::modelReset);
QVERIFY_THROWS_EXCEPTION(std::invalid_argument, model.SetTree(std::make_unique<TreeNode>(SignalInfo())));
QCOMPARE(resets.count(), 0);
QVERIFY(retained.isValid());
QCOMPARE(model.rowCount(), 2);
model.SetTree(DbcTreeBuilder().Build(DbcDatabase()));
QCOMPARE(resets.count(), 1);
QVERIFY(!retained.isValid());
QCOMPARE(model.rowCount(), 0);
QVERIFY(!model.index(0, 0).isValid());
}
void navigation() {
DbcTreeModel model;
QAbstractItemModelTester tester(&model, QAbstractItemModelTester::FailureReportingMode::QtTest);