Pass MainSoundConfiguration object rather than a string.
[libdcp.git] / test / cpl_metadata_test.cc
index 82fc0c158a1b12089a5233c32934f405f4202e0b..0ebf9078af6fb00b3be1656c2a1cc622691f646b 100644 (file)
 
 
 #include "certificate_chain.h"
+#include "compose.hpp"
 #include "cpl.h"
 #include "exceptions.h"
 #include "language_tag.h"
 #include "reel.h"
+#include "reel_mono_picture_asset.h"
 #include "reel_smpte_subtitle_asset.h"
+#include "reel_sound_asset.h"
 #include "stream_operators.h"
 #include "test.h"
 #include <memory>
@@ -151,6 +154,26 @@ BOOST_AUTO_TEST_CASE (main_sound_configuration_test5)
 }
 
 
+/* 482-12 says that implementations may use case-insensitive comparisons for the channel identifiers,
+ * and there is one DCP in the private test suite (made by Disney) that uses LS for left surround.
+ */
+BOOST_AUTO_TEST_CASE(main_sound_configuration_test_case_insensitive)
+{
+       dcp::MainSoundConfiguration msc("51/L,-,C,LFE,LS,RS,HI,VIN");
+       BOOST_CHECK_EQUAL(msc.to_string(), "51/L,-,C,LFE,Ls,Rs,HI,VIN");
+       BOOST_CHECK_EQUAL(msc.channels(), 8);
+       BOOST_CHECK_EQUAL(msc.field(), dcp::MCASoundField::FIVE_POINT_ONE);
+       BOOST_CHECK_EQUAL(msc.mapping(0).get(), dcp::Channel::LEFT);
+       BOOST_CHECK(!msc.mapping(1));
+       BOOST_CHECK_EQUAL(msc.mapping(2).get(), dcp::Channel::CENTRE);
+       BOOST_CHECK_EQUAL(msc.mapping(3).get(), dcp::Channel::LFE);
+       BOOST_CHECK_EQUAL(msc.mapping(4).get(), dcp::Channel::LS);
+       BOOST_CHECK_EQUAL(msc.mapping(5).get(), dcp::Channel::RS);
+       BOOST_CHECK_EQUAL(msc.mapping(6).get(), dcp::Channel::HI);
+       BOOST_CHECK_EQUAL(msc.mapping(7).get(), dcp::Channel::VI);
+}
+
+
 BOOST_AUTO_TEST_CASE (luminance_test1)
 {
        BOOST_CHECK_NO_THROW (dcp::Luminance(4, dcp::Luminance::Unit::CANDELA_PER_SQUARE_METRE));
@@ -235,12 +258,12 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_read_test1)
        BOOST_CHECK (cpl.main_picture_active_area().get() == dcp::Size(1440, 1080));
 
        auto reels = cpl.reels ();
-       BOOST_REQUIRE_EQUAL (reels.size(), 1);
+       BOOST_REQUIRE_EQUAL (reels.size(), 1U);
        BOOST_REQUIRE (reels.front()->main_subtitle()->language());
        BOOST_CHECK_EQUAL (reels.front()->main_subtitle()->language().get(), "de-DE");
 
        auto asl = cpl.additional_subtitle_languages();
-       BOOST_REQUIRE_EQUAL (asl.size(), 2);
+       BOOST_REQUIRE_EQUAL (asl.size(), 2U);
        BOOST_CHECK_EQUAL (asl[0], "en-US");
        BOOST_CHECK_EQUAL (asl[1], "fr-ZA");
 
@@ -280,7 +303,7 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_write_test1)
        msc.set_mapping (2, dcp::Channel::CENTRE);
        msc.set_mapping (3, dcp::Channel::LFE);
        msc.set_mapping (13, dcp::Channel::SYNC_SIGNAL);
-       cpl.set_main_sound_configuration (msc.to_string());
+       cpl.set_main_sound_configuration(msc);
 
        cpl.set_main_sound_sample_rate (48000);
        cpl.set_main_picture_stored_area (dcp::Size(1998, 1080));
@@ -307,16 +330,16 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_write_test1)
        reel->add (make_shared<dcp::ReelSMPTESubtitleAsset>(doc));
        cpl.add (reel);
 
-       vector<dcp::LanguageTag> lt;
-       lt.push_back(dcp::LanguageTag("en-US"));
-       lt.push_back(dcp::LanguageTag("fr-ZA"));
+       auto lt = { dcp::LanguageTag("en-US"), dcp::LanguageTag("fr-ZA") };
        cpl.set_additional_subtitle_languages (lt);
 
-       cpl.write_xml ("build/test/cpl_metadata_write_test1.xml", shared_ptr<dcp::CertificateChain>());
+       cpl.set_sign_language_video_language (dcp::LanguageTag("bzs"));
+
+       cpl.write_xml ("build/test/cpl_metadata_write_test1.xml", {});
        check_xml (
                dcp::file_to_string("test/ref/cpl_metadata_test1.xml"),
                dcp::file_to_string("build/test/cpl_metadata_write_test1.xml"),
-               vector<string>()
+               {"Id", "Hash"}
                );
 }
 
@@ -326,12 +349,10 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_roundtrip_test_1)
 {
        dcp::CPL cpl ("test/ref/cpl_metadata_test1.xml");
        cpl.write_xml ("build/test/cpl_metadata_roundtrip_test1.xml", shared_ptr<dcp::CertificateChain>());
-       vector<string> ignore;
-       ignore.push_back ("Id");
        check_xml (
                dcp::file_to_string("test/ref/cpl_metadata_test1.xml"),
                dcp::file_to_string("build/test/cpl_metadata_roundtrip_test1.xml"),
-               ignore
+               {"Id"}
                );
 }
 
@@ -353,21 +374,21 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_write_test2)
        msc.set_mapping (2, dcp::Channel::CENTRE);
        msc.set_mapping (3, dcp::Channel::LFE);
        msc.set_mapping (13, dcp::Channel::SYNC_SIGNAL);
-       cpl.set_main_sound_configuration (msc.to_string());
+       cpl.set_main_sound_configuration(msc);
 
        cpl.set_main_sound_sample_rate (48000);
        cpl.set_main_picture_stored_area (dcp::Size(1998, 1080));
        cpl.set_main_picture_active_area (dcp::Size(1440, 1080));
 
-       shared_ptr<dcp::Reel> reel(new dcp::Reel());
+       auto reel = make_shared<dcp::Reel>();
        reel->add (black_picture_asset("build/test/cpl_metadata_write_test1"));
        cpl.add (reel);
 
-       cpl.write_xml ("build/test/cpl_metadata_write_test2.xml", shared_ptr<dcp::CertificateChain>());
+       cpl.write_xml ("build/test/cpl_metadata_write_test2.xml", {});
        check_xml (
                dcp::file_to_string("test/ref/cpl_metadata_test2.xml"),
                dcp::file_to_string("build/test/cpl_metadata_write_test2.xml"),
-               vector<string>()
+               {"Id", "Hash"}
                );
 }
 
@@ -408,7 +429,7 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_read_test2)
        BOOST_CHECK (cpl.main_picture_active_area().get() == dcp::Size(1440, 1080));
 
        auto reels = cpl.reels ();
-       BOOST_REQUIRE_EQUAL (reels.size(), 1);
+       BOOST_REQUIRE_EQUAL (reels.size(), 1U);
 }
 
 
@@ -424,3 +445,8 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_roundtrip_test_2)
                );
 }
 
+
+BOOST_AUTO_TEST_CASE(check_that_missing_full_content_title_text_is_tolerated)
+{
+       dcp::CPL cpl("test/ref/cpl_metadata_test3.xml");
+}