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