1 #ifndef TESTSEQUENCEBROWSERWIDGET_HPP_
2 #define TESTSEQUENCEBROWSERWIDGET_HPP_
5 #include <QtTest/QtTest>
6 #include <QtTest/QSignalSpy>
10 #include <boost/shared_ptr.hpp>
12 #include "alg/sequence.hpp"
13 #include "qui/seqbrowser/SequenceBrowserWidget.hpp"
15 class TestSequenceBrowserWidget : public QObject
21 void testSimpleConstructor() {
22 boost::shared_ptr<QDir> d(new QDir("."));
23 SequenceBrowserWidget *browser = new SequenceBrowserWidget(d);
26 // do we have the right colors?
27 void testChangeMotifColor() {
28 boost::shared_ptr<QDir> d(new QDir("."));
30 std::vector<Sequence> motifs;
31 motifs.push_back("AAGG");
32 std::vector<Color> colors1;
33 colors1.push_back(Color(0.0, 0.0, 1.0));
35 MussaRef m(new Mussa);
36 m->append_sequence("AAAAGGGGTTTT");
37 m->set_motifs(motifs, colors1);
38 QVERIFY(m->sequences().size() == 1);
39 QVERIFY(m->sequences()[0]->motifs().size() == 1);
40 QVERIFY(m->sequences()[0]->motifs().front().sequence == "AAGG");
41 QVERIFY(m->colorMapper()->lookup("motif", "AAGG") == colors1[0]);
43 SequenceBrowserWidget *browser = new SequenceBrowserWidget(d);
44 browser->setSequences(m->sequences(), m->colorMapper());
45 std::vector<GlSequenceRef> glseqs1(browser->sequences());
46 QVERIFY(glseqs1.size() == 1);
47 QVERIFY(glseqs1[0]->colorMapper() == m->colorMapper());
48 QVERIFY(glseqs1[0]->colorMapper()->lookup("motif", "AAGG") == colors1[0]);
50 std::vector<Color> colors2;
51 colors2.push_back(Color(1.0, 0.0, 0.0));
52 m->set_motifs(motifs, colors2);
53 QVERIFY(m->sequences().size() == 1);
54 QVERIFY(m->sequences()[0]->motifs().size() == 1);
55 QVERIFY(m->sequences()[0]->motifs().front().sequence == "AAGG");
56 QVERIFY(m->colorMapper()->lookup("motif", "AAGG") == colors2[0]);
58 std::vector<GlSequenceRef> glseqs2(browser->sequences());
59 QVERIFY(glseqs2.size() == 1);
60 QVERIFY(glseqs2[0]->colorMapper() == m->colorMapper());
61 QVERIFY(glseqs2[0]->colorMapper()->lookup("motif", "AAGG") == colors2[0]);
64 // do we have the right colors?
65 void testChangeMotifSequencer() {
66 boost::shared_ptr<QDir> d(new QDir("."));
68 std::string aagg("AAGG");
69 std::vector<Sequence> motifs1;
70 motifs1.push_back(aagg);
71 std::vector<Color> colors1;
72 colors1.push_back(Color(0.0, 0.0, 1.0));
74 MussaRef m(new Mussa);
75 m->append_sequence("AAAAGGGG");
76 m->append_sequence("AAAACCCC");
77 m->set_motifs(motifs1, colors1);
78 QVERIFY(m->sequences().size() == 2);
79 QVERIFY(m->sequences()[0]->motifs().size() == 1);
80 QVERIFY(m->sequences()[0]->motifs().front().sequence == aagg);
81 QVERIFY(m->sequences()[1]->motifs().size() == 0);
82 QVERIFY(m->colorMapper()->lookup("motif", aagg) == colors1[0]);
84 SequenceBrowserWidget *browser = new SequenceBrowserWidget(d);
85 browser->setSequences(m->sequences(), m->colorMapper());
86 // does the sequence browser have the right motif pattern?
87 std::vector<GlSequenceRef> glseqs1(browser->sequences());
88 QVERIFY(glseqs1.size() == 2);
89 QVERIFY(glseqs1[0]->motifs().size() == 1);
90 QVERIFY(glseqs1[0]->motifs().front().sequence == aagg);
91 QVERIFY(glseqs1[1]->motifs().size() == 0);
92 QVERIFY(glseqs1[0]->colorMapper() == m->colorMapper());
93 QVERIFY(glseqs1[0]->colorMapper()->lookup("motif", aagg) == colors1[0]);
95 std::vector<Sequence> motifs2;
96 std::string aacc("AACC");
97 motifs2.push_back(aacc);
98 m->set_motifs(motifs2, colors1);
99 // did the copy of our sequences in the mussa analysis object get updated?
100 QVERIFY(m->sequences().size() == 2);
101 QVERIFY(m->sequences()[0]->motifs().size() == 0);
102 QVERIFY(m->sequences()[1]->motifs().size() == 1);
103 QVERIFY(m->sequences()[1]->motifs().front().sequence == aacc);
104 QVERIFY(m->colorMapper()->lookup("motif", aacc) == colors1[0]);
106 // did the copy of our sequences in the browser get updated?
107 std::vector<GlSequenceRef> glseqs2(browser->sequences());
108 QVERIFY(glseqs2.size() == 2);
109 QVERIFY(glseqs2[0]->motifs().size() == 0);
110 QVERIFY(glseqs2[1]->motifs().size() == 1);
111 QVERIFY(glseqs2[1]->motifs().front().sequence == aacc);
112 QVERIFY(glseqs2[0]->colorMapper() == m->colorMapper());
113 QVERIFY(glseqs2[0]->colorMapper()->lookup("motif", aacc) == colors1[0]);
116 void testAnnotationsInTwoBrowsers()
118 // Make sure that our annotations parent is pointing to the
119 // most right seqspan parent
120 boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
121 std::vector<SequenceRef> seqs;
122 SequenceRef seq0(new Sequence("AAAAGGGG"));
123 seq0->add_annotation("A","A", 0, 4);
124 seqs.push_back(seq0);
125 SequenceRef seq1(new Sequence("GGGGTTTT"));
126 seqs.push_back(seq1);
128 QVERIFY(seq0->annotations().size() == 1);
129 QVERIFY(seq0->seqspan() == seq0->annotations().front()->parent() );
131 boost::shared_ptr<QDir> d(new QDir("."));
132 SequenceBrowserWidget *b1 = new SequenceBrowserWidget(d);
133 b1->setSequences(seqs, cm );
134 QVERIFY( b1->sequences().size() == 2);
135 QVERIFY( b1->sequences()[0]->annotations().size() == 1 );
136 QVERIFY( b1->sequences()[0]->seqspan() ==
137 b1->sequences()[0]->annotations().front()->parent() );
139 SequenceBrowserWidget *b2 = new SequenceBrowserWidget(d);
140 b2->setSequences(seqs, cm);
142 QVERIFY( b2->sequences()[0]->annotations().size() == 1 );
143 QVERIFY( b2->sequences()[0]->seqspan() ==
144 b2->sequences()[0]->annotations().front()->parent() );
147 #endif /*TESTSEQUENCEBROWSERWIDGET_HPP_*/