X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=test%2Fsubrip_test.cc;h=cd517cfe9492026a9d88fe345e21d0ab0d09e8ff;hp=85bb7c4e853f37e5a0d8178680a17e60638ee678;hb=c5c0e55b2d2ec97a8dd96f4d3e93f85d13cc9d84;hpb=1f8b45c7fd49714628009f5ed2161fbaa2b4d729 diff --git a/test/subrip_test.cc b/test/subrip_test.cc index 85bb7c4e8..cd517cfe9 100644 --- a/test/subrip_test.cc +++ b/test/subrip_test.cc @@ -17,6 +17,10 @@ */ +/** @file test/subrip_test.cc + * @brief Various tests of the subrip code. + */ + #include #include #include "lib/subrip.h" @@ -31,166 +35,23 @@ using std::string; using boost::shared_ptr; using boost::dynamic_pointer_cast; -/** Test SubRip::convert_time */ -BOOST_AUTO_TEST_CASE (subrip_time_test) -{ - BOOST_CHECK_EQUAL (SubRip::convert_time ("00:03:10,500"), ContentTime::from_seconds ((3 * 60) + 10 + 0.5)); - BOOST_CHECK_EQUAL (SubRip::convert_time ("04:19:51,782"), ContentTime::from_seconds ((4 * 3600) + (19 * 60) + 51 + 0.782)); -} - -/** Test SubRip::convert_coordinate */ -BOOST_AUTO_TEST_CASE (subrip_coordinate_test) -{ - BOOST_CHECK_EQUAL (SubRip::convert_coordinate ("foo:42"), 42); - BOOST_CHECK_EQUAL (SubRip::convert_coordinate ("X1:999"), 999); -} - -/** Test SubRip::convert_content */ -BOOST_AUTO_TEST_CASE (subrip_content_test) -{ - list c; - list p; - - c.push_back ("Hello world"); - p = SubRip::convert_content (c); - BOOST_CHECK_EQUAL (p.size(), 1); - BOOST_CHECK_EQUAL (p.front().text, "Hello world"); - c.clear (); - - c.push_back ("Hello world"); - p = SubRip::convert_content (c); - BOOST_CHECK_EQUAL (p.size(), 1); - BOOST_CHECK_EQUAL (p.front().text, "Hello world"); - BOOST_CHECK_EQUAL (p.front().bold, true); - c.clear (); - - c.push_back ("Hello world"); - p = SubRip::convert_content (c); - BOOST_CHECK_EQUAL (p.size(), 1); - BOOST_CHECK_EQUAL (p.front().text, "Hello world"); - BOOST_CHECK_EQUAL (p.front().italic, true); - c.clear (); - - c.push_back ("Hello world"); - p = SubRip::convert_content (c); - BOOST_CHECK_EQUAL (p.size(), 1); - BOOST_CHECK_EQUAL (p.front().text, "Hello world"); - BOOST_CHECK_EQUAL (p.front().underline, true); - c.clear (); - - c.push_back ("{b}Hello world{/b}"); - p = SubRip::convert_content (c); - BOOST_CHECK_EQUAL (p.size(), 1); - BOOST_CHECK_EQUAL (p.front().text, "Hello world"); - BOOST_CHECK_EQUAL (p.front().bold, true); - c.clear (); - - c.push_back ("{i}Hello world{/i}"); - p = SubRip::convert_content (c); - BOOST_CHECK_EQUAL (p.size(), 1); - BOOST_CHECK_EQUAL (p.front().text, "Hello world"); - BOOST_CHECK_EQUAL (p.front().italic, true); - c.clear (); - - c.push_back ("{u}Hello world{/u}"); - p = SubRip::convert_content (c); - BOOST_CHECK_EQUAL (p.size(), 1); - BOOST_CHECK_EQUAL (p.front().text, "Hello world"); - BOOST_CHECK_EQUAL (p.front().underline, true); - c.clear (); - - c.push_back ("This is nesting of subtitles"); - p = SubRip::convert_content (c); - BOOST_CHECK_EQUAL (p.size(), 3); - list::iterator i = p.begin (); - BOOST_CHECK_EQUAL (i->text, "This is "); - BOOST_CHECK_EQUAL (i->bold, true); - BOOST_CHECK_EQUAL (i->italic, false); - ++i; - BOOST_CHECK_EQUAL (i->text, "nesting"); - BOOST_CHECK_EQUAL (i->bold, true); - BOOST_CHECK_EQUAL (i->italic, true); - ++i; - BOOST_CHECK_EQUAL (i->text, " of subtitles"); - BOOST_CHECK_EQUAL (i->bold, true); - BOOST_CHECK_EQUAL (i->italic, false); - ++i; - c.clear (); -} - -/** Test parsing of full SubRip file content */ -BOOST_AUTO_TEST_CASE (subrip_parse_test) -{ - shared_ptr content (new SubRipContent (shared_ptr (), "test/data/subrip.srt")); - content->examine (shared_ptr ()); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds ((3 * 60) + 56.471)); - - SubRip s (content); - - vector::const_iterator i = s._subtitles.begin(); - - BOOST_CHECK (i != s._subtitles.end ()); - BOOST_CHECK_EQUAL (i->from, ContentTime::from_seconds ((1 * 60) + 49.200)); - BOOST_CHECK_EQUAL (i->to, ContentTime::from_seconds ((1 * 60) + 52.351)); - BOOST_CHECK_EQUAL (i->pieces.size(), 1); - BOOST_CHECK_EQUAL (i->pieces.front().text, "This is a subtitle, and it goes over two lines."); - - ++i; - BOOST_CHECK (i != s._subtitles.end ()); - BOOST_CHECK_EQUAL (i->from, ContentTime::from_seconds ((1 * 60) + 52.440)); - BOOST_CHECK_EQUAL (i->to, ContentTime::from_seconds ((1 * 60) + 54.351)); - BOOST_CHECK_EQUAL (i->pieces.size(), 1); - BOOST_CHECK_EQUAL (i->pieces.front().text, "We have emboldened this"); - BOOST_CHECK_EQUAL (i->pieces.front().bold, true); - - ++i; - BOOST_CHECK (i != s._subtitles.end ()); - BOOST_CHECK_EQUAL (i->from, ContentTime::from_seconds ((1 * 60) + 54.440)); - BOOST_CHECK_EQUAL (i->to, ContentTime::from_seconds ((1 * 60) + 56.590)); - BOOST_CHECK_EQUAL (i->pieces.size(), 1); - BOOST_CHECK_EQUAL (i->pieces.front().text, "And italicised this."); - BOOST_CHECK_EQUAL (i->pieces.front().italic, true); - - ++i; - BOOST_CHECK (i != s._subtitles.end ()); - BOOST_CHECK_EQUAL (i->from, ContentTime::from_seconds ((1 * 60) + 56.680)); - BOOST_CHECK_EQUAL (i->to, ContentTime::from_seconds ((1 * 60) + 58.955)); - BOOST_CHECK_EQUAL (i->pieces.size(), 1); - BOOST_CHECK_EQUAL (i->pieces.front().text, "Shall I compare thee to a summers' day?"); - - ++i; - BOOST_CHECK (i != s._subtitles.end ()); - BOOST_CHECK_EQUAL (i->from, ContentTime::from_seconds ((2 * 60) + 0.840)); - BOOST_CHECK_EQUAL (i->to, ContentTime::from_seconds ((2 * 60) + 3.400)); - BOOST_CHECK_EQUAL (i->pieces.size(), 1); - BOOST_CHECK_EQUAL (i->pieces.front().text, "Is this a dagger I see before me?"); - - ++i; - BOOST_CHECK (i != s._subtitles.end ()); - BOOST_CHECK_EQUAL (i->from, ContentTime::from_seconds ((3 * 60) + 54.560)); - BOOST_CHECK_EQUAL (i->to, ContentTime::from_seconds ((3 * 60) + 56.471)); - BOOST_CHECK_EQUAL (i->pieces.size(), 1); - BOOST_CHECK_EQUAL (i->pieces.front().text, "Hello world."); - - ++i; - BOOST_CHECK (i == s._subtitles.end ()); -} - /** Test rendering of a SubRip subtitle */ BOOST_AUTO_TEST_CASE (subrip_render_test) { - shared_ptr content (new SubRipContent (shared_ptr (), "test/data/subrip.srt")); - content->examine (shared_ptr ()); - BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds ((3 * 60) + 56.471)); - shared_ptr film = new_test_film ("subrip_render_test"); + shared_ptr content (new SubRipContent (film, "test/data/subrip.srt")); + content->examine (shared_ptr (), true); + BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds ((3 * 60) + 56.471)); shared_ptr decoder (new SubRipDecoder (content)); - shared_ptr dts = dynamic_pointer_cast (decoder->peek ()); - - shared_ptr image; - Position position; - render_subtitles (dts->subs, dcp::Size (1998, 1080), image, position); - write_image (image, "build/test/subrip_render_test.png"); + list cts = decoder->get_text_subtitles ( + ContentTimePeriod ( + ContentTime::from_seconds (109), ContentTime::from_seconds (110) + ), false + ); + BOOST_CHECK_EQUAL (cts.size(), 1); + + PositionImage image = render_subtitles (cts.front().subs, dcp::Size (1998, 1080)); + write_image (image.image, "build/test/subrip_render_test.png"); check_file ("build/test/subrip_render_test.png", "test/data/subrip_render_test.png"); }