diff options
| -rw-r--r-- | test/interop_subtitle_test.cc | 249 | ||||
| -rw-r--r-- | test/write_subtitle_test.cc | 236 |
2 files changed, 248 insertions, 237 deletions
diff --git a/test/interop_subtitle_test.cc b/test/interop_subtitle_test.cc index f111b80b..c49f1b57 100644 --- a/test/interop_subtitle_test.cc +++ b/test/interop_subtitle_test.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net> + Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net> This file is part of libdcp. @@ -17,13 +17,21 @@ along with libdcp. If not, see <http://www.gnu.org/licenses/>. */ + +#include "cpl.h" +#include "dcp.h" #include "interop_subtitle_asset.h" #include "interop_load_font_node.h" +#include "reel.h" +#include "reel_subtitle_asset.h" #include "subtitle_string.h" #include "subtitle_image.h" +#include "test.h" #include <boost/test/unit_test.hpp> #include <iostream> + +using std::dynamic_pointer_cast; using std::list; using std::string; using boost::shared_ptr; @@ -608,3 +616,242 @@ BOOST_AUTO_TEST_CASE (read_interop_subtitle_test3) BOOST_REQUIRE (si); BOOST_CHECK (si->png_image() == dcp::Data("test/data/sub.png")); } + + +/** Write some subtitle content as Interop XML and check that it is right */ +BOOST_AUTO_TEST_CASE (write_interop_subtitle_test) +{ + dcp::InteropSubtitleAsset c; + c.set_reel_number ("1"); + c.set_language ("EN"); + c.set_movie_title ("Test"); + + c.add ( + shared_ptr<dcp::SubtitleString>( + new dcp::SubtitleString( + string ("Frutiger"), + false, + false, + false, + dcp::Colour (255, 255, 255), + 48, + 1.0, + dcp::Time (0, 4, 9, 22, 24), + dcp::Time (0, 4, 11, 22, 24), + 0, + dcp::HALIGN_CENTER, + 0.8, + dcp::VALIGN_TOP, + dcp::DIRECTION_LTR, + "Hello world", + dcp::Effect::NONE, + dcp::Colour (0, 0, 0), + dcp::Time (0, 0, 0, 0, 24), + dcp::Time (0, 0, 0, 0, 24) + ) + ) + ); + + c.add ( + shared_ptr<dcp::SubtitleString>( + new dcp::SubtitleString( + boost::optional<string> (), + true, + true, + true, + dcp::Colour (128, 0, 64), + 91, + 1.0, + dcp::Time (5, 41, 0, 21, 24), + dcp::Time (6, 12, 15, 21, 24), + 0, + dcp::HALIGN_CENTER, + 0.4, + dcp::VALIGN_BOTTOM, + dcp::DIRECTION_LTR, + "What's going on", + dcp::Effect::BORDER, + dcp::Colour (1, 2, 3), + dcp::Time (1, 2, 3, 4, 24), + dcp::Time (5, 6, 7, 8, 24) + ) + ) + ); + + c._id = "a6c58cff-3e1e-4b38-acec-a42224475ef6"; + + check_xml ( + "<DCSubtitle Version=\"1.0\">" + "<SubtitleID>a6c58cff-3e1e-4b38-acec-a42224475ef6</SubtitleID>" + "<MovieTitle>Test</MovieTitle>" + "<ReelNumber>1</ReelNumber>" + "<Language>EN</Language>" + "<Font AspectAdjust=\"1.0\" Color=\"FFFFFFFF\" Effect=\"none\" EffectColor=\"FF000000\" Id=\"Frutiger\" Italic=\"no\" Script=\"normal\" Size=\"48\" Underlined=\"no\" Weight=\"normal\">" + "<Subtitle SpotNumber=\"1\" TimeIn=\"00:04:09:229\" TimeOut=\"00:04:11:229\" FadeUpTime=\"0\" FadeDownTime=\"0\">" + "<Text VAlign=\"top\" VPosition=\"80\">Hello world</Text>" + "</Subtitle>" + "</Font>" + "<Font AspectAdjust=\"1.0\" Color=\"FF800040\" Effect=\"border\" EffectColor=\"FF010203\" Italic=\"yes\" Script=\"normal\" Size=\"91\" Underlined=\"yes\" Weight=\"bold\">" + "<Subtitle SpotNumber=\"2\" TimeIn=\"05:41:00:219\" TimeOut=\"06:12:15:219\" FadeUpTime=\"930792\" FadeDownTime=\"4591834\">" + "<Text VAlign=\"bottom\" VPosition=\"40\">What's going on</Text>" + "</Subtitle>" + "</Font>" + "</DCSubtitle>", + c.xml_as_string (), + list<string>() + ); +} + +/** Write some subtitle content as Interop XML and check that it is right. + * This test includes some horizontal alignment. + */ +BOOST_AUTO_TEST_CASE (write_interop_subtitle_test2) +{ + dcp::InteropSubtitleAsset c; + c.set_reel_number ("1"); + c.set_language ("EN"); + c.set_movie_title ("Test"); + + c.add ( + shared_ptr<dcp::SubtitleString>( + new dcp::SubtitleString( + string ("Frutiger"), + false, + false, + false, + dcp::Colour (255, 255, 255), + 48, + 1.0, + dcp::Time (0, 4, 9, 22, 24), + dcp::Time (0, 4, 11, 22, 24), + -0.2, + dcp::HALIGN_CENTER, + 0.8, + dcp::VALIGN_TOP, + dcp::DIRECTION_LTR, + "Hello world", + dcp::Effect::NONE, + dcp::Colour (0, 0, 0), + dcp::Time (0, 0, 0, 0, 24), + dcp::Time (0, 0, 0, 0, 24) + ) + ) + ); + + c.add ( + shared_ptr<dcp::SubtitleString>( + new dcp::SubtitleString( + boost::optional<string>(), + true, + true, + true, + dcp::Colour (128, 0, 64), + 91, + 1.0, + dcp::Time (5, 41, 0, 21, 24), + dcp::Time (6, 12, 15, 21, 24), + -0.2, + dcp::HALIGN_CENTER, + 0.4, + dcp::VALIGN_BOTTOM, + dcp::DIRECTION_LTR, + "What's going on", + dcp::Effect::BORDER, + dcp::Colour (1, 2, 3), + dcp::Time (1, 2, 3, 4, 24), + dcp::Time (5, 6, 7, 8, 24) + ) + ) + ); + + c._id = "a6c58cff-3e1e-4b38-acec-a42224475ef6"; + + check_xml ( + "<DCSubtitle Version=\"1.0\">" + "<SubtitleID>a6c58cff-3e1e-4b38-acec-a42224475ef6</SubtitleID>" + "<MovieTitle>Test</MovieTitle>" + "<ReelNumber>1</ReelNumber>" + "<Language>EN</Language>" + "<Font AspectAdjust=\"1.0\" Color=\"FFFFFFFF\" Effect=\"none\" EffectColor=\"FF000000\" Id=\"Frutiger\" Italic=\"no\" Script=\"normal\" Size=\"48\" Underlined=\"no\" Weight=\"normal\">" + "<Subtitle SpotNumber=\"1\" TimeIn=\"00:04:09:229\" TimeOut=\"00:04:11:229\" FadeUpTime=\"0\" FadeDownTime=\"0\">" + "<Text HPosition=\"-20\" VAlign=\"top\" VPosition=\"80\">Hello world</Text>" + "</Subtitle>" + "</Font>" + "<Font AspectAdjust=\"1.0\" Color=\"FF800040\" Effect=\"border\" EffectColor=\"FF010203\" Italic=\"yes\" Script=\"normal\" Size=\"91\" Underlined=\"yes\" Weight=\"bold\">" + "<Subtitle SpotNumber=\"2\" TimeIn=\"05:41:00:219\" TimeOut=\"06:12:15:219\" FadeUpTime=\"930792\" FadeDownTime=\"4591834\">" + "<Text HPosition=\"-20\" VAlign=\"bottom\" VPosition=\"40\">What's going on</Text>" + "</Subtitle>" + "</Font>" + "</DCSubtitle>", + c.xml_as_string (), + list<string>() + ); +} + +/* Write some subtitle content as Interop XML using bitmaps and check that it is right */ +BOOST_AUTO_TEST_CASE (write_interop_subtitle_test3) +{ + shared_ptr<dcp::InteropSubtitleAsset> c = shared_ptr<dcp::InteropSubtitleAsset>(new dcp::InteropSubtitleAsset()); + c->set_reel_number ("1"); + c->set_language ("EN"); + c->set_movie_title ("Test"); + + c->add ( + shared_ptr<dcp::SubtitleImage>( + new dcp::SubtitleImage( + dcp::Data ("test/data/sub.png"), + dcp::Time (0, 4, 9, 22, 24), + dcp::Time (0, 4, 11, 22, 24), + 0, + dcp::HALIGN_CENTER, + 0.8, + dcp::VALIGN_TOP, + dcp::Time (0, 0, 0, 0, 24), + dcp::Time (0, 0, 0, 0, 24) + ) + ) + ); + + c->_id = "a6c58cff-3e1e-4b38-acec-a42224475ef6"; + boost::filesystem::remove_all ("build/test/write_interop_subtitle_test3"); + boost::filesystem::create_directories ("build/test/write_interop_subtitle_test3"); + c->write ("build/test/write_interop_subtitle_test3/subs.xml"); + + shared_ptr<dcp::Reel> reel(new dcp::Reel()); + reel->add(shared_ptr<dcp::ReelSubtitleAsset>(new dcp::ReelSubtitleAsset(c, dcp::Fraction(24, 1), 6046, 0))); + + dcp::XMLMetadata meta; + meta.issue_date = "2018-09-02T04:45:18+00:00"; + meta.issuer = "libdcp"; + meta.creator = "libdcp"; + meta.annotation_text = "Created by libdcp"; + + shared_ptr<dcp::CPL> cpl(new dcp::CPL("My film", dcp::FEATURE)); + cpl->add (reel); + cpl->set_metadata (meta); + cpl->set_content_version_label_text ("foo"); + + dcp::DCP dcp ("build/test/write_interop_subtitle_test3"); + dcp.add (cpl); + dcp.write_xml (dcp::INTEROP, meta); + + check_xml ( + dcp::file_to_string("test/ref/write_interop_subtitle_test3/subs.xml"), + dcp::file_to_string("build/test/write_interop_subtitle_test3/subs.xml"), + list<string>() + ); + check_file ("build/test/write_interop_subtitle_test3/d36f4bb3-c4fa-4a95-9915-6fec3110cd71.png", "test/data/sub.png"); + + check_xml ( + dcp::file_to_string("test/ref/write_interop_subtitle_test3/ASSETMAP"), + dcp::file_to_string("build/test/write_interop_subtitle_test3/ASSETMAP"), + list<string>() + ); + + check_xml ( + dcp::file_to_string("test/ref/write_interop_subtitle_test3/pkl.xml"), + dcp::file_to_string("build/test/write_interop_subtitle_test3/pkl_6a9e31a6-50a4-4ecb-8683-fa667848470a.xml"), + list<string>() + ); +} + diff --git a/test/write_subtitle_test.cc b/test/write_subtitle_test.cc index c0cbcad0..485e7370 100644 --- a/test/write_subtitle_test.cc +++ b/test/write_subtitle_test.cc @@ -143,239 +143,3 @@ BOOST_AUTO_TEST_CASE (pull_fonts_test3) BOOST_CHECK_EQUAL (sub1->font._values["size"], "42"); } -/** Write some subtitle content as Interop XML and check that it is right */ -BOOST_AUTO_TEST_CASE (write_interop_subtitle_test) -{ - dcp::InteropSubtitleAsset c; - c.set_reel_number ("1"); - c.set_language ("EN"); - c.set_movie_title ("Test"); - - c.add ( - shared_ptr<dcp::Subtitle> ( - new dcp::SubtitleString ( - string ("Frutiger"), - false, - false, - false, - dcp::Colour (255, 255, 255), - 48, - 1.0, - dcp::Time (0, 4, 9, 22, 24), - dcp::Time (0, 4, 11, 22, 24), - 0, - dcp::HALIGN_CENTER, - 0.8, - dcp::VALIGN_TOP, - dcp::DIRECTION_LTR, - "Hello world", - dcp::NONE, - dcp::Colour (0, 0, 0), - dcp::Time (0, 0, 0, 0, 24), - dcp::Time (0, 0, 0, 0, 24) - ) - ) - ); - - c.add ( - shared_ptr<dcp::Subtitle> ( - new dcp::SubtitleString ( - boost::optional<string> (), - true, - true, - true, - dcp::Colour (128, 0, 64), - 91, - 1.0, - dcp::Time (5, 41, 0, 21, 24), - dcp::Time (6, 12, 15, 21, 24), - 0, - dcp::HALIGN_CENTER, - 0.4, - dcp::VALIGN_BOTTOM, - dcp::DIRECTION_LTR, - "What's going on", - dcp::BORDER, - dcp::Colour (1, 2, 3), - dcp::Time (1, 2, 3, 4, 24), - dcp::Time (5, 6, 7, 8, 24) - ) - ) - ); - - c._id = "a6c58cff-3e1e-4b38-acec-a42224475ef6"; - - check_xml ( - "<DCSubtitle Version=\"1.0\">" - "<SubtitleID>a6c58cff-3e1e-4b38-acec-a42224475ef6</SubtitleID>" - "<MovieTitle>Test</MovieTitle>" - "<ReelNumber>1</ReelNumber>" - "<Language>EN</Language>" - "<Font AspectAdjust=\"1.0\" Color=\"FFFFFFFF\" Effect=\"none\" EffectColor=\"FF000000\" Id=\"Frutiger\" Italic=\"no\" Script=\"normal\" Size=\"48\" Underlined=\"no\" Weight=\"normal\">" - "<Subtitle SpotNumber=\"1\" TimeIn=\"00:04:09:229\" TimeOut=\"00:04:11:229\" FadeUpTime=\"0\" FadeDownTime=\"0\">" - "<Text VAlign=\"top\" VPosition=\"80\">Hello world</Text>" - "</Subtitle>" - "</Font>" - "<Font AspectAdjust=\"1.0\" Color=\"FF800040\" Effect=\"border\" EffectColor=\"FF010203\" Italic=\"yes\" Script=\"normal\" Size=\"91\" Underlined=\"yes\" Weight=\"bold\">" - "<Subtitle SpotNumber=\"2\" TimeIn=\"05:41:00:219\" TimeOut=\"06:12:15:219\" FadeUpTime=\"930792\" FadeDownTime=\"4591834\">" - "<Text VAlign=\"bottom\" VPosition=\"40\">What's going on</Text>" - "</Subtitle>" - "</Font>" - "</DCSubtitle>", - c.xml_as_string (), - list<string> () - ); -} - -/** Write some subtitle content as Interop XML and check that it is right. - * This test includes some horizontal alignment. - */ -BOOST_AUTO_TEST_CASE (write_interop_subtitle_test2) -{ - dcp::InteropSubtitleAsset c; - c.set_reel_number ("1"); - c.set_language ("EN"); - c.set_movie_title ("Test"); - - c.add ( - shared_ptr<dcp::Subtitle> ( - new dcp::SubtitleString ( - string ("Frutiger"), - false, - false, - false, - dcp::Colour (255, 255, 255), - 48, - 1.0, - dcp::Time (0, 4, 9, 22, 24), - dcp::Time (0, 4, 11, 22, 24), - -0.2, - dcp::HALIGN_CENTER, - 0.8, - dcp::VALIGN_TOP, - dcp::DIRECTION_LTR, - "Hello world", - dcp::NONE, - dcp::Colour (0, 0, 0), - dcp::Time (0, 0, 0, 0, 24), - dcp::Time (0, 0, 0, 0, 24) - ) - ) - ); - - c.add ( - shared_ptr<dcp::Subtitle> ( - new dcp::SubtitleString ( - boost::optional<string> (), - true, - true, - true, - dcp::Colour (128, 0, 64), - 91, - 1.0, - dcp::Time (5, 41, 0, 21, 24), - dcp::Time (6, 12, 15, 21, 24), - -0.2, - dcp::HALIGN_CENTER, - 0.4, - dcp::VALIGN_BOTTOM, - dcp::DIRECTION_LTR, - "What's going on", - dcp::BORDER, - dcp::Colour (1, 2, 3), - dcp::Time (1, 2, 3, 4, 24), - dcp::Time (5, 6, 7, 8, 24) - ) - ) - ); - - c._id = "a6c58cff-3e1e-4b38-acec-a42224475ef6"; - - check_xml ( - "<DCSubtitle Version=\"1.0\">" - "<SubtitleID>a6c58cff-3e1e-4b38-acec-a42224475ef6</SubtitleID>" - "<MovieTitle>Test</MovieTitle>" - "<ReelNumber>1</ReelNumber>" - "<Language>EN</Language>" - "<Font AspectAdjust=\"1.0\" Color=\"FFFFFFFF\" Effect=\"none\" EffectColor=\"FF000000\" Id=\"Frutiger\" Italic=\"no\" Script=\"normal\" Size=\"48\" Underlined=\"no\" Weight=\"normal\">" - "<Subtitle SpotNumber=\"1\" TimeIn=\"00:04:09:229\" TimeOut=\"00:04:11:229\" FadeUpTime=\"0\" FadeDownTime=\"0\">" - "<Text HPosition=\"-20\" VAlign=\"top\" VPosition=\"80\">Hello world</Text>" - "</Subtitle>" - "</Font>" - "<Font AspectAdjust=\"1.0\" Color=\"FF800040\" Effect=\"border\" EffectColor=\"FF010203\" Italic=\"yes\" Script=\"normal\" Size=\"91\" Underlined=\"yes\" Weight=\"bold\">" - "<Subtitle SpotNumber=\"2\" TimeIn=\"05:41:00:219\" TimeOut=\"06:12:15:219\" FadeUpTime=\"930792\" FadeDownTime=\"4591834\">" - "<Text HPosition=\"-20\" VAlign=\"bottom\" VPosition=\"40\">What's going on</Text>" - "</Subtitle>" - "</Font>" - "</DCSubtitle>", - c.xml_as_string (), - list<string> () - ); -} - -/* Write some subtitle content as Interop XML using bitmaps and check that it is right */ -BOOST_AUTO_TEST_CASE (write_interop_subtitle_test3) -{ - shared_ptr<dcp::InteropSubtitleAsset> c (new dcp::InteropSubtitleAsset()); - c->set_reel_number ("1"); - c->set_language ("EN"); - c->set_movie_title ("Test"); - - c->add ( - shared_ptr<dcp::Subtitle> ( - new dcp::SubtitleImage ( - dcp::Data ("test/data/sub.png"), - dcp::Time (0, 4, 9, 22, 24), - dcp::Time (0, 4, 11, 22, 24), - 0, - dcp::HALIGN_CENTER, - 0.8, - dcp::VALIGN_TOP, - dcp::Time (0, 0, 0, 0, 24), - dcp::Time (0, 0, 0, 0, 24) - ) - ) - ); - - c->_id = "a6c58cff-3e1e-4b38-acec-a42224475ef6"; - boost::filesystem::create_directories ("build/test/write_interop_subtitle_test3"); - c->write ("build/test/write_interop_subtitle_test3/subs.xml"); - - shared_ptr<dcp::Reel> reel (new dcp::Reel()); - reel->add(shared_ptr<dcp::ReelSubtitleAsset>(new dcp::ReelSubtitleAsset(c, dcp::Fraction(24, 1), 6046, 0))); - - dcp::XMLMetadata xml_meta; - xml_meta.issue_date = "2018-09-02T04:45:18+00:00"; - xml_meta.issuer = "libdcp"; - xml_meta.creator = "libdcp"; - xml_meta.annotation_text = "Created by libdcp"; - - shared_ptr<dcp::CPL> cpl (new dcp::CPL ("My film", dcp::FEATURE)); - cpl->add (reel); - cpl->set_metadata (xml_meta); - cpl->set_content_version_label_text ("foo"); - - dcp::DCP dcp ("build/test/write_interop_subtitle_test3"); - dcp.add (cpl); - dcp.write_xml (dcp::INTEROP, xml_meta); - - check_xml ( - dcp::file_to_string("test/ref/write_interop_subtitle_test3/subs.xml"), - dcp::file_to_string("build/test/write_interop_subtitle_test3/subs.xml"), - list<string>() - ); - check_file ("build/test/write_interop_subtitle_test3/ef5c6baa-be2d-4f86-9f15-b1acc792ee8b.png", "test/data/sub.png"); - - check_xml ( - dcp::file_to_string("test/ref/write_interop_subtitle_test3/ASSETMAP"), - dcp::file_to_string("build/test/write_interop_subtitle_test3/ASSETMAP"), - list<string>() - ); - - check_xml ( - dcp::file_to_string("test/ref/write_interop_subtitle_test3/pkl.xml"), - dcp::file_to_string("build/test/write_interop_subtitle_test3/pkl_f5aab304-8145-44e3-a265-aa8d8812d8a2.xml"), - list<string>() - ); -} - |
