diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-04-14 11:11:47 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-04-14 11:11:47 +0200 |
| commit | 4e514f7dcc12a72bb4c78fd5067ff872ef54025b (patch) | |
| tree | 535f2e7ea94a0407e2553aaa17d87f64f99e864b /test | |
| parent | 20ea15c402bc45f493597fad089ba6a02d12af61 (diff) | |
Merge read_smpte_subtitle_test with smpte_subtitle_test.
Diffstat (limited to 'test')
| -rw-r--r-- | test/read_smpte_subtitle_test.cc | 135 | ||||
| -rw-r--r-- | test/smpte_subtitle_test.cc | 104 | ||||
| -rw-r--r-- | test/wscript | 1 |
3 files changed, 103 insertions, 137 deletions
diff --git a/test/read_smpte_subtitle_test.cc b/test/read_smpte_subtitle_test.cc deleted file mode 100644 index 49fd1f62..00000000 --- a/test/read_smpte_subtitle_test.cc +++ /dev/null @@ -1,135 +0,0 @@ -/* - Copyright (C) 2015-2021 Carl Hetherington <cth@carlh.net> - - This file is part of libdcp. - - libdcp is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - libdcp is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with libdcp. If not, see <http://www.gnu.org/licenses/>. - - In addition, as a special exception, the copyright holders give - permission to link the code of portions of this program with the - OpenSSL library under certain conditions as described in each - individual source file, and distribute linked combinations - including the two. - - You must obey the GNU General Public License in all respects - for all of the code used other than OpenSSL. If you modify - file(s) with this exception, you may extend this exception to your - version of the file(s), but you are not obligated to do so. If you - do not wish to do so, delete this exception statement from your - version. If you delete this exception statement from all source - files in the program, then also delete it here. -*/ - -#include "smpte_subtitle_asset.h" -#include "test.h" -#include "local_time.h" -#include "smpte_load_font_node.h" -#include "subtitle_image.h" -#include "stream_operators.h" -#include <boost/test/unit_test.hpp> -#include <boost/optional.hpp> -#include <boost/optional/optional_io.hpp> - -using std::list; -using std::shared_ptr; -using std::dynamic_pointer_cast; - -/** Check reading of a SMPTE subtitle file */ -BOOST_AUTO_TEST_CASE (read_smpte_subtitle_test) -{ - dcp::SMPTESubtitleAsset sc ( - private_test / - "data" / - "JourneyToJah_TLR-1_F_EN-DE-FR_CH_51_2K_LOK_20140225_DGL_SMPTE_OV" / - "8b48f6ae-c74b-4b80-b994-a8236bbbad74_sub.mxf" - ); - - BOOST_CHECK_EQUAL (sc.id(), "8b48f6ae-c74b-4b80-b994-a8236bbbad74"); - BOOST_CHECK_EQUAL (sc.content_title_text(), "Journey to Jah"); - BOOST_REQUIRE (sc.annotation_text()); - BOOST_CHECK_EQUAL (sc.annotation_text().get(), "Journey to Jah"); - BOOST_CHECK_EQUAL (sc.issue_date(), dcp::LocalTime ("2014-02-25T11:22:48.000-00:00")); - BOOST_REQUIRE (sc.reel_number()); - BOOST_CHECK_EQUAL (sc.reel_number().get(), 1); - BOOST_REQUIRE (sc.language ()); - BOOST_CHECK_EQUAL (sc.language().get (), "de"); - BOOST_CHECK_EQUAL (sc.edit_rate(), dcp::Fraction (25, 1)); - BOOST_CHECK_EQUAL (sc.time_code_rate(), 25); - BOOST_CHECK_EQUAL (sc.start_time(), dcp::Time (0, 0, 0, 0, 25)); - auto lfn = sc.load_font_nodes (); - BOOST_REQUIRE_EQUAL (lfn.size(), 1); - shared_ptr<dcp::SMPTELoadFontNode> smpte_lfn = dynamic_pointer_cast<dcp::SMPTELoadFontNode> (lfn.front ()); - BOOST_REQUIRE (smpte_lfn); - BOOST_CHECK_EQUAL (smpte_lfn->id, "theFontId"); - BOOST_CHECK_EQUAL (smpte_lfn->urn, "9118bbce-4105-4a05-b37c-a5a6f75e1fea"); - BOOST_REQUIRE_EQUAL (sc.subtitles().size(), 63); - BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(sc.subtitles().front())); - BOOST_CHECK_EQUAL (dynamic_pointer_cast<const dcp::SubtitleString>(sc.subtitles().front())->text(), "Noch mal."); - BOOST_CHECK_EQUAL (sc.subtitles().front()->in(), dcp::Time (0, 0, 25, 12, 25)); - BOOST_CHECK_EQUAL (sc.subtitles().front()->out(), dcp::Time (0, 0, 26, 4, 25)); - BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(sc.subtitles().back())); - BOOST_CHECK_EQUAL (dynamic_pointer_cast<const dcp::SubtitleString>(sc.subtitles().back())->text(), "Prochainement"); - BOOST_CHECK_EQUAL (sc.subtitles().back()->in(), dcp::Time (0, 1, 57, 17, 25)); - BOOST_CHECK_EQUAL (sc.subtitles().back()->out(), dcp::Time (0, 1, 58, 12, 25)); -} - -/** And another one featuring <Font> within <Text> */ -BOOST_AUTO_TEST_CASE (read_smpte_subtitle_test2) -{ - dcp::SMPTESubtitleAsset sc (private_test / "olsson.xml"); - - auto subs = sc.subtitles(); - BOOST_REQUIRE_EQUAL (subs.size(), 6); - auto i = 0; - auto is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]); - BOOST_REQUIRE (is); - BOOST_CHECK_EQUAL (is->text(), "Testing is "); - BOOST_CHECK (!is->italic()); - ++i; - is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]); - BOOST_REQUIRE (is); - BOOST_CHECK_EQUAL (is->text(), "really"); - BOOST_CHECK (is->italic()); - ++i; - is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]); - BOOST_REQUIRE (is); - BOOST_CHECK_EQUAL (is->text(), " fun!"); - BOOST_CHECK (!is->italic()); - ++i; - is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]); - BOOST_REQUIRE (is); - BOOST_CHECK_EQUAL (is->text(), "This is the "); - BOOST_CHECK (!is->italic()); - ++i; - is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]); - BOOST_REQUIRE (is); - BOOST_CHECK_EQUAL (is->text(), "second"); - BOOST_CHECK (is->italic()); - ++i; - is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]); - BOOST_REQUIRE (is); - BOOST_CHECK_EQUAL (is->text(), " line!"); - BOOST_CHECK (!is->italic()); -} - -/** And another one featuring image subtitles */ -BOOST_AUTO_TEST_CASE (read_smpte_subtitle_test3) -{ - dcp::SMPTESubtitleAsset subs ("test/data/subs.mxf"); - - BOOST_REQUIRE_EQUAL (subs.subtitles().size(), 1); - auto si = dynamic_pointer_cast<const dcp::SubtitleImage>(subs.subtitles()[0]); - BOOST_REQUIRE (si); - BOOST_CHECK (si->png_image() == dcp::ArrayData("test/data/sub.png")); -} diff --git a/test/smpte_subtitle_test.cc b/test/smpte_subtitle_test.cc index 2af76696..2e35ba8d 100644 --- a/test/smpte_subtitle_test.cc +++ b/test/smpte_subtitle_test.cc @@ -31,14 +31,24 @@ files in the program, then also delete it here. */ -#include <boost/test/unit_test.hpp> + +#include "smpte_load_font_node.h" #include "smpte_subtitle_asset.h" +#include "stream_operators.h" +#include "subtitle_image.h" +#include "test.h" +#include "types.h" +#include <boost/optional/optional_io.hpp> +#include <boost/test/unit_test.hpp> + using std::make_shared; using std::string; using std::shared_ptr; +using std::dynamic_pointer_cast; using boost::optional; + BOOST_AUTO_TEST_CASE (smpte_subtitle_id_test) { dcp::SMPTESubtitleAsset subs; @@ -68,3 +78,95 @@ BOOST_AUTO_TEST_CASE (smpte_subtitle_id_test) dcp::SMPTESubtitleAsset check("build/test/smpte_subtitle_id_test.mxf"); BOOST_CHECK(check.id() != check.xml_id()); } + + +/** Check reading of a SMPTE subtitle file */ +BOOST_AUTO_TEST_CASE (read_smpte_subtitle_test) +{ + dcp::SMPTESubtitleAsset sc ( + private_test / + "data" / + "JourneyToJah_TLR-1_F_EN-DE-FR_CH_51_2K_LOK_20140225_DGL_SMPTE_OV" / + "8b48f6ae-c74b-4b80-b994-a8236bbbad74_sub.mxf" + ); + + BOOST_CHECK_EQUAL (sc.id(), "8b48f6ae-c74b-4b80-b994-a8236bbbad74"); + BOOST_CHECK_EQUAL (sc.content_title_text(), "Journey to Jah"); + BOOST_REQUIRE (sc.annotation_text()); + BOOST_CHECK_EQUAL (sc.annotation_text().get(), "Journey to Jah"); + BOOST_CHECK_EQUAL (sc.issue_date(), dcp::LocalTime ("2014-02-25T11:22:48.000-00:00")); + BOOST_REQUIRE (sc.reel_number()); + BOOST_CHECK_EQUAL (sc.reel_number().get(), 1); + BOOST_REQUIRE (sc.language ()); + BOOST_CHECK_EQUAL (sc.language().get (), "de"); + BOOST_CHECK_EQUAL (sc.edit_rate(), dcp::Fraction (25, 1)); + BOOST_CHECK_EQUAL (sc.time_code_rate(), 25); + BOOST_CHECK_EQUAL (sc.start_time(), dcp::Time (0, 0, 0, 0, 25)); + auto lfn = sc.load_font_nodes (); + BOOST_REQUIRE_EQUAL (lfn.size(), 1); + shared_ptr<dcp::SMPTELoadFontNode> smpte_lfn = dynamic_pointer_cast<dcp::SMPTELoadFontNode> (lfn.front ()); + BOOST_REQUIRE (smpte_lfn); + BOOST_CHECK_EQUAL (smpte_lfn->id, "theFontId"); + BOOST_CHECK_EQUAL (smpte_lfn->urn, "9118bbce-4105-4a05-b37c-a5a6f75e1fea"); + BOOST_REQUIRE_EQUAL (sc.subtitles().size(), 63); + BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(sc.subtitles().front())); + BOOST_CHECK_EQUAL (dynamic_pointer_cast<const dcp::SubtitleString>(sc.subtitles().front())->text(), "Noch mal."); + BOOST_CHECK_EQUAL (sc.subtitles().front()->in(), dcp::Time (0, 0, 25, 12, 25)); + BOOST_CHECK_EQUAL (sc.subtitles().front()->out(), dcp::Time (0, 0, 26, 4, 25)); + BOOST_REQUIRE (dynamic_pointer_cast<const dcp::SubtitleString>(sc.subtitles().back())); + BOOST_CHECK_EQUAL (dynamic_pointer_cast<const dcp::SubtitleString>(sc.subtitles().back())->text(), "Prochainement"); + BOOST_CHECK_EQUAL (sc.subtitles().back()->in(), dcp::Time (0, 1, 57, 17, 25)); + BOOST_CHECK_EQUAL (sc.subtitles().back()->out(), dcp::Time (0, 1, 58, 12, 25)); +} + + +/** And another one featuring <Font> within <Text> */ +BOOST_AUTO_TEST_CASE (read_smpte_subtitle_test2) +{ + dcp::SMPTESubtitleAsset sc (private_test / "olsson.xml"); + + auto subs = sc.subtitles(); + BOOST_REQUIRE_EQUAL (subs.size(), 6); + auto i = 0; + auto is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]); + BOOST_REQUIRE (is); + BOOST_CHECK_EQUAL (is->text(), "Testing is "); + BOOST_CHECK (!is->italic()); + ++i; + is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]); + BOOST_REQUIRE (is); + BOOST_CHECK_EQUAL (is->text(), "really"); + BOOST_CHECK (is->italic()); + ++i; + is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]); + BOOST_REQUIRE (is); + BOOST_CHECK_EQUAL (is->text(), " fun!"); + BOOST_CHECK (!is->italic()); + ++i; + is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]); + BOOST_REQUIRE (is); + BOOST_CHECK_EQUAL (is->text(), "This is the "); + BOOST_CHECK (!is->italic()); + ++i; + is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]); + BOOST_REQUIRE (is); + BOOST_CHECK_EQUAL (is->text(), "second"); + BOOST_CHECK (is->italic()); + ++i; + is = dynamic_pointer_cast<const dcp::SubtitleString>(subs[i]); + BOOST_REQUIRE (is); + BOOST_CHECK_EQUAL (is->text(), " line!"); + BOOST_CHECK (!is->italic()); +} + + +/** And another one featuring image subtitles */ +BOOST_AUTO_TEST_CASE (read_smpte_subtitle_test3) +{ + dcp::SMPTESubtitleAsset subs ("test/data/subs.mxf"); + + BOOST_REQUIRE_EQUAL (subs.subtitles().size(), 1); + auto si = dynamic_pointer_cast<const dcp::SubtitleImage>(subs.subtitles()[0]); + BOOST_REQUIRE (si); + BOOST_CHECK (si->png_image() == dcp::ArrayData("test/data/sub.png")); +} diff --git a/test/wscript b/test/wscript index f10bb824..e1078d25 100644 --- a/test/wscript +++ b/test/wscript @@ -91,7 +91,6 @@ def build(bld): raw_convert_test.cc read_dcp_test.cc read_interop_subtitle_test.cc - read_smpte_subtitle_test.cc reel_asset_test.cc recovery_test.cc rgb_xyz_test.cc |
