1 #ifndef TESTMOTIFMODEL_HPP_
2 #define TESTMOTIFMODEL_HPP_
5 #include <QtTest/QtTest>
6 #include <QtTest/QSignalSpy>
9 #include "alg/sequence.hpp"
11 #include "qui/motif_editor/MotifModel.hpp"
12 #include "qui/motif_editor/MotifElement.hpp"
14 class TestMotifModel : public QObject
20 void testSimpleConstructor() {
21 MussaRef m(new Mussa);
22 MotifModel *model = new MotifModel(m);
24 QVERIFY(model->getAnalysis() == m);
25 // we should always have one empty row
26 QVERIFY(model->empty() == false);
27 QVERIFY(model->size() == 1);
28 QVERIFY(model->rowCount() == 1);
30 QVERIFY(model->columnCount() == MotifModel::model_column_size);
32 // make sure that one element is empty
33 MotifElement me(model->at(0));
34 QVERIFY(me.getSequenceText() == "");
35 QVERIFY(me.getName() == "");
36 QVERIFY(me.isEnabled() == true);
38 // this removes the last element?
40 QVERIFY(model->empty() == true);
41 QVERIFY(model->size() == 0);
44 void testInitializedMussaMotifs() {
45 std::vector<Sequence> motifs;
46 motifs.push_back("AAGG");
47 std::vector<Color> colors;
48 colors.push_back(Color(0.0, 0.0, 1.0));
51 MussaRef m(new Mussa);
52 m->append_sequence("AAAAGGGGTTTT");
53 m->append_sequence("GGGCCCCTTGGTT");
54 m->set_motifs(motifs, colors);
56 MotifModel *model = new MotifModel(m);
58 QVERIFY(model->getAnalysis() == m);
59 QVERIFY(model->size() == 2);
61 // make sure that one element is empty
62 MotifElement me(model->at(0));
63 QVERIFY(me.getSequenceText() == "AAGG");
64 QVERIFY(me.getName() == "");
65 QVERIFY(me.isEnabled() == true);
66 QVERIFY(me.getColor() == Color(0.0, 0.0, 1.0));
70 MussaRef m(new Mussa);
71 MotifModel *model = new MotifModel(m);
72 qRegisterMetaType<QModelIndex>("QModelIndex");
73 QSignalSpy data_changed_spy(model,
74 SIGNAL(dataChanged(const QModelIndex&,
78 QVERIFY(model->size() == 1);
79 QVERIFY(data_changed_spy.count() == 0);
81 QModelIndex row0_enabled(model->index(0, MotifModel::EnabledCell));
82 QModelIndex row0_color(model->index(0, MotifModel::ColorCell));
83 QModelIndex row0_name(model->index(0, MotifModel::NameCell));
84 QModelIndex row0_seq(model->index(0, MotifModel::SequenceCell));
86 model->setData(row0_name, QVariant("tata box"));
87 QVERIFY(model->size() == 2);
88 QVERIFY(data_changed_spy.count() == 1);
89 QVERIFY(model->data(row0_name) == QVariant("tata box"));
91 model->setData(row0_seq, QVariant("TTTAAA"));
92 QVERIFY(model->size() == 2);
93 QVERIFY(data_changed_spy.count() == 2);
94 QVERIFY(model->data(row0_seq) == QVariant("TTTAAA"));
96 MotifElement me(model->at(0));
97 QVERIFY(me.getName() == "tata box");
98 QVERIFY(me.getSequenceText() == "TTTAAA");
101 void testIterator() {
102 MussaRef m(new Mussa);
103 MotifModel *model = new MotifModel(m);
104 QVERIFY(model->size() == 1);
106 QModelIndex row0_enabled(model->index(0, MotifModel::EnabledCell));
107 QModelIndex row0_color(model->index(0, MotifModel::ColorCell));
108 QModelIndex row0_name(model->index(0, MotifModel::NameCell));
109 QModelIndex row0_seq(model->index(0, MotifModel::SequenceCell));
111 model->setData(row0_color, QVariant(QColor(0,255,0)));
112 model->setData(row0_name, QVariant("tata box"));
113 model->setData(row0_seq, QVariant("TTTAAA"));
115 QModelIndex row1_enabled(model->index(1, MotifModel::EnabledCell));
116 model->setData(row1_enabled, QVariant(false));
118 for(MotifModel::const_iterator element = model->begin();
119 element != model->end();
123 if ( (element-model->begin()) == 0) {
124 QVERIFY(element->getQColor() == QColor(0,255,0));
125 QVERIFY(element->getName() == "tata box");
126 QVERIFY(element->getSequenceText() == "TTTAAA");
127 } if ( (element-model->begin()) == 1) {
128 QVERIFY(element->getQColor() == QColor(255,0,0));
129 QVERIFY(element->getName() == "");
130 QVERIFY(element->getSequenceText() == "");
131 } if ( (element-model->begin()) > 1) {
132 QFAIL("Too many elements in model");
138 #endif /*TESTMOTIFMODEL_HPP_*/