X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=test%2Fsubrip_test.cc;h=cd517cfe9492026a9d88fe345e21d0ab0d09e8ff;hp=f23fc8a0b48ba248aaa5adc3d446764766282b19;hb=c5c0e55b2d2ec97a8dd96f4d3e93f85d13cc9d84;hpb=f9608c5299d0a58bc01b33e521d89a80be26ed23 diff --git a/test/subrip_test.cc b/test/subrip_test.cc index f23fc8a0b..cd517cfe9 100644 --- a/test/subrip_test.cc +++ b/test/subrip_test.cc @@ -17,104 +17,41 @@ */ +/** @file test/subrip_test.cc + * @brief Various tests of the subrip code. + */ + #include +#include #include "lib/subrip.h" #include "lib/subrip_content.h" +#include "lib/subrip_decoder.h" +#include "lib/render_subtitles.h" +#include "test.h" 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)); -} - -/** 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) +/** Test rendering of a SubRip subtitle */ +BOOST_AUTO_TEST_CASE (subrip_render_test) { - SubRipContent content (shared_ptr (), "test/data/subrip.srt"); - content.examine (shared_ptr ()); + 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)); + 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"); }