fix problems with motif changes not showing up in sequencebrowser
[mussa.git] / qui / seqbrowser / test / TestSequenceBrowserWidget.hpp
diff --git a/qui/seqbrowser/test/TestSequenceBrowserWidget.hpp b/qui/seqbrowser/test/TestSequenceBrowserWidget.hpp
new file mode 100644 (file)
index 0000000..fc82648
--- /dev/null
@@ -0,0 +1,116 @@
+#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_*/