test MotifModel and MotifElement
[mussa.git] / qui / motif_editor / test / TestMotifModel.hpp
1 #ifndef TESTMOTIFMODEL_HPP_
2 #define TESTMOTIFMODEL_HPP_
3 #include <QtGui>
4 #include <QVariant>
5 #include <QtTest/QtTest>
6 #include <QtTest/QSignalSpy>
7
8 #include <vector>
9 #include "alg/sequence.hpp"
10
11 #include "qui/motif_editor/MotifModel.hpp"
12 #include "qui/motif_editor/MotifElement.hpp"
13
14 class TestMotifModel : public QObject
15 {
16   Q_OBJECT
17
18 private slots:
19
20   void testSimpleConstructor() {
21     MussaRef m(new Mussa);
22     MotifModel *model = new MotifModel(m);
23     
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);
29
30     QVERIFY(model->columnCount() == MotifModel::model_column_size);
31     
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);
37     
38     // this removes the last element?
39     model->pop_back();
40     QVERIFY(model->empty() == true);
41     QVERIFY(model->size() == 0);
42   }
43
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));
49     
50         
51     MussaRef m(new Mussa);
52     m->append_sequence("AAAAGGGGTTTT");
53     m->append_sequence("GGGCCCCTTGGTT");
54     m->set_motifs(motifs, colors);
55     
56     MotifModel *model = new MotifModel(m);
57     
58     QVERIFY(model->getAnalysis() == m);
59     QVERIFY(model->size() == 2);
60     
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));
67   }
68
69   void testSetData() {
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&, 
75                                                    const QModelIndex&)
76                                       )
77                                );
78     QVERIFY(model->size() == 1);
79     QVERIFY(data_changed_spy.count() == 0);
80     
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));
85     
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"));
90     
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"));
95     
96     MotifElement me(model->at(0));
97     QVERIFY(me.getName() == "tata box");
98     QVERIFY(me.getSequenceText() == "TTTAAA");
99   }
100   
101   void testIterator() {
102     MussaRef m(new Mussa);
103     MotifModel *model = new MotifModel(m);
104     QVERIFY(model->size() == 1);
105     
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));
110     
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"));
114     
115     QModelIndex row1_enabled(model->index(1, MotifModel::EnabledCell));
116     model->setData(row1_enabled, QVariant(false));
117     
118     for(MotifModel::const_iterator element = model->begin();
119         element != model->end();
120         ++element)
121     {
122       // first element
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");
133       }        
134     }
135   }
136 };
137
138 #endif /*TESTMOTIFMODEL_HPP_*/