void RGBMatrix_Test::copy() { RGBMatrix mtx(m_doc); mtx.setStartColor(Qt::magenta); mtx.setEndColor(Qt::yellow); mtx.setFixtureGroup(0); mtx.setAlgorithm(RGBAlgorithm::algorithm(m_doc, "Stripes")); QVERIFY(mtx.algorithm() != NULL); RGBMatrix* copyMtx = qobject_cast<RGBMatrix*> (mtx.createCopy(m_doc)); QVERIFY(copyMtx != NULL); QCOMPARE(copyMtx->startColor(), QColor(Qt::magenta)); QCOMPARE(copyMtx->endColor(), QColor(Qt::yellow)); QCOMPARE(copyMtx->fixtureGroup(), uint(0)); QVERIFY(copyMtx->algorithm() != NULL); QVERIFY(copyMtx->algorithm() != mtx.algorithm()); // Different object pointer! QCOMPARE(copyMtx->algorithm()->name(), QString("Stripes")); }
void RGBMatrix_Test::loadSave() { RGBMatrix* mtx = new RGBMatrix(m_doc); mtx->setStartColor(Qt::magenta); mtx->setEndColor(Qt::blue); mtx->setFixtureGroup(42); mtx->setAlgorithm(RGBAlgorithm::algorithm(m_doc, "Stripes")); QVERIFY(mtx->algorithm() != NULL); QCOMPARE(mtx->algorithm()->name(), QString("Stripes")); mtx->setName("Xyzzy"); mtx->setDirection(Function::Backward); mtx->setRunOrder(Function::PingPong); mtx->setDuration(1200); mtx->setFadeInSpeed(10); mtx->setFadeOutSpeed(20); mtx->setDimmerControl(false); m_doc->addFunction(mtx); QBuffer buffer; buffer.open(QIODevice::WriteOnly | QIODevice::Text); QXmlStreamWriter xmlWriter(&buffer); QVERIFY(mtx->saveXML(&xmlWriter) == true); xmlWriter.setDevice(NULL); buffer.close(); buffer.open(QIODevice::ReadOnly | QIODevice::Text); QXmlStreamReader xmlReader(&buffer); xmlReader.readNextStartElement(); QCOMPARE(xmlReader.name().toString(), QString("Function")); QCOMPARE(xmlReader.attributes().value("Type").toString(), QString("RGBMatrix")); QCOMPARE(xmlReader.attributes().value("ID").toString(), QString::number(mtx->id())); QCOMPARE(xmlReader.attributes().value("Name").toString(), QString("Xyzzy")); int speed = 0, dir = 0, run = 0, algo = 0, monocolor = 0, endcolor = 0, grp = 0, dimmer = 0; while (xmlReader.readNextStartElement()) { if (xmlReader.name() == "Speed") { QCOMPARE(xmlReader.attributes().value("FadeIn").toString(), QString("10")); QCOMPARE(xmlReader.attributes().value("FadeOut").toString(), QString("20")); QCOMPARE(xmlReader.attributes().value("Duration").toString(), QString("1200")); speed++; xmlReader.skipCurrentElement(); } else if (xmlReader.name() == "Direction") { QCOMPARE(xmlReader.readElementText(), QString("Backward")); dir++; } else if (xmlReader.name() == "RunOrder") { QCOMPARE(xmlReader.readElementText(), QString("PingPong")); run++; } else if (xmlReader.name() == "Algorithm") { // RGBAlgorithms take care of Algorithm tag's contents algo++; xmlReader.skipCurrentElement(); } else if (xmlReader.name() == "MonoColor") { QCOMPARE(xmlReader.readElementText().toUInt(), QColor(Qt::magenta).rgb()); monocolor++; } else if (xmlReader.name() == "EndColor") { QCOMPARE(xmlReader.readElementText().toUInt(), QColor(Qt::blue).rgb()); endcolor++; } else if (xmlReader.name() == "FixtureGroup") { QCOMPARE(xmlReader.readElementText(), QString("42")); grp++; } else if (xmlReader.name() == "DimmerControl") { QCOMPARE(xmlReader.readElementText(), QString("0")); dimmer++; } else { QFAIL(QString("Unexpected tag: %1").arg(xmlReader.name().toString()).toUtf8().constData()); } } QCOMPARE(speed, 1); QCOMPARE(dir, 1); QCOMPARE(run, 1); QCOMPARE(algo, 1); QCOMPARE(monocolor, 1); QCOMPARE(endcolor, 1); QCOMPARE(grp, 1); QCOMPARE(dimmer, 1); xmlReader.setDevice(NULL); buffer.seek(0); xmlReader.setDevice(&buffer); xmlReader.readNextStartElement(); RGBMatrix mtx2(m_doc); QVERIFY(mtx2.loadXML(xmlReader) == true); QCOMPARE(mtx2.direction(), Function::Backward); QCOMPARE(mtx2.runOrder(), Function::PingPong); QCOMPARE(mtx2.startColor(), QColor(Qt::magenta)); QCOMPARE(mtx2.endColor(), QColor(Qt::blue)); QCOMPARE(mtx2.fixtureGroup(), uint(42)); QVERIFY(mtx2.algorithm() != NULL); QCOMPARE(mtx2.algorithm()->name(), mtx->algorithm()->name()); QCOMPARE(mtx2.duration(), uint(1200)); QCOMPARE(mtx2.fadeInSpeed(), uint(10)); QCOMPARE(mtx2.fadeOutSpeed(), uint(20)); buffer.close(); buffer.setData(QByteArray()); buffer.open(QIODevice::WriteOnly | QIODevice::Text); xmlWriter.setDevice(&buffer); // Put some extra garbage in xmlWriter.writeStartElement("Foo"); xmlWriter.writeEndElement(); buffer.close(); buffer.open(QIODevice::ReadOnly | QIODevice::Text); xmlReader.setDevice(&buffer); xmlReader.readNextStartElement(); QVERIFY(mtx2.loadXML(xmlReader) == false); // Not a function node xmlReader.setDevice(NULL); buffer.close(); buffer.setData(QByteArray()); buffer.open(QIODevice::WriteOnly | QIODevice::Text); xmlWriter.setDevice(&buffer); // Put some extra garbage in xmlWriter.writeStartElement("Function"); xmlWriter.writeAttribute("Type", "Scene"); xmlWriter.writeEndElement(); buffer.close(); buffer.open(QIODevice::ReadOnly | QIODevice::Text); xmlReader.setDevice(&buffer); xmlReader.readNextStartElement(); QVERIFY(mtx2.loadXML(xmlReader) == false); // Not an RGBMatrix node }