File indexing completed on 2024-05-19 04:34:09
0001 /*************************************************************************** 0002 * * 0003 * copyright : (C) 2007 The University of Toronto * 0004 * * 0005 * This program is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 * * 0010 ***************************************************************************/ 0011 0012 #include "testscalar.h" 0013 0014 #include <QtTest> 0015 0016 #include <QDomDocument> 0017 0018 #include <scalar.h> 0019 0020 #include <math_kst.h> 0021 #include <kst_inf.h> 0022 0023 #include <datacollection.h> 0024 #include <objectstore.h> 0025 #include "updatemanager.h" 0026 0027 static Kst::ObjectStore _store; 0028 0029 double NOPOINT = NAN; 0030 0031 SListener::SListener() : QObject(), _trigger(0) {} 0032 SListener::~SListener() {} 0033 void SListener::trigger(qint64) { 0034 _trigger++; 0035 } 0036 0037 0038 QDomDocument TestScalar::makeDOMDocument(const QString& tag, const QString& val, bool orphan) { 0039 QDomDocument loadTest("scalardocument"); 0040 QDomElement scalardoc, child; 0041 QDomText text; 0042 0043 scalardoc = loadTest.createElement("scalar"); 0044 0045 child = loadTest.createElement("tag"); 0046 text = loadTest.createTextNode(tag); 0047 child.appendChild(text); 0048 scalardoc.appendChild(child); 0049 0050 child = loadTest.createElement("value"); 0051 text = loadTest.createTextNode(val); 0052 child.appendChild(text); 0053 scalardoc.appendChild(child); 0054 0055 if (orphan) { 0056 child = loadTest.createElement("orphan"); 0057 scalardoc.appendChild(child); 0058 } 0059 0060 loadTest.appendChild(scalardoc); 0061 0062 return loadTest; 0063 } 0064 0065 0066 void TestScalar::cleanupTestCase() { 0067 _store.clear(); 0068 } 0069 0070 0071 void TestScalar::testScalar() { 0072 Kst::ScalarPtr sp = Kst::kst_cast<Kst::Scalar>(_store.createObject<Kst::Scalar>()); 0073 QCOMPARE(sp->value(), 0.0); 0074 *sp = 3.1415; 0075 QVERIFY(sp->displayable()); 0076 QCOMPARE(sp->value(), 3.1415); 0077 sp->setValue(2.1415); 0078 QCOMPARE(sp->value(), 2.1415); 0079 sp->setValue(NOPOINT); 0080 QVERIFY(sp->value() != sp->value()); 0081 sp->setValue(INF ); 0082 0083 QVERIFY(sp->value() == INF); 0084 0085 QCOMPARE((*sp = 2.0).value(), 2.0); 0086 SListener *listener = new SListener; 0087 Kst::UpdateManager::self()->setStore(&_store); 0088 QObject::connect(Kst::UpdateManager::self(), SIGNAL(objectsUpdated(qint64)), listener, SLOT(trigger(qint64))); 0089 0090 *sp = 3.1415; 0091 Kst::UpdateManager::self()->doUpdates(true); 0092 QCOMPARE(listener->_trigger, 1); 0093 0094 sp->setValue(3.1415); 0095 QCOMPARE(listener->_trigger, 1); 0096 Kst::UpdateManager::self()->doUpdates(true); 0097 QCOMPARE(listener->_trigger, 2); 0098 0099 *sp = 1.1415; 0100 Kst::UpdateManager::self()->doUpdates(true); 0101 QCOMPARE(listener->_trigger, 3); 0102 0103 Kst::ScalarPtr sp2 = Kst::kst_cast<Kst::Scalar>(_store.createObject<Kst::Scalar>()); 0104 0105 QVERIFY(sp->displayable()); 0106 QVERIFY(sp2->displayable()); 0107 0108 // FIXME: This constructor is no longer used - test using the factory 0109 // QDomNode n; 0110 // QDomElement e; 0111 // n = makeDOMDocument("load1", "2.14159265").firstChild(); 0112 // e = n.toElement(); 0113 // 0114 // Kst::ScalarPtr sp3 = new Kst::Scalar(&_store, e); 0115 // QCOMPARE(sp3->orphan(), false); 0116 // QCOMPARE(sp3->value(), 2.14159265); 0117 // QCOMPARE(sp3->tag().tagString(), QLatin1String("load1")); 0118 // QVERIFY(sp3->displayable()); 0119 // 0120 // n = makeDOMDocument("55.4232", "55.4232", true).firstChild(); 0121 // e = n.toElement(); 0122 // Kst::ScalarPtr sp4 = new Kst::Scalar(&_store, e); 0123 // QVERIFY(sp4->orphan()); 0124 // QCOMPARE(sp4->value(), 55.4232); 0125 // QCOMPARE(sp4->tag().tagString(), QLatin1String("55.4232")); 0126 // QVERIFY(!sp4->displayable()); 0127 // 0128 // n = makeDOMDocument("load2", "NAN").firstChild(); 0129 // e = n.toElement(); 0130 // sp4 = new Kst::Scalar(&_store, e); 0131 // QVERIFY(sp4->value() != sp4->value()); 0132 // 0133 // n = makeDOMDocument("load3", "INF").firstChild(); 0134 // e = n.toElement(); 0135 // sp4 = new Kst::Scalar(&_store, e); 0136 // 0137 // QVERIFY(sp4->value() == INF); 0138 // 0139 // n = makeDOMDocument("load4", "-INF").firstChild(); 0140 // e = n.toElement(); 0141 // sp4 = new Kst::Scalar(&_store, e); 0142 // 0143 // QVERIFY(sp4->value() == -INF); 0144 0145 delete listener; 0146 } 0147 0148 #ifdef KST_USE_QTEST_MAIN 0149 QTEST_MAIN(TestScalar) 0150 #endif 0151 0152 // vim: ts=2 sw=2 et