X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fsubrip_test.cc;h=84ad7f25d4148b87e4ae5471e06263769ef2e3a5;hb=1f82930e73679d6aec5223caa255f564339a1a2a;hp=0dbf6d3104321716724975905e8ea2ef818800c1;hpb=86214f4619476b1a4951e15f002a93743b5f7a1e;p=dcpomatic.git diff --git a/test/subrip_test.cc b/test/subrip_test.cc index 0dbf6d310..84ad7f25d 100644 --- a/test/subrip_test.cc +++ b/test/subrip_test.cc @@ -17,8 +17,12 @@ */ +/** @file test/subrip_test.cc + * @brief Various tests of the subrip code. + */ + #include -#include +#include #include "lib/subrip.h" #include "lib/subrip_content.h" #include "lib/subrip_decoder.h" @@ -29,12 +33,13 @@ using std::list; using std::vector; 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"), rint (((3 * 60) + 10 + 0.5) * TIME_HZ)); - BOOST_CHECK_EQUAL (SubRip::convert_time ("04:19:51,782"), rint (((4 * 3600) + (19 * 60) + 51 + 0.782) * TIME_HZ)); + 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 */ @@ -120,54 +125,55 @@ BOOST_AUTO_TEST_CASE (subrip_content_test) /** 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")); + shared_ptr film = new_test_film ("subrip_parse_test"); + shared_ptr content (new SubRipContent (film, "test/data/subrip.srt")); content->examine (shared_ptr ()); - BOOST_CHECK_EQUAL (content->full_length(), ((3 * 60) + 56.471) * TIME_HZ); + 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, ((1 * 60) + 49.200) * TIME_HZ); - BOOST_CHECK_EQUAL (i->to, ((1 * 60) + 52.351) * TIME_HZ); + BOOST_CHECK_EQUAL (i->period.from, ContentTime::from_seconds ((1 * 60) + 49.200)); + BOOST_CHECK_EQUAL (i->period.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, ((1 * 60) + 52.440) * TIME_HZ); - BOOST_CHECK_EQUAL (i->to, ((1 * 60) + 54.351) * TIME_HZ); + BOOST_CHECK_EQUAL (i->period.from, ContentTime::from_seconds ((1 * 60) + 52.440)); + BOOST_CHECK_EQUAL (i->period.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, ((1 * 60) + 54.440) * TIME_HZ); - BOOST_CHECK_EQUAL (i->to, ((1 * 60) + 56.590) * TIME_HZ); + BOOST_CHECK_EQUAL (i->period.from, ContentTime::from_seconds ((1 * 60) + 54.440)); + BOOST_CHECK_EQUAL (i->period.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, ((1 * 60) + 56.680) * TIME_HZ); - BOOST_CHECK_EQUAL (i->to, ((1 * 60) + 58.955) * TIME_HZ); + BOOST_CHECK_EQUAL (i->period.from, ContentTime::from_seconds ((1 * 60) + 56.680)); + BOOST_CHECK_EQUAL (i->period.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, ((2 * 60) + 0.840) * TIME_HZ); - BOOST_CHECK_EQUAL (i->to, ((2 * 60) + 3.400) * TIME_HZ); + BOOST_CHECK_EQUAL (i->period.from, ContentTime::from_seconds ((2 * 60) + 0.840)); + BOOST_CHECK_EQUAL (i->period.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, ((3 * 60) + 54.560) * TIME_HZ); - BOOST_CHECK_EQUAL (i->to, ((3 * 60) + 56.471) * TIME_HZ); + BOOST_CHECK_EQUAL (i->period.from, ContentTime::from_seconds ((3 * 60) + 54.560)); + BOOST_CHECK_EQUAL (i->period.to, ContentTime::from_seconds ((3 * 60) + 56.471)); BOOST_CHECK_EQUAL (i->pieces.size(), 1); BOOST_CHECK_EQUAL (i->pieces.front().text, "Hello world."); @@ -175,31 +181,32 @@ BOOST_AUTO_TEST_CASE (subrip_parse_test) BOOST_CHECK (i == s._subtitles.end ()); } -static list subtitles; - -static void -process_subtitle (list s) -{ - subtitles = s; -} - - /** 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(), ((3 * 60) + 56.471) * TIME_HZ); - shared_ptr film = new_test_film ("subrip_render_test"); - - shared_ptr decoder (new SubRipDecoder (film, content)); - decoder->TextSubtitle.connect (boost::bind (&process_subtitle, _1)); - decoder->pass (); - - shared_ptr image; - Position position; - render_subtitles (subtitles, libdcp::Size (1998, 1080), image, position); - write_image (image, "build/test/subrip_render_test.png"); + shared_ptr content (new SubRipContent (film, "test/data/subrip.srt")); + content->examine (shared_ptr ()); + BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds ((3 * 60) + 56.471)); + + shared_ptr decoder (new SubRipDecoder (content)); + 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"); } + +/** Test of reading a typical .srt */ +BOOST_AUTO_TEST_CASE (subrip_read_test) +{ + shared_ptr film = new_test_film ("subrip_read_test"); + boost::filesystem::path p = private_data / "sintel_en.srt"; + shared_ptr s (new SubRipContent (film, p)); + s->examine (shared_ptr ()); +}