+#ifndef TESTSEQUENCEBROWSERWIDGET_HPP_
+#define TESTSEQUENCEBROWSERWIDGET_HPP_
+#include <QtGui>
+#include <QVariant>
+#include <QtTest/QtTest>
+#include <QtTest/QSignalSpy>
+
+#include <vector>
+
+#include <boost/shared_ptr.hpp>
+
+#include "alg/sequence.hpp"
+#include "qui/seqbrowser/SequenceBrowserWidget.hpp"
+
+class TestSequenceBrowserWidget : public QObject
+{
+ Q_OBJECT
+
+private slots:
+
+ void testSimpleConstructor() {
+ boost::shared_ptr<QDir> d(new QDir("."));
+ SequenceBrowserWidget *browser = new SequenceBrowserWidget(d);
+ }
+
+ // do we have the right colors?
+ void testChangeMotifColor() {
+ boost::shared_ptr<QDir> d(new QDir("."));
+
+ std::vector<Sequence> motifs;
+ motifs.push_back("AAGG");
+ std::vector<Color> colors1;
+ colors1.push_back(Color(0.0, 0.0, 1.0));
+
+ MussaRef m(new Mussa);
+ m->append_sequence("AAAAGGGGTTTT");
+ m->set_motifs(motifs, colors1);
+ QVERIFY(m->sequences().size() == 1);
+ QVERIFY(m->sequences()[0]->motifs().size() == 1);
+ QVERIFY(m->sequences()[0]->motifs().front().sequence == "AAGG");
+ QVERIFY(m->colorMapper()->lookup("motif", "AAGG") == colors1[0]);
+
+ SequenceBrowserWidget *browser = new SequenceBrowserWidget(d);
+ browser->setSequences(m->sequences(), m->colorMapper());
+ std::vector<GlSequenceRef> glseqs1(browser->sequences());
+ QVERIFY(glseqs1.size() == 1);
+ QVERIFY(glseqs1[0]->colorMapper() == m->colorMapper());
+ QVERIFY(glseqs1[0]->colorMapper()->lookup("motif", "AAGG") == colors1[0]);
+
+ std::vector<Color> colors2;
+ colors2.push_back(Color(1.0, 0.0, 0.0));
+ m->set_motifs(motifs, colors2);
+ QVERIFY(m->sequences().size() == 1);
+ QVERIFY(m->sequences()[0]->motifs().size() == 1);
+ QVERIFY(m->sequences()[0]->motifs().front().sequence == "AAGG");
+ QVERIFY(m->colorMapper()->lookup("motif", "AAGG") == colors2[0]);
+
+ std::vector<GlSequenceRef> glseqs2(browser->sequences());
+ QVERIFY(glseqs2.size() == 1);
+ QVERIFY(glseqs2[0]->colorMapper() == m->colorMapper());
+ QVERIFY(glseqs2[0]->colorMapper()->lookup("motif", "AAGG") == colors2[0]);
+ }
+
+ // do we have the right colors?
+ void testChangeMotifSequencer() {
+ boost::shared_ptr<QDir> d(new QDir("."));
+
+ std::string aagg("AAGG");
+ std::vector<Sequence> motifs1;
+ motifs1.push_back(aagg);
+ std::vector<Color> colors1;
+ colors1.push_back(Color(0.0, 0.0, 1.0));
+
+ MussaRef m(new Mussa);
+ m->append_sequence("AAAAGGGG");
+ m->append_sequence("AAAACCCC");
+ m->set_motifs(motifs1, colors1);
+ QVERIFY(m->sequences().size() == 2);
+ QVERIFY(m->sequences()[0]->motifs().size() == 1);
+ QVERIFY(m->sequences()[0]->motifs().front().sequence == aagg);
+ QVERIFY(m->sequences()[1]->motifs().size() == 0);
+ QVERIFY(m->colorMapper()->lookup("motif", aagg) == colors1[0]);
+
+ SequenceBrowserWidget *browser = new SequenceBrowserWidget(d);
+ browser->setSequences(m->sequences(), m->colorMapper());
+ // does the sequence browser have the right motif pattern?
+ std::vector<GlSequenceRef> glseqs1(browser->sequences());
+ QVERIFY(glseqs1.size() == 2);
+ QVERIFY(glseqs1[0]->motifs().size() == 1);
+ QVERIFY(glseqs1[0]->motifs().front().sequence == aagg);
+ QVERIFY(glseqs1[1]->motifs().size() == 0);
+ QVERIFY(glseqs1[0]->colorMapper() == m->colorMapper());
+ QVERIFY(glseqs1[0]->colorMapper()->lookup("motif", aagg) == colors1[0]);
+
+ std::vector<Sequence> motifs2;
+ std::string aacc("AACC");
+ motifs2.push_back(aacc);
+ m->set_motifs(motifs2, colors1);
+ // did the copy of our sequences in the mussa analysis object get updated?
+ QVERIFY(m->sequences().size() == 2);
+ QVERIFY(m->sequences()[0]->motifs().size() == 0);
+ QVERIFY(m->sequences()[1]->motifs().size() == 1);
+ QVERIFY(m->sequences()[1]->motifs().front().sequence == aacc);
+ QVERIFY(m->colorMapper()->lookup("motif", aacc) == colors1[0]);
+
+ // did the copy of our sequences in the browser get updated?
+ std::vector<GlSequenceRef> glseqs2(browser->sequences());
+ QVERIFY(glseqs2.size() == 2);
+ QVERIFY(glseqs2[0]->motifs().size() == 0);
+ QVERIFY(glseqs2[1]->motifs().size() == 1);
+ QVERIFY(glseqs2[1]->motifs().front().sequence == aacc);
+ QVERIFY(glseqs2[0]->colorMapper() == m->colorMapper());
+ QVERIFY(glseqs2[0]->colorMapper()->lookup("motif", aacc) == colors1[0]);
+ }
+};
+#endif /*TESTSEQUENCEBROWSERWIDGET_HPP_*/