File indexing completed on 2024-05-12 16:45:26

0001 /***************************************************************************
0002  * SPDX-FileCopyrightText: 2022 S. MANKOWSKI stephane@mankowski.fr
0003  * SPDX-FileCopyrightText: 2022 G. DE BURE support@mankowski.fr
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  ***************************************************************************/
0006 /** @file
0007  * This file is a test for SKGCalculatorEdit component.
0008  *
0009  * @author Stephane MANKOWSKI / Guillaume DE BURE
0010  */
0011 #include "skgtestcalculatoredit.h"
0012 
0013 #include <qtestevent.h>
0014 #include <qtestkeyboard.h>
0015 
0016 #include "skgcalculatoredit.h"
0017 
0018 void SKGTESTCalculatorEdit::TestValueCALCULATOR_data()
0019 {
0020     QTest::addColumn<QTestEventList>("events");
0021     QTest::addColumn<double>("expected");
0022 
0023     {
0024         QTestEventList list;
0025         list.addKeyClicks(QStringLiteral("5.1"));
0026         QTest::newRow("simple positive value") << list << 5.1;
0027     }
0028 
0029     {
0030         QTestEventList list;
0031         list.addKeyClicks(QStringLiteral("-7.2"));
0032         QTest::newRow("simple negative value") << list << -7.2;
0033     }
0034 
0035     {
0036         QTestEventList list;
0037         list.addKeyClicks(QStringLiteral("10+5"));
0038         list.addKeyClick(Qt::Key_Return);
0039         QTest::newRow("enter +") << list << 15.0;
0040     }
0041 
0042     {
0043         QTestEventList list;
0044         list.addKeyClicks(QStringLiteral("3.5*3"));
0045         list.addKeyClick(Qt::Key_Return);
0046         QTest::newRow("enter *") << list << 10.5;
0047     }
0048 
0049     {
0050         QTestEventList list;
0051         list.addKeyClicks(QStringLiteral("5/2"));
0052         list.addKeyClick(Qt::Key_Return);
0053         QTest::newRow("enter /") << list << 2.5;
0054     }
0055 
0056     {
0057         QTestEventList list;
0058         list.addKeyClicks(QStringLiteral("-5*2/4-6.2+3.1+4.5"));
0059         list.addKeyClick(Qt::Key_Return);
0060         QTest::newRow("enter complex operation") << list << -1.1;
0061     }
0062 
0063     {
0064         QTestEventList list;
0065         list.addKeyClicks(QStringLiteral("3,5*3"));
0066         list.addKeyClick(Qt::Key_Return);
0067         QTest::newRow("enter ,") << list << 10.5;
0068     }
0069 
0070     {
0071         QTestEventList list;
0072         list.addKeyClicks(QStringLiteral("3 024,25"));
0073         list.addKeyClick(Qt::Key_Return);
0074         QTest::newRow("enter 3 024,25") << list << 3024.25;
0075     }
0076 }
0077 
0078 
0079 void SKGTESTCalculatorEdit::TestValueCALCULATOR()
0080 {
0081     QFETCH(QTestEventList, events);
0082     QFETCH(double, expected);
0083 
0084     SKGCalculatorEdit calculator(nullptr);
0085     calculator.setMode(SKGCalculatorEdit::CALCULATOR);
0086     events.simulate(&calculator);
0087 
0088     calculator.valid();
0089     calculator.formula();
0090     calculator.addParameterValue(QStringLiteral("a"), 5.1);
0091 
0092     QCOMPARE(calculator.value(), expected);
0093 }
0094 
0095 void SKGTESTCalculatorEdit::TestValueEXPRESSION_data()
0096 {
0097     QTest::addColumn<QTestEventList>("events");
0098     QTest::addColumn<bool>("valid");
0099     QTest::addColumn<double>("expected");
0100 
0101     {
0102         QTestEventList list;
0103         list.addKeyClicks(QStringLiteral("abc"));
0104         list.addKeyClick(Qt::Key_Return);
0105         QTest::newRow("invalid expression") << list << false << 0.0;
0106     }
0107     {
0108         QTestEventList list;
0109         list.addKeyClicks(QStringLiteral("1e"));
0110         list.addKeyClick(Qt::Key_Return);
0111         list.addKeyClicks(QStringLiteral("1"));
0112         QTest::newRow("valid expression after invalid one") << list << true << 10.0;
0113     }
0114 
0115     {
0116         QTestEventList list;
0117         list.addKeyClicks(QStringLiteral("5.1"));
0118         QTest::newRow("simple positive value") << list << true << 5.1;
0119     }
0120 
0121     {
0122         QTestEventList list;
0123         list.addKeyClicks(QStringLiteral("-7.2"));
0124         QTest::newRow("simple negative value") << list << true << -7.2;
0125     }
0126 
0127     {
0128         QTestEventList list;
0129         list.addKeyClicks(QStringLiteral("10+5"));
0130         list.addKeyClick(Qt::Key_Return);
0131         QTest::newRow("enter +") << list << true << 15.0;
0132     }
0133 
0134     {
0135         QTestEventList list;
0136         list.addKeyClicks(QStringLiteral("3.5*3"));
0137         list.addKeyClick(Qt::Key_Return);
0138         QTest::newRow("enter *") << list << true << 10.5;
0139     }
0140 
0141     {
0142         QTestEventList list;
0143         list.addKeyClicks(QStringLiteral("5/2"));
0144         list.addKeyClick(Qt::Key_Return);
0145         QTest::newRow("enter /") << list << true << 2.5;
0146     }
0147 
0148     {
0149         QTestEventList list;
0150         list.addKeyClicks(QStringLiteral("-5*2/4-6.2+3.1+4.5"));
0151         list.addKeyClick(Qt::Key_Return);
0152         QTest::newRow("enter complex operation") << list << true << -1.1;
0153     }
0154 
0155     {
0156         QTestEventList list;
0157         list.addKeyClicks(QStringLiteral("3,5*3"));
0158         list.addKeyClick(Qt::Key_Return);
0159         QTest::newRow("enter ,") << list << true << 10.5;
0160     }
0161 
0162     {
0163         QTestEventList list;
0164         list.addKeyClicks(QStringLiteral("3 024,25"));
0165         list.addKeyClick(Qt::Key_Return);
0166         QTest::newRow("enter 3 024,25") << list << true << 3024.25;
0167     }
0168 }
0169 
0170 void SKGTESTCalculatorEdit::TestValueEXPRESSION()
0171 {
0172     QFETCH(QTestEventList, events);
0173     QFETCH(bool, valid);
0174     QFETCH(double, expected);
0175 
0176     SKGCalculatorEdit calculator(nullptr);
0177     calculator.setMode(SKGCalculatorEdit::EXPRESSION);
0178     events.simulate(&calculator);
0179 
0180     QCOMPARE(calculator.valid(), valid);
0181     QCOMPARE(calculator.value(), expected);
0182 }
0183 
0184 void SKGTESTCalculatorEdit::TestString_data()
0185 {
0186     QTest::addColumn<QTestEventList>("events");
0187     QTest::addColumn<QString>("expected");
0188     {
0189         QTestEventList list;
0190         list.addKeyClicks(QStringLiteral("3,5*3"));
0191         list.addKeyClick(Qt::Key_Return);
0192         QTest::newRow("enter , as string") << list << "10.5";
0193     }
0194 
0195     {
0196         QTestEventList list;
0197         list.addKeyClicks(QStringLiteral("5a"));
0198         list.addKeyClick(Qt::Key_Return);
0199         QTest::newRow("invalid expression") << list << "5a";
0200     }
0201 
0202     {
0203         QTestEventList list;
0204         list.addKeyClicks(QStringLiteral("-7.2"));
0205         list.addKeyClick(Qt::Key_Return);
0206         QTest::newRow("simple negative value") << list << "-7.2";
0207     }
0208 
0209     {
0210         QTestEventList list;
0211         list.addKeyClicks(QStringLiteral("+7.2"));
0212         list.addKeyClick(Qt::Key_Return);
0213         QTest::newRow("simple positive value") << list << "+7.2";
0214     }
0215 
0216     {
0217         QTestEventList list;
0218         list.addKeyClicks(QStringLiteral("-1.84*4-0.46*2-1.89-3.7"));
0219         list.addKeyClick(Qt::Key_Return);
0220         QTest::newRow("Bug 261318") << list << "-13.87";
0221     }
0222 }
0223 
0224 void SKGTESTCalculatorEdit::TestString()
0225 {
0226     QFETCH(QTestEventList, events);
0227     QFETCH(QString, expected);
0228 
0229     SKGCalculatorEdit calculator(nullptr);
0230     calculator.setMode(SKGCalculatorEdit::EXPRESSION);
0231     events.simulate(&calculator);
0232 
0233     QCOMPARE(calculator.text(), expected);
0234 }
0235 
0236 void SKGTESTCalculatorEdit::TestSign_data()
0237 {
0238     QTest::addColumn<QTestEventList>("events");
0239     QTest::addColumn<int>("expected");
0240 
0241     {
0242         QTestEventList list;
0243         list.addKeyClicks(QStringLiteral("5.1"));
0244         QTest::newRow("simple positive value") << list << 0;
0245     }
0246 
0247     {
0248         QTestEventList list;
0249         list.addKeyClicks(QStringLiteral("-7.2"));
0250         QTest::newRow("simple negative value") << list << -1;
0251     }
0252 
0253     {
0254         QTestEventList list;
0255         list.addKeyClicks(QStringLiteral("+7.2"));
0256         QTest::newRow("simple positive value") << list << 1;
0257     }
0258 }
0259 
0260 void SKGTESTCalculatorEdit::TestSign()
0261 {
0262     QFETCH(QTestEventList, events);
0263     QFETCH(int, expected);
0264 
0265     SKGCalculatorEdit calculator(nullptr);
0266     calculator.setMode(SKGCalculatorEdit::CALCULATOR);
0267     events.simulate(&calculator);
0268 
0269     QCOMPARE(calculator.sign(), expected);
0270 }
0271 
0272 QTEST_MAIN(SKGTESTCalculatorEdit)
0273