2022-04-02 18:24:21 +05:00

89 lines
2.6 KiB
C++

/*
SPDX-FileCopyrightText: 2020 Alexander Lohnau <alexander.lohnau@gmx.de>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include <KRunner/AbstractRunnerTest>
#include <KShell>
#include <QMimeData>
#include <QTest>
class CalculatorRunnerTest : public AbstractRunnerTest
{
Q_OBJECT
private Q_SLOTS:
void initTestCase();
void testQuery();
void test42();
void testApproximation();
void testQuery_data();
};
void CalculatorRunnerTest::initTestCase()
{
initProperties();
}
void CalculatorRunnerTest::testQuery()
{
QFETCH(QString, query);
QFETCH(QString, result);
launchQuery(query);
const QList<Plasma::QueryMatch> matches = manager->matches();
QCOMPARE(matches.size(), 1);
QCOMPARE(matches.first().text(), result);
}
void CalculatorRunnerTest::testQuery_data()
{
QTest::addColumn<QString>("query");
QTest::addColumn<QString>("result");
// clang-format off
QTest::newRow("simple addition") << "1+1" << "2";
QTest::newRow("simple subtraction") << "2-1" << "1";
QTest::newRow("simple multiplication") << "2*2" << "4";
QTest::newRow("simple division") << "6/2" << "3";
QTest::newRow("simple power") << "2^3" << "8";
QTest::newRow("x as multiplication sign") << "25x4" << "100";
QTest::newRow("single digit factorial") << "5!" << "120";
QTest::newRow("superscripted number") << ""
<< "8"; // BUG: 435932
QTest::newRow("hex to decimal lower case") << "0xf" << "15";
QTest::newRow("hex to decimal upper case") << "0xF" << "15";
QTest::newRow("hex to decimal with = at beginning") << "=0xF" << "15";
QTest::newRow("decimal to hex") << "hex=15" << "0xF";
QTest::newRow("decimal to hex with addition") << "hex=15+15" << "0x1E";
QTest::newRow("hex additions") << "0xF+0xF" << "30";
QTest::newRow("hex multiplication") << "0xF*0xF" << "225";
// BUG: 431362
QTest::newRow("hex and decimal addition") << "0x12+1" << "19";
QTest::newRow("hex and decimal addition reversed") << "1+0x12" << "19";
// clang-format on
}
void CalculatorRunnerTest::testApproximation()
{
launchQuery("5^1234567");
QCOMPARE(manager->matches().size(), 1);
QCOMPARE(manager->matches().constFirst().subtext(), "Approximation");
}
void CalculatorRunnerTest::test42()
{
launchQuery("life");
QCOMPARE(manager->matches().size(), 1);
QCOMPARE(manager->matches().constFirst().text(), "42");
launchQuery("universe");
QCOMPARE(manager->matches().size(), 1);
QCOMPARE(manager->matches().constFirst().text(), "42");
}
QTEST_MAIN(CalculatorRunnerTest)
#include "calculatorrunnertest.moc"