X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fsubrip_reader_test.cc;h=604f52a364fecf1678b686575f7d1e7d8f947135;hb=487f62d9e7e2b73cd44fdefe4a03735c7ed00fec;hp=79bda51c28f42aaf33d1973c81639b65438fe3ad;hpb=c00435b4862971c7acd3844eaaac8ae6677f8eba;p=libsub.git diff --git a/test/subrip_reader_test.cc b/test/subrip_reader_test.cc index 79bda51..604f52a 100644 --- a/test/subrip_reader_test.cc +++ b/test/subrip_reader_test.cc @@ -23,13 +23,12 @@ #include "collect.h" #include #include -#include #include #include +#include using std::list; using std::cerr; -using std::ifstream; using std::vector; using std::fabs; @@ -55,8 +54,9 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test) 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); @@ -68,8 +68,9 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test) 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); @@ -94,8 +95,9 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test) 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); @@ -103,8 +105,9 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test) 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); @@ -112,8 +115,9 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test) 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); @@ -121,8 +125,9 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test) 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); @@ -130,8 +135,9 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test) 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); @@ -139,8 +145,9 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test) 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); @@ -148,8 +155,9 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test) 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); @@ -212,6 +220,16 @@ BOOST_AUTO_TEST_CASE (subrip_reader_test2) BOOST_CHECK_EQUAL (i->lines.size(), 1); BOOST_CHECK_EQUAL (i->lines.front().blocks.front().text, "Hello world."); + ++i; + BOOST_CHECK (i != subs.end ()); + BOOST_CHECK_EQUAL (i->from, sub::Time::from_hms (0, 4, 50, 123)); + BOOST_CHECK_EQUAL (i->to, sub::Time::from_hms (0, 4, 55, 23)); + BOOST_CHECK_EQUAL (i->lines.size(), 2); + BOOST_CHECK_EQUAL (i->lines.front().blocks.front().text, "Some italics over"); + BOOST_CHECK_EQUAL (i->lines.front().blocks.front().italic, true); + BOOST_CHECK_EQUAL (i->lines.back().blocks.front().text, "multiple lines"); + BOOST_CHECK_EQUAL (i->lines.back().blocks.front().italic, true); + ++i; BOOST_CHECK (i == subs.end ()); } @@ -221,48 +239,56 @@ BOOST_AUTO_TEST_CASE (subrip_reader_convert_line_test) { sub::SubripReader r; - r.convert_line ("Hello world", 0, sub::Time (), sub::Time ()); + sub::RawSubtitle rs; + r.convert_line ("Hello world", rs); BOOST_CHECK_EQUAL (r._subs.size(), 1); BOOST_CHECK_EQUAL (r._subs.front().text, "Hello world"); r._subs.clear (); - r.convert_line ("Hello world", 0, sub::Time (), sub::Time ()); + rs = sub::RawSubtitle(); + r.convert_line ("Hello world", rs); BOOST_CHECK_EQUAL (r._subs.size(), 1); BOOST_CHECK_EQUAL (r._subs.front().text, "Hello world"); BOOST_CHECK_EQUAL (r._subs.front().bold, true); r._subs.clear (); - r.convert_line ("Hello world", 0, sub::Time (), sub::Time ()); + rs = sub::RawSubtitle(); + r.convert_line ("Hello world", rs); BOOST_CHECK_EQUAL (r._subs.size(), 1); BOOST_CHECK_EQUAL (r._subs.front().text, "Hello world"); BOOST_CHECK_EQUAL (r._subs.front().italic, true); r._subs.clear (); - r.convert_line ("Hello world", 0, sub::Time (), sub::Time ()); + rs = sub::RawSubtitle(); + r.convert_line ("Hello world", rs); BOOST_CHECK_EQUAL (r._subs.size(), 1); BOOST_CHECK_EQUAL (r._subs.front().text, "Hello world"); BOOST_CHECK_EQUAL (r._subs.front().underline, true); r._subs.clear (); - r.convert_line ("{b}Hello world{/b}", 0, sub::Time (), sub::Time ()); + rs = sub::RawSubtitle(); + r.convert_line ("{b}Hello world{/b}", rs); BOOST_CHECK_EQUAL (r._subs.size(), 1); BOOST_CHECK_EQUAL (r._subs.front().text, "Hello world"); BOOST_CHECK_EQUAL (r._subs.front().bold, true); r._subs.clear (); - r.convert_line ("{i}Hello world{/i}", 0, sub::Time (), sub::Time ()); + rs = sub::RawSubtitle(); + r.convert_line ("{i}Hello world{/i}", rs); BOOST_CHECK_EQUAL (r._subs.size(), 1); BOOST_CHECK_EQUAL (r._subs.front().text, "Hello world"); BOOST_CHECK_EQUAL (r._subs.front().italic, true); r._subs.clear (); - r.convert_line ("{u}Hello world{/u}", 0, sub::Time (), sub::Time ()); + rs = sub::RawSubtitle(); + r.convert_line ("{u}Hello world{/u}", rs); BOOST_CHECK_EQUAL (r._subs.size(), 1); BOOST_CHECK_EQUAL (r._subs.front().text, "Hello world"); BOOST_CHECK_EQUAL (r._subs.front().underline, true); r._subs.clear (); - r.convert_line ("This is nesting of subtitles", 0, sub::Time (), sub::Time ()); + rs = sub::RawSubtitle(); + r.convert_line ("This is nesting of subtitles", rs); BOOST_CHECK_EQUAL (r._subs.size(), 3); list::iterator i = r._subs.begin (); BOOST_CHECK_EQUAL (i->text, "This is "); @@ -279,7 +305,8 @@ BOOST_AUTO_TEST_CASE (subrip_reader_convert_line_test) ++i; r._subs.clear (); - r.convert_line ("simple color", 0, sub::Time (), sub::Time ()); + rs = sub::RawSubtitle(); + r.convert_line ("simple color", rs); BOOST_CHECK_EQUAL (r._subs.size(), 1); BOOST_CHECK_EQUAL (r._subs.front().text, "simple color"); BOOST_CHECK_EQUAL (r._subs.front().bold, false); @@ -288,7 +315,8 @@ BOOST_AUTO_TEST_CASE (subrip_reader_convert_line_test) BOOST_CHECK_CLOSE (r._subs.front().colour.b, 1, 0.1); r._subs.clear (); - r.convert_line ("some red text in bold", 0, sub::Time (), sub::Time ()); + rs = sub::RawSubtitle(); + r.convert_line ("some red text in bold", rs); BOOST_CHECK_EQUAL (r._subs.size(), 2); i = r._subs.begin (); BOOST_CHECK_EQUAL (i->text, "some red text "); @@ -304,7 +332,8 @@ BOOST_AUTO_TEST_CASE (subrip_reader_convert_line_test) BOOST_CHECK (fabs (i->colour.b) < 0.01); r._subs.clear (); - r.convert_line ("some blue text in bold", 0, sub::Time (), sub::Time ()); + rs = sub::RawSubtitle(); + r.convert_line ("some blue text in bold", rs); BOOST_CHECK_EQUAL (r._subs.size(), 2); i = r._subs.begin (); BOOST_CHECK_EQUAL (i->text, "some blue text "); @@ -324,8 +353,9 @@ BOOST_AUTO_TEST_CASE (subrip_reader_convert_line_test) /** 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 @@ -348,5 +378,109 @@ BOOST_AUTO_TEST_CASE (subrip_read_test) test ("sintel_en.srt"); test ("sintel_fr.srt"); test ("Fight.Club.1999.720p.BRRip.x264-x0r.srt"); - test ("Chudo.Berna.2003.DUAL.BDRip.XviD.AC3.-HELLYWOOD.ENG.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 subs = sub::collect > (reader.subtitles ()); + + list::iterator i = subs.begin (); + list::iterator j; + list::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 (); }