#include "collect.h"
#include <boost/test/unit_test.hpp>
#include <boost/filesystem.hpp>
-#include <fstream>
#include <cmath>
#include <iostream>
+#include <cstdio>
using std::list;
using std::cerr;
-using std::ifstream;
using std::vector;
using std::fabs;
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(), 48);
+ /* No font is specified by subrip, so none should be seen here */
+ BOOST_CHECK (!b.font);
+ BOOST_CHECK (!b.font_size.specified());
BOOST_CHECK_EQUAL (b.bold, false);
BOOST_CHECK_EQUAL (b.italic, false);
BOOST_CHECK_EQUAL (b.underline, false);
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(), 48);
+ /* No font is specified by subrip, so none should be seen here */
+ BOOST_CHECK (!b.font);
+ BOOST_CHECK (!b.font_size.specified());
BOOST_CHECK_EQUAL (b.bold, false);
BOOST_CHECK_EQUAL (b.italic, false);
BOOST_CHECK_EQUAL (b.underline, false);
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(), 48);
+ /* No font is specified by subrip, so none should be seen here */
+ BOOST_CHECK (!b.font);
+ BOOST_CHECK (!b.font_size.specified());
BOOST_CHECK_EQUAL (k->bold, false);
BOOST_CHECK_EQUAL (k->italic, false);
BOOST_CHECK_EQUAL (k->underline, false);
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(), 48);
+ /* No font is specified by subrip, so none should be seen here */
+ BOOST_CHECK (!b.font);
+ BOOST_CHECK (!b.font_size.specified());
BOOST_CHECK_EQUAL (k->bold, true);
BOOST_CHECK_EQUAL (k->italic, false);
BOOST_CHECK_EQUAL (k->underline, false);
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(), 48);
+ /* No font is specified by subrip, so none should be seen here */
+ BOOST_CHECK (!b.font);
+ BOOST_CHECK (!b.font_size.specified());
BOOST_CHECK_EQUAL (k->bold, false);
BOOST_CHECK_EQUAL (k->italic, false);
BOOST_CHECK_EQUAL (k->underline, false);
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(), 48);
+ /* No font is specified by subrip, so none should be seen here */
+ BOOST_CHECK (!b.font);
+ BOOST_CHECK (!b.font_size.specified());
BOOST_CHECK_EQUAL (k->bold, true);
BOOST_CHECK_EQUAL (k->italic, true);
BOOST_CHECK_EQUAL (k->underline, false);
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(), 48);
+ /* No font is specified by subrip, so none should be seen here */
+ BOOST_CHECK (!b.font);
+ BOOST_CHECK (!b.font_size.specified());
BOOST_CHECK_EQUAL (k->bold, false);
BOOST_CHECK_EQUAL (k->italic, false);
BOOST_CHECK_EQUAL (k->underline, false);
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(), 48);
+ /* No font is specified by subrip, so none should be seen here */
+ BOOST_CHECK (!b.font);
+ BOOST_CHECK (!b.font_size.specified());
BOOST_CHECK_EQUAL (k->bold, false);
BOOST_CHECK_EQUAL (k->italic, false);
BOOST_CHECK_EQUAL (k->underline, true);
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(), 48);
+ /* No font is specified by subrip, so none should be seen here */
+ BOOST_CHECK (!b.font);
+ BOOST_CHECK (!b.font_size.specified());
BOOST_CHECK_EQUAL (k->bold, false);
BOOST_CHECK_EQUAL (k->italic, false);
BOOST_CHECK_EQUAL (k->underline, false);
/** Test SubripReader::convert_time */
BOOST_AUTO_TEST_CASE (subrip_reader_convert_time_test)
{
- BOOST_CHECK_EQUAL (sub::SubripReader::convert_time ("00:03:10,500"), sub::Time::from_hms (0, 3, 10, 500));
- BOOST_CHECK_EQUAL (sub::SubripReader::convert_time ("04:19:51,782"), sub::Time::from_hms (4, 19, 51, 782));
+ sub::SubripReader reader;
+ BOOST_CHECK_EQUAL (reader.convert_time ("00:03:10,500"), sub::Time::from_hms (0, 3, 10, 500));
+ BOOST_CHECK_EQUAL (reader.convert_time ("04:19:51,782"), sub::Time::from_hms (4, 19, 51, 782));
}
static void
test ("sintel_fr.srt");
test ("Fight.Club.1999.720p.BRRip.x264-x0r.srt");
test ("EU13.srt");
+ test ("Subtitulos_HURTO_eng.srt");
+}
+
+#define SUB_START(f, t) \
+ BOOST_REQUIRE (i != subs.end ()); \
+ BOOST_CHECK_EQUAL (i->from, f); \
+ BOOST_CHECK_EQUAL (i->to, t); \
+ j = i->lines.begin ();
+
+#define LINE(p) \
+ BOOST_REQUIRE (j != i->lines.end ()); \
+ BOOST_CHECK (j->vertical_position.line); \
+ BOOST_CHECK_EQUAL (j->vertical_position.line.get(), p); \
+ BOOST_CHECK (j->vertical_position.reference); \
+ BOOST_CHECK_EQUAL (j->vertical_position.reference.get(), sub::TOP_OF_SUBTITLE); \
+ k = j->blocks.begin (); \
+ ++j;
+
+#define BLOCK(t, f, s, b, i, u) \
+ BOOST_REQUIRE (k != j->blocks.end ()); \
+ BOOST_CHECK_EQUAL (k->text, t); \
+ BOOST_CHECK_EQUAL (k->bold, b); \
+ BOOST_CHECK_EQUAL (k->italic, i); \
+ BOOST_CHECK_EQUAL (k->underline, u); \
+ ++k;
+
+#define SUB_END() \
+ ++i;
+
+/** Test reading of another .srt file */
+BOOST_AUTO_TEST_CASE (subrip_reader_test3)
+{
+ boost::filesystem::path p = private_test / "DCP-o-matic_test_subs_1.srt";
+ FILE* f = fopen (p.string().c_str(), "r");
+ sub::SubripReader reader (f);
+ fclose (f);
+ list<sub::Subtitle> subs = sub::collect<std::list<sub::Subtitle> > (reader.subtitles ());
+
+ list<sub::Subtitle>::iterator i = subs.begin ();
+ list<sub::Line>::iterator j;
+ list<sub::Block>::iterator k;
+
+ BOOST_REQUIRE (i != subs.end ());
+
+ SUB_START (sub::Time::from_hms (0, 0, 0, 76), sub::Time::from_hms (0, 0, 1, 116));
+ LINE (0);
+ BLOCK ("This line is normal", "Arial", 30, false, false, false);
+ LINE (1);
+ BLOCK ("This line is bold", "Arial", 30, true, false, false);
+ SUB_END ();
+
+ SUB_START (sub::Time::from_hms (0, 0, 1, 206), sub::Time::from_hms (0, 0, 2, 246));
+ LINE (0);
+ BLOCK ("This line is bold", "Arial", 30, true, false, false);
+ LINE (1);
+ BLOCK ("This line is normal", "Arial", 30, false, false, false);
+ SUB_END ();
+
+ SUB_START (sub::Time::from_hms (0, 0, 2, 308), sub::Time::from_hms (0, 0, 3, 380));
+ LINE (0);
+ BLOCK ("This line is bold", "Arial", 30, true, false, false);
+ LINE (1);
+ BLOCK ("This line is italic", "Arial", 30, false, true, false);
+ SUB_END ();
+
+ SUB_START (sub::Time::from_hms (0, 0, 3, 404), sub::Time::from_hms (0, 0, 4, 484));
+ LINE (0);
+ BLOCK ("This line is italic", "Arial", 30, false, true, false);
+ LINE (1);
+ BLOCK ("This line is bold", "Arial", 30, true, false, false);
+ SUB_END ();
+
+ SUB_START (sub::Time::from_hms (0, 0, 4, 519), sub::Time::from_hms (0, 0, 5, 604));
+ LINE (0);
+ BLOCK ("Last three words are ", "Arial", 30, false, false, false);
+ BLOCK ("bold AND italic", "Arial", 30, true, true, false);
+ LINE (1);
+ BLOCK ("Last three words are ", "Arial", 30, false, false, false);
+ BLOCK ("italic AND bold", "Arial", 30, true, true, false);
+ SUB_END ();
+
+ SUB_START (sub::Time::from_hms (0, 0, 5, 628), sub::Time::from_hms (0, 0, 6, 712));
+ LINE (0);
+ BLOCK ("Last three words are ", "Arial", 30, false, false, false);
+ BLOCK ("bold AND italic", "Arial", 30, true, true, false);
+ LINE (1);
+ BLOCK ("First three words", "Arial", 30, true, true, false);
+ BLOCK (" are italic AND bold", "Arial", 30, false, false, false);
+ SUB_END ();
+
+ SUB_START (sub::Time::from_hms (0, 0, 6, 736), sub::Time::from_hms (0, 0, 8, 31));
+ LINE (0);
+ BLOCK ("Last three words are ", "Arial", 30, false, false, false);
+ BLOCK ("bold AND italic", "Arial", 30, true, true, false);
+ LINE (1);
+ BLOCK ("This line is normal", "Arial", 30, false, false, false);
+ SUB_END ();
+
+ SUB_START (sub::Time::from_hms (0, 0, 8, 94), sub::Time::from_hms (0, 0, 9, 211));
+ LINE (0);
+ BLOCK ("Both lines are bold AND italic", "Arial", 30, true, true, false);
+ LINE (1);
+ BLOCK ("Both lines are bold AND italic", "Arial", 30, true, true, false);
+ SUB_END ();
}