Support rgba() colour specifiers in Subrip files; not sure if they are strictly allow...
[libsub.git] / test / stl_text_reader_test.cc
index fa9d44896feef79d14ddec1b7c57b73d83e6f293..162790fa23cf0398b3f04a30a24490c7e4ce580e 100644 (file)
 
 */
 
-#include <boost/test/unit_test.hpp>
-#include <fstream>
 #include "stl_text_reader.h"
 #include "subtitle.h"
+#include "collect.h"
+#include <boost/test/unit_test.hpp>
+#include <fstream>
 
 using std::list;
 using std::ifstream;
+using std::vector;
 
 /* Test reading of a textual STL file */
 BOOST_AUTO_TEST_CASE (stl_text_reader_test)
 {
        ifstream file ("test/data/test_text.stl");
        sub::STLTextReader reader (file);
-       list<sub::Subtitle> subs = reader.subtitles ();
+       list<sub::Subtitle> subs = sub::collect<list<sub::Subtitle> > (reader.subtitles ());
 
        list<sub::Subtitle>::iterator i = subs.begin ();
 
-       BOOST_CHECK (i != subs.end ());
-       BOOST_CHECK_EQUAL (i->text, " This is a subtitle ");
-       BOOST_CHECK_EQUAL (i->font, "Arial");
-       BOOST_CHECK_EQUAL (i->font_size.points.get(), 42);
-       BOOST_CHECK_EQUAL (i->bold, false);
-       BOOST_CHECK_EQUAL (i->italic, false);
-       BOOST_CHECK_EQUAL (i->underline, false);
-       BOOST_CHECK_EQUAL (i->line, 0);
-       BOOST_CHECK_EQUAL (i->from.frame.get(), sub::FrameTime (0, 0, 41, 9));
-       BOOST_CHECK_EQUAL (i->to.frame.get(), sub::FrameTime (0, 0, 42, 21));
-       ++i;
 
-       BOOST_CHECK (i != subs.end ());
-       BOOST_CHECK_EQUAL (i->text, " and that's a line break");
-       BOOST_CHECK_EQUAL (i->font, "Arial");
-       BOOST_CHECK_EQUAL (i->font_size.points.get(), 42);
-       BOOST_CHECK_EQUAL (i->bold, false);
-       BOOST_CHECK_EQUAL (i->italic, false);
-       BOOST_CHECK_EQUAL (i->underline, false);
-       BOOST_CHECK_EQUAL (i->line, 1);
-       BOOST_CHECK_EQUAL (i->from.frame.get(), sub::FrameTime (0, 0, 41, 9));
-       BOOST_CHECK_EQUAL (i->to.frame.get(), sub::FrameTime (0, 0, 42, 21));
-       ++i;
+       /* First subtitle */
 
        BOOST_CHECK (i != subs.end ());
-       BOOST_CHECK_EQUAL (i->text, " This is some ");
-       BOOST_CHECK_EQUAL (i->font, "Arial");
-       BOOST_CHECK_EQUAL (i->font_size.points.get(), 42);
-       BOOST_CHECK_EQUAL (i->bold, false);
-       BOOST_CHECK_EQUAL (i->italic, false);
-       BOOST_CHECK_EQUAL (i->underline, false);
-       BOOST_CHECK_EQUAL (i->line, 0);
-       BOOST_CHECK_EQUAL (i->from.frame.get(), sub::FrameTime (0, 1, 1, 1));
-       BOOST_CHECK_EQUAL (i->to.frame.get(), sub::FrameTime (0, 1, 2, 10));
+       BOOST_CHECK_EQUAL (i->from, sub::Time::from_hmsf (0, 0, 41, 9));
+       BOOST_CHECK_EQUAL (i->to, sub::Time::from_hmsf (0, 0, 42, 21));
+
+       list<sub::Line>::iterator j = i->lines.begin ();
+       BOOST_CHECK (j != i->lines.end ());
+       BOOST_CHECK_EQUAL (j->blocks.size(), 1);
+       sub::Block b = j->blocks.front ();
+       BOOST_CHECK_EQUAL (b.text, " This is a subtitle ");
+       BOOST_CHECK_EQUAL (b.font.get(), "Arial");
+       BOOST_CHECK_EQUAL (b.font_size.points().get(), 42);
+       BOOST_CHECK_EQUAL (b.bold, false);
+       BOOST_CHECK_EQUAL (b.italic, false);
+       BOOST_CHECK_EQUAL (b.underline, false);
+       BOOST_CHECK_EQUAL (j->vertical_position.line.get(), 0);
+       ++j;
+
+       BOOST_CHECK (j != i->lines.end ());
+       BOOST_CHECK_EQUAL (j->blocks.size(), 1);
+       b = j->blocks.front ();
+       BOOST_CHECK_EQUAL (b.text, " and that's a line break");
+       BOOST_CHECK_EQUAL (b.font.get(), "Arial");
+       BOOST_CHECK_EQUAL (b.font_size.points().get(), 42);
+       BOOST_CHECK_EQUAL (b.bold, false);
+       BOOST_CHECK_EQUAL (b.italic, false);
+       BOOST_CHECK_EQUAL (b.underline, false);
+       BOOST_CHECK_EQUAL (j->vertical_position.line.get(), 1);
        ++i;
 
-       BOOST_CHECK (i != subs.end ());
-       BOOST_CHECK_EQUAL (i->text, "bold");
-       BOOST_CHECK_EQUAL (i->font, "Arial");
-       BOOST_CHECK_EQUAL (i->font_size.points.get(), 42);
-       BOOST_CHECK_EQUAL (i->bold, true);
-       BOOST_CHECK_EQUAL (i->italic, false);
-       BOOST_CHECK_EQUAL (i->underline, false);
-       BOOST_CHECK_EQUAL (i->from.frame.get(), sub::FrameTime (0, 1, 1, 1));
-       BOOST_CHECK_EQUAL (i->to.frame.get(), sub::FrameTime (0, 1, 2, 10));
-       ++i;
 
-       BOOST_CHECK (i != subs.end ());
-       BOOST_CHECK_EQUAL (i->text, " and some ");
-       BOOST_CHECK_EQUAL (i->font, "Arial");
-       BOOST_CHECK_EQUAL (i->font_size.points.get(), 42);
-       BOOST_CHECK_EQUAL (i->from.frame.get(), sub::FrameTime (0, 1, 1, 1));
-       BOOST_CHECK_EQUAL (i->to.frame.get(), sub::FrameTime (0, 1, 2, 10));
-       BOOST_CHECK_EQUAL (i->bold, false);
-       BOOST_CHECK_EQUAL (i->italic, false);
-       BOOST_CHECK_EQUAL (i->underline, false);
-       BOOST_CHECK_EQUAL (i->line, 0);
-       ++i;
-
-       BOOST_CHECK (i != subs.end ());
-       BOOST_CHECK_EQUAL (i->text, "bold italic");
-       BOOST_CHECK_EQUAL (i->font, "Arial");
-       BOOST_CHECK_EQUAL (i->font_size.points.get(), 42);
-       BOOST_CHECK_EQUAL (i->bold, true);
-       BOOST_CHECK_EQUAL (i->italic, true);
-       BOOST_CHECK_EQUAL (i->underline, false);
-       BOOST_CHECK_EQUAL (i->line, 0);
-       BOOST_CHECK_EQUAL (i->from.frame.get(), sub::FrameTime (0, 1, 1, 1));
-       BOOST_CHECK_EQUAL (i->to.frame.get(), sub::FrameTime (0, 1, 2, 10));
-       ++i;
-
-       BOOST_CHECK (i != subs.end ());
-       BOOST_CHECK_EQUAL (i->text, " and some ");
-       BOOST_CHECK_EQUAL (i->font, "Arial");
-       BOOST_CHECK_EQUAL (i->font_size.points.get(), 42);
-       BOOST_CHECK_EQUAL (i->bold, false);
-       BOOST_CHECK_EQUAL (i->italic, false);
-       BOOST_CHECK_EQUAL (i->underline, false);
-       BOOST_CHECK_EQUAL (i->from.frame.get(), sub::FrameTime (0, 1, 1, 1));
-       BOOST_CHECK_EQUAL (i->to.frame.get(), sub::FrameTime (0, 1, 2, 10));
-       ++i;
+       /* Second subtitle */
 
        BOOST_CHECK (i != subs.end ());
-       BOOST_CHECK_EQUAL (i->text, "underlined");
-       BOOST_CHECK_EQUAL (i->font, "Arial");
-       BOOST_CHECK_EQUAL (i->font_size.points.get(), 42);
-       BOOST_CHECK_EQUAL (i->bold, false);
-       BOOST_CHECK_EQUAL (i->italic, false);
-       BOOST_CHECK_EQUAL (i->underline, true);
-       BOOST_CHECK_EQUAL (i->line, 0);
-       BOOST_CHECK_EQUAL (i->from.frame.get(), sub::FrameTime (0, 1, 1, 1));
-       BOOST_CHECK_EQUAL (i->to.frame.get(), sub::FrameTime (0, 1, 2, 10));
-       ++i;
-
-       BOOST_CHECK_EQUAL (i->text, ".");
-       BOOST_CHECK_EQUAL (i->font, "Arial");
-       BOOST_CHECK_EQUAL (i->font_size.points.get(), 42);
-       BOOST_CHECK_EQUAL (i->bold, false);
-       BOOST_CHECK_EQUAL (i->italic, false);
-       BOOST_CHECK_EQUAL (i->underline, false);
-       BOOST_CHECK_EQUAL (i->line, 0);
-       BOOST_CHECK_EQUAL (i->from.frame.get(), sub::FrameTime (0, 1, 1, 1));
-       BOOST_CHECK_EQUAL (i->to.frame.get(), sub::FrameTime (0, 1, 2, 10));
-       ++i;
-       
-       BOOST_CHECK (i == subs.end ());
+       BOOST_CHECK_EQUAL (i->from, sub::Time::from_hmsf (0, 1, 1, 1));
+       BOOST_CHECK_EQUAL (i->to, sub::Time::from_hmsf (0, 1, 2, 10));
+
+       BOOST_CHECK_EQUAL (i->lines.size(), 1);
+       sub::Line l = i->lines.front ();
+       BOOST_CHECK_EQUAL (l.blocks.size(), 7);
+       BOOST_CHECK_EQUAL (l.vertical_position.line.get(), 0);
+
+       list<sub::Block>::iterator k = l.blocks.begin ();
+
+       BOOST_CHECK (k != l.blocks.end ());
+       BOOST_CHECK_EQUAL (k->text, " This is some ");
+       BOOST_CHECK_EQUAL (k->font.get(), "Arial");
+       BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
+       BOOST_CHECK_EQUAL (k->bold, false);
+       BOOST_CHECK_EQUAL (k->italic, false);
+       BOOST_CHECK_EQUAL (k->underline, false);
+       ++k;
+
+       BOOST_CHECK (k != l.blocks.end ());
+       BOOST_CHECK_EQUAL (k->text, "bold");
+       BOOST_CHECK_EQUAL (k->font.get(), "Arial");
+       BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
+       BOOST_CHECK_EQUAL (k->bold, true);
+       BOOST_CHECK_EQUAL (k->italic, false);
+       BOOST_CHECK_EQUAL (k->underline, false);
+       ++k;
+
+       BOOST_CHECK (k != l.blocks.end ());
+       BOOST_CHECK_EQUAL (k->text, " and some ");
+       BOOST_CHECK_EQUAL (k->font.get(), "Arial");
+       BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
+       BOOST_CHECK_EQUAL (k->bold, false);
+       BOOST_CHECK_EQUAL (k->italic, false);
+       BOOST_CHECK_EQUAL (k->underline, false);
+       ++k;
+
+       BOOST_CHECK (k != l.blocks.end ());
+       BOOST_CHECK_EQUAL (k->text, "bold italic");
+       BOOST_CHECK_EQUAL (k->font.get(), "Arial");
+       BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
+       BOOST_CHECK_EQUAL (k->bold, true);
+       BOOST_CHECK_EQUAL (k->italic, true);
+       BOOST_CHECK_EQUAL (k->underline, false);
+       ++k;
+
+       BOOST_CHECK (k != l.blocks.end ());
+       BOOST_CHECK_EQUAL (k->text, " and some ");
+       BOOST_CHECK_EQUAL (k->font.get(), "Arial");
+       BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
+       BOOST_CHECK_EQUAL (k->bold, false);
+       BOOST_CHECK_EQUAL (k->italic, false);
+       BOOST_CHECK_EQUAL (k->underline, false);
+       ++k;
+
+       BOOST_CHECK (k != l.blocks.end ());
+       BOOST_CHECK_EQUAL (k->text, "underlined");
+       BOOST_CHECK_EQUAL (k->font.get(), "Arial");
+       BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
+       BOOST_CHECK_EQUAL (k->bold, false);
+       BOOST_CHECK_EQUAL (k->italic, false);
+       BOOST_CHECK_EQUAL (k->underline, true);
+       ++k;
+
+       BOOST_CHECK (k != l.blocks.end ());
+       BOOST_CHECK_EQUAL (k->text, ".");
+       BOOST_CHECK_EQUAL (k->font.get(), "Arial");
+       BOOST_CHECK_EQUAL (k->font_size.points().get(), 42);
+       BOOST_CHECK_EQUAL (k->bold, false);
+       BOOST_CHECK_EQUAL (k->italic, false);
+       BOOST_CHECK_EQUAL (k->underline, false);
+       ++k;
+
+       BOOST_CHECK (k == l.blocks.end ());
 }