mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-14 09:14:14 +02:00
Merge pull request #1392 from bhangart/fix/grid-size-guard
Never use a folio grid step below 1 from the settings
This commit is contained in:
@@ -135,6 +135,13 @@ add_test(NAME tst_textgrid COMMAND tst_textgrid)
|
||||
target_include_directories(tst_textgrid PRIVATE ${QET_DIR}/sources)
|
||||
target_link_libraries(tst_textgrid PRIVATE Qt::Test)
|
||||
|
||||
# foliogrid.h is header-only: the folio grid step as read from the
|
||||
# settings, never 0 or negative, so no reader can divide by it or loop on it.
|
||||
add_executable(tst_foliogrid tst_foliogrid.cpp)
|
||||
target_include_directories(tst_foliogrid PRIVATE ${QET_DIR}/sources)
|
||||
target_link_libraries(tst_foliogrid PRIVATE Qt::Test Qt::Core)
|
||||
add_test(NAME tst_foliogrid COMMAND tst_foliogrid)
|
||||
|
||||
# textlines.h is header-only: the lines of a text as they are laid out,
|
||||
# for the exports that write a text line by line.
|
||||
add_executable(tst_textlines tst_textlines.cpp)
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
Copyright 2006-2026 The QElectroTech Team
|
||||
This file is part of QElectroTech.
|
||||
|
||||
QElectroTech 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.
|
||||
|
||||
QElectroTech 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 QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "foliogrid.h"
|
||||
|
||||
#include <QtTest>
|
||||
#include <QSettings>
|
||||
|
||||
/**
|
||||
FolioGrid::step() -- the folio grid step as read from the settings.
|
||||
Every reader of diagrameditor/Xgrid and Ygrid goes through it, so a
|
||||
settings file holding 0 (a division by zero in Diagram::snapToGrid()
|
||||
and an endless "% 0" in drawBackground()), a negative number (an
|
||||
endless loop) or text can no longer reach the code that uses the step.
|
||||
*/
|
||||
class tst_foliogrid : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private slots:
|
||||
void usableValuesAreKept_data()
|
||||
{
|
||||
QTest::addColumn<QVariant>("value");
|
||||
QTest::addColumn<int>("expected");
|
||||
QTest::newRow("one") << QVariant(1) << 1;
|
||||
QTest::newRow("default") << QVariant(10) << 10;
|
||||
QTest::newRow("text number") << QVariant(QStringLiteral("7")) << 7;
|
||||
QTest::newRow("large") << QVariant(100000) << 100000;
|
||||
QTest::newRow("int max") << QVariant(2147483647) << 2147483647;
|
||||
}
|
||||
|
||||
void usableValuesAreKept()
|
||||
{
|
||||
QFETCH(QVariant, value);
|
||||
QFETCH(int, expected);
|
||||
QCOMPARE(FolioGrid::step(value, 10), expected);
|
||||
}
|
||||
|
||||
void unusableValuesFallBack_data()
|
||||
{
|
||||
QTest::addColumn<QVariant>("value");
|
||||
QTest::newRow("missing") << QVariant();
|
||||
QTest::newRow("zero") << QVariant(0);
|
||||
QTest::newRow("negative") << QVariant(-5);
|
||||
QTest::newRow("text") << QVariant(QStringLiteral("ten"));
|
||||
QTest::newRow("empty") << QVariant(QString());
|
||||
QTest::newRow("nan") << QVariant(QStringLiteral("nan"));
|
||||
QTest::newRow("too large") << QVariant(QStringLiteral("99999999999"));
|
||||
QTest::newRow("too large number") << QVariant(qlonglong(99999999999));
|
||||
QTest::newRow("int max + 1") << QVariant(qlonglong(2147483648));
|
||||
}
|
||||
|
||||
void unusableValuesFallBack()
|
||||
{
|
||||
QFETCH(QVariant, value);
|
||||
QCOMPARE(FolioGrid::step(value, 10), 10);
|
||||
QCOMPARE(FolioGrid::step(value, 20), 20);
|
||||
}
|
||||
|
||||
// A decimal in the file is rounded to a whole number, as the plain
|
||||
// QVariant::toInt() read did before.
|
||||
void decimalIsRoundedLikeBefore()
|
||||
{
|
||||
QCOMPARE(FolioGrid::step(QVariant(7.9), 10), 8);
|
||||
QCOMPARE(FolioGrid::step(QVariant(0.4), 10), 10);
|
||||
}
|
||||
|
||||
// Through a real settings file, in a scope of this test's own.
|
||||
void readsTheSettingsKeys()
|
||||
{
|
||||
QCoreApplication::setOrganizationName(QStringLiteral("QElectroTech-tst_foliogrid"));
|
||||
QCoreApplication::setApplicationName(QStringLiteral("tst_foliogrid"));
|
||||
QSettings settings;
|
||||
settings.clear();
|
||||
QCOMPARE(FolioGrid::step(settings.value(FolioGrid::x_key), 10), 10);
|
||||
settings.setValue(FolioGrid::x_key, 0);
|
||||
settings.setValue(FolioGrid::y_key, 15);
|
||||
QCOMPARE(FolioGrid::step(settings.value(FolioGrid::x_key), 10), 10);
|
||||
QCOMPARE(FolioGrid::step(settings.value(FolioGrid::y_key), 10), 15);
|
||||
settings.clear();
|
||||
}
|
||||
};
|
||||
|
||||
QTEST_GUILESS_MAIN(tst_foliogrid)
|
||||
#include "tst_foliogrid.moc"
|
||||
Reference in New Issue
Block a user