+#ifndef TESTMOTIFMODEL_HPP_
+#define TESTMOTIFMODEL_HPP_
+#include <QtGui>
+#include <QVariant>
+#include <QtTest/QtTest>
+#include <QtTest/QSignalSpy>
+
+#include <vector>
+#include "alg/sequence.hpp"
+
+#include "qui/motif_editor/MotifModel.hpp"
+#include "qui/motif_editor/MotifElement.hpp"
+
+class TestMotifModel : public QObject
+{
+ Q_OBJECT
+
+private slots:
+
+ void testSimpleConstructor() {
+ MussaRef m(new Mussa);
+ MotifModel *model = new MotifModel(m);
+
+ QVERIFY(model->getAnalysis() == m);
+ // we should always have one empty row
+ QVERIFY(model->empty() == false);
+ QVERIFY(model->size() == 1);
+ QVERIFY(model->rowCount() == 1);
+
+ QVERIFY(model->columnCount() == MotifModel::model_column_size);
+
+ // make sure that one element is empty
+ MotifElement me(model->at(0));
+ QVERIFY(me.getSequenceText() == "");
+ QVERIFY(me.getName() == "");
+ QVERIFY(me.isEnabled() == true);
+
+ // this removes the last element?
+ model->pop_back();
+ QVERIFY(model->empty() == true);
+ QVERIFY(model->size() == 0);
+ }
+
+ void testInitializedMussaMotifs() {
+ std::vector<Sequence> motifs;
+ motifs.push_back("AAGG");
+ std::vector<Color> colors;
+ colors.push_back(Color(0.0, 0.0, 1.0));
+
+
+ MussaRef m(new Mussa);
+ m->append_sequence("AAAAGGGGTTTT");
+ m->append_sequence("GGGCCCCTTGGTT");
+ m->set_motifs(motifs, colors);
+
+ MotifModel *model = new MotifModel(m);
+
+ QVERIFY(model->getAnalysis() == m);
+ QVERIFY(model->size() == 2);
+
+ // make sure that one element is empty
+ MotifElement me(model->at(0));
+ QVERIFY(me.getSequenceText() == "AAGG");
+ QVERIFY(me.getName() == "");
+ QVERIFY(me.isEnabled() == true);
+ QVERIFY(me.getColor() == Color(0.0, 0.0, 1.0));
+ }
+
+ void testSetData() {
+ MussaRef m(new Mussa);
+ MotifModel *model = new MotifModel(m);
+ qRegisterMetaType<QModelIndex>("QModelIndex");
+ QSignalSpy data_changed_spy(model,
+ SIGNAL(dataChanged(const QModelIndex&,
+ const QModelIndex&)
+ )
+ );
+ QVERIFY(model->size() == 1);
+ QVERIFY(data_changed_spy.count() == 0);
+
+ QModelIndex row0_enabled(model->index(0, MotifModel::EnabledCell));
+ QModelIndex row0_color(model->index(0, MotifModel::ColorCell));
+ QModelIndex row0_name(model->index(0, MotifModel::NameCell));
+ QModelIndex row0_seq(model->index(0, MotifModel::SequenceCell));
+
+ model->setData(row0_name, QVariant("tata box"));
+ QVERIFY(model->size() == 2);
+ QVERIFY(data_changed_spy.count() == 1);
+ QVERIFY(model->data(row0_name) == QVariant("tata box"));
+
+ model->setData(row0_seq, QVariant("TTTAAA"));
+ QVERIFY(model->size() == 2);
+ QVERIFY(data_changed_spy.count() == 2);
+ QVERIFY(model->data(row0_seq) == QVariant("TTTAAA"));
+
+ MotifElement me(model->at(0));
+ QVERIFY(me.getName() == "tata box");
+ QVERIFY(me.getSequenceText() == "TTTAAA");
+ }
+
+ void testIterator() {
+ MussaRef m(new Mussa);
+ MotifModel *model = new MotifModel(m);
+ QVERIFY(model->size() == 1);
+
+ QModelIndex row0_enabled(model->index(0, MotifModel::EnabledCell));
+ QModelIndex row0_color(model->index(0, MotifModel::ColorCell));
+ QModelIndex row0_name(model->index(0, MotifModel::NameCell));
+ QModelIndex row0_seq(model->index(0, MotifModel::SequenceCell));
+
+ model->setData(row0_color, QVariant(QColor(0,255,0)));
+ model->setData(row0_name, QVariant("tata box"));
+ model->setData(row0_seq, QVariant("TTTAAA"));
+
+ QModelIndex row1_enabled(model->index(1, MotifModel::EnabledCell));
+ model->setData(row1_enabled, QVariant(false));
+
+ for(MotifModel::const_iterator element = model->begin();
+ element != model->end();
+ ++element)
+ {
+ // first element
+ if ( (element-model->begin()) == 0) {
+ QVERIFY(element->getQColor() == QColor(0,255,0));
+ QVERIFY(element->getName() == "tata box");
+ QVERIFY(element->getSequenceText() == "TTTAAA");
+ } if ( (element-model->begin()) == 1) {
+ QVERIFY(element->getQColor() == QColor(255,0,0));
+ QVERIFY(element->getName() == "");
+ QVERIFY(element->getSequenceText() == "");
+ } if ( (element-model->begin()) > 1) {
+ QFAIL("Too many elements in model");
+ }
+ }
+ }
+};
+
+#endif /*TESTMOTIFMODEL_HPP_*/