summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp b/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp
index 8fcf9c49fe6..88e67b34a2d 100644
--- a/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp
+++ b/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp
@@ -18,6 +18,9 @@ public:
private slots:
void getSetCheck();
+
+ void displayEdgeCases_data();
+ void displayEdgeCases();
};
tst_QLCDNumber::tst_QLCDNumber()
@@ -42,5 +45,30 @@ void tst_QLCDNumber::getSetCheck()
QCOMPARE(99, obj1.digitCount()); // Range<0, 99>
}
+// Test case for undefined behavior when displaying INT_MIN
+void tst_QLCDNumber::displayEdgeCases_data()
+{
+ QTest::addColumn<int>("number");
+ QTest::addColumn<QString>("expected");
+
+ // INT_MIN previously caused UB due to -INT_MIN overflow in int2string().
+ QTest::newRow("INT_MIN") << INT_MIN << QString::number(INT_MIN);
+ QTest::newRow("INT_MAX") << INT_MAX << QString::number(INT_MAX);
+ QTest::newRow("Zero") << 0 << QStringLiteral("0");
+}
+
+void tst_QLCDNumber::displayEdgeCases()
+{
+ QFETCH(int, number);
+ QFETCH(QString, expected);
+
+ QLCDNumber lcd;
+ lcd.setDigitCount(12);
+ lcd.display(number);
+
+ QString result = QString::number(lcd.intValue());
+ QCOMPARE(result, expected);
+}
+
QTEST_MAIN(tst_QLCDNumber)
#include "tst_qlcdnumber.moc"