summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-03-01 09:34:06 +0000
committerCarl Hetherington <cth@carlh.net>2017-04-19 23:04:32 +0100
commit6bc1976ac8780a4f7aa32d8c13d8bafe7eb537a8 (patch)
tree41bc921adda38e2f131101e96ad1bfdff650ac33
parent7a7c1673c1aa6f687d542536017769dd487a138f (diff)
Restore dcp_subtitle_test.
-rw-r--r--test/dcp_subtitle_test.cc89
-rw-r--r--test/wscript2
2 files changed, 41 insertions, 50 deletions
diff --git a/test/dcp_subtitle_test.cc b/test/dcp_subtitle_test.cc
index 7b7308a00..66fe855cd 100644
--- a/test/dcp_subtitle_test.cc
+++ b/test/dcp_subtitle_test.cc
@@ -39,6 +39,15 @@
using std::cout;
using std::list;
using boost::shared_ptr;
+using boost::optional;
+
+optional<ContentTextSubtitle> stored;
+
+static void
+store (ContentTextSubtitle sub)
+{
+ stored = sub;
+}
/** Test pass-through of a very simple DCP subtitle file */
BOOST_AUTO_TEST_CASE (dcp_subtitle_test)
@@ -73,34 +82,15 @@ BOOST_AUTO_TEST_CASE (dcp_subtitle_within_dcp_test)
wait_for_jobs ();
shared_ptr<DCPDecoder> decoder (new DCPDecoder (content, film->log()));
+ decoder->subtitle->TextData.connect (bind (store, _1));
+
+ while (!decoder->pass() || !stored) {}
- list<ContentTimePeriod> ctp = decoder->text_subtitles_during (
- ContentTimePeriod (
- ContentTime::from_seconds (25),
- ContentTime::from_seconds (26)
- ),
- true
- );
-
- BOOST_REQUIRE_EQUAL (ctp.size(), 2);
- BOOST_CHECK_EQUAL (ctp.front().from.get(), ContentTime::from_seconds(25 + 12 * 0.04).get());
- BOOST_CHECK_EQUAL (ctp.front().to.get(), ContentTime::from_seconds(26 + 4 * 0.04).get());
- BOOST_CHECK_EQUAL (ctp.back().from.get(), ContentTime::from_seconds(25 + 12 * 0.04).get());
- BOOST_CHECK_EQUAL (ctp.back().to.get(), ContentTime::from_seconds(26 + 4 * 0.04).get());
-
- list<ContentTextSubtitle> subs = decoder->subtitle->get_text (
- ContentTimePeriod (
- ContentTime::from_seconds (25),
- ContentTime::from_seconds (26)
- ),
- true,
- true
- );
-
- BOOST_REQUIRE_EQUAL (subs.size(), 1);
- BOOST_REQUIRE_EQUAL (subs.front().subs.size(), 2);
- BOOST_CHECK_EQUAL (subs.front().subs.front().text(), "Noch mal.");
- BOOST_CHECK_EQUAL (subs.front().subs.back().text(), "Encore une fois.");
+ BOOST_REQUIRE (stored);
+ BOOST_REQUIRE_EQUAL (stored->subs.size(), 1);
+ BOOST_REQUIRE_EQUAL (stored->subs.size(), 2);
+ BOOST_CHECK_EQUAL (stored->subs.front().text(), "Noch mal.");
+ BOOST_CHECK_EQUAL (stored->subs.back().text(), "Encore une fois.");
}
/** Test subtitles whose text includes things like &lt;b&gt; */
@@ -115,12 +105,13 @@ BOOST_AUTO_TEST_CASE (dcp_subtitle_test2)
wait_for_jobs ();
shared_ptr<DCPSubtitleDecoder> decoder (new DCPSubtitleDecoder (content, film->log()));
- list<ContentTextSubtitle> sub = decoder->subtitle->get_text (
- ContentTimePeriod (ContentTime::from_seconds(0), ContentTime::from_seconds(2)), true, true
- );
- BOOST_REQUIRE_EQUAL (sub.size(), 1);
- BOOST_REQUIRE_EQUAL (sub.front().subs.size(), 1);
- BOOST_CHECK_EQUAL (sub.front().subs.front().text(), "&lt;b&gt;Hello world!&lt;/b&gt;");
+ decoder->subtitle->TextData.connect (bind (store, _1));
+
+ while (!decoder->pass ()) {
+ if (stored && stored->period().from == ContentTime(0)) {
+ BOOST_CHECK_EQUAL (stored->subs.front().text(), "&lt;b&gt;Hello world!&lt;/b&gt;");
+ }
+ }
}
/** Test a failure case */
@@ -139,20 +130,20 @@ BOOST_AUTO_TEST_CASE (dcp_subtitle_test3)
wait_for_jobs ();
shared_ptr<DCPSubtitleDecoder> decoder (new DCPSubtitleDecoder (content, film->log()));
- list<ContentTextSubtitle> sub = decoder->subtitle->get_text (
- ContentTimePeriod (ContentTime::from_seconds(0), ContentTime::from_seconds(2)), true, true
- );
- BOOST_REQUIRE_EQUAL (sub.size(), 1);
- BOOST_REQUIRE_EQUAL (sub.front().subs.size(), 3);
- list<dcp::SubtitleString> s = sub.front().subs;
- list<dcp::SubtitleString>::const_iterator i = s.begin ();
- BOOST_CHECK_EQUAL (i->text(), "This");
- ++i;
- BOOST_REQUIRE (i != s.end ());
- BOOST_CHECK_EQUAL (i->text(), " is ");
- ++i;
- BOOST_REQUIRE (i != s.end ());
- BOOST_CHECK_EQUAL (i->text(), "wrong.");
- ++i;
- BOOST_REQUIRE (i == s.end ());
+ while (!decoder->pass ()) {
+ decoder->subtitle->TextData.connect (bind (store, _1));
+ if (stored && stored->period().from == ContentTime::from_seconds(0.08)) {
+ list<dcp::SubtitleString> s = stored->subs;
+ list<dcp::SubtitleString>::const_iterator i = s.begin ();
+ BOOST_CHECK_EQUAL (i->text(), "This");
+ ++i;
+ BOOST_REQUIRE (i != s.end ());
+ BOOST_CHECK_EQUAL (i->text(), " is ");
+ ++i;
+ BOOST_REQUIRE (i != s.end ());
+ BOOST_CHECK_EQUAL (i->text(), "wrong.");
+ ++i;
+ BOOST_REQUIRE (i == s.end ());
+ }
+ }
}
diff --git a/test/wscript b/test/wscript
index 0fb32670c..df0a05c35 100644
--- a/test/wscript
+++ b/test/wscript
@@ -51,6 +51,7 @@ def build(bld):
client_server_test.cc
colour_conversion_test.cc
dcpomatic_time_test.cc
+ dcp_subtitle_test.cc
digest_test.cc
ffmpeg_audio_only_test.cc
ffmpeg_audio_test.cc
@@ -102,7 +103,6 @@ def build(bld):
# resampler_test.cc
# XXX
- # dcp_subtitle_test.cc
# ffmpeg_decoder_seek_test.cc
# ffmpeg_decoder_sequential_test.cc
# upmixer_a_test.cc