+
+BOOST_AUTO_TEST_CASE( mussa_name_quoted_motif )
+{
+ string data = "CCAATT \"cat meow 123\" 0.1 0.2 0.3\n";
+ istringstream test_istream(data);
+
+ Mussa m1;
+ m1.append_sequence("AAAAGGGGTTTT");
+ m1.append_sequence("GGGCCCCTTCCAATT");
+ m1.load_motifs(test_istream);
+
+ std::set<Sequence> motifs = m1.motifs();
+ BOOST_REQUIRE_EQUAL(motifs.size(), 1);
+ BOOST_CHECK_EQUAL(motifs.begin()->get_name(), "cat meow 123");
+}
+
+BOOST_AUTO_TEST_CASE( mussa_name_embedded_quote_motif )
+{
+ // pretty obviously this shouldn't work as " are our delimiter
+ // and i'm too lazy to add support for \ in the parser
+ string data = "ATA 0.5 0.5 0.5\n"
+ "CCAATT \"cat \"meow 123\" 0.1 0.2 0.3\n";
+ istringstream test_istream(data);
+
+ Mussa m1;
+ m1.append_sequence("AAAAGGGGTTTT");
+ m1.append_sequence("GGGCCCCTTCCAATT");
+ BOOST_CHECK_THROW( m1.load_motifs(test_istream), motif_load_error);
+
+ std::set<Sequence> motifs = m1.motifs();
+ BOOST_REQUIRE_EQUAL(motifs.size(), 0);
+}
+
+BOOST_AUTO_TEST_CASE( mussa_save_motif )
+{
+ string data = "ATA 1 1 1 1\n"
+ "CAT \"my name\" 1 0 0.5 0.5\n";
+ istringstream data_istream(data);
+
+ Mussa m1;
+ m1.append_sequence("AAAAGGGGTTTT");
+ m1.append_sequence("GGGCCCCTTCCAATT");
+ m1.load_motifs(data_istream);
+
+ string save;
+ ostringstream save_ostream(save);
+ m1.save_motifs(save_ostream);
+
+ istringstream reloaded_istream(save_ostream.str());
+ Mussa m2;
+ m2.append_sequence("AAAAGGGGTTTT");
+ m2.append_sequence("GGGCCCCTTCCAATT");
+ m2.load_motifs(reloaded_istream);
+
+ BOOST_REQUIRE_EQUAL(m1.motifs().size(), m2.motifs().size());
+ Mussa::motif_set::const_iterator m1motif = m1.motifs().begin();
+ Mussa::motif_set::const_iterator m2motif = m2.motifs().begin();
+ for (;
+ m1motif != m1.motifs().end() and m2motif != m2.motifs().end();
+ ++m1motif, ++m2motif)
+ {
+ BOOST_CHECK_EQUAL(m1motif->get_sequence(), m2motif->get_sequence());
+ BOOST_CHECK_EQUAL(m1motif->get_name(), m2motif->get_name());
+ BOOST_CHECK_EQUAL(m1.colorMapper()->lookup("motif", m1motif->get_sequence()),
+ m2.colorMapper()->lookup("motif", m2motif->get_sequence()));
+ }
+}
+