+
+BOOST_AUTO_TEST_CASE (verify_unexpected_things_in_main_markers)
+{
+ path dir = "build/test/verify_unexpected_things_in_main_markers";
+ prepare_directory (dir);
+ auto dcp = make_simple (dir, 1, 24);
+ dcp->set_annotation_text("A Test DCP");
+ dcp->write_xml();
+
+ {
+ Editor e (find_cpl(dir));
+ e.insert(
+ " <IntrinsicDuration>24</IntrinsicDuration>",
+ "<EntryPoint>0</EntryPoint><Duration>24</Duration>"
+ );
+ }
+
+ dcp::CPL cpl (find_cpl(dir));
+
+ check_verify_result (
+ { dir },
+ {
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::MISMATCHED_CPL_HASHES, cpl.id(), canonical(find_cpl(dir)) },
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::UNEXPECTED_ENTRY_POINT },
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::UNEXPECTED_DURATION },
+ });
+}
+
+
+BOOST_AUTO_TEST_CASE(verify_invalid_content_kind)
+{
+ path dir = "build/test/verify_invalid_content_kind";
+ prepare_directory (dir);
+ auto dcp = make_simple (dir, 1, 24);
+ dcp->set_annotation_text("A Test DCP");
+ dcp->write_xml();
+
+ {
+ Editor e(find_cpl(dir));
+ e.replace("trailer", "trip");
+ }
+
+ dcp::CPL cpl (find_cpl(dir));
+
+ check_verify_result (
+ { dir },
+ {
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::MISMATCHED_CPL_HASHES, cpl.id(), canonical(find_cpl(dir)) },
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::INVALID_CONTENT_KIND, string("trip") }
+ });
+
+}
+
+
+BOOST_AUTO_TEST_CASE(verify_valid_content_kind)
+{
+ path dir = "build/test/verify_valid_content_kind";
+ prepare_directory (dir);
+ auto dcp = make_simple (dir, 1, 24);
+ dcp->set_annotation_text("A Test DCP");
+ dcp->write_xml();
+
+ {
+ Editor e(find_cpl(dir));
+ e.replace("<ContentKind>trailer</ContentKind>", "<ContentKind scope=\"http://bobs.contents/\">trip</ContentKind>");
+ }
+
+ dcp::CPL cpl (find_cpl(dir));
+
+ check_verify_result (
+ { dir },
+ {
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::MISMATCHED_CPL_HASHES, cpl.id(), canonical(find_cpl(dir)) },
+ });
+
+}
+
+
+BOOST_AUTO_TEST_CASE(verify_invalid_main_picture_active_area_1)
+{
+ path dir = "build/test/verify_invalid_main_picture_active_area_1";
+ prepare_directory(dir);
+ auto dcp = make_simple(dir, 1, 24);
+ dcp->write_xml();
+
+ auto constexpr area = "<meta:MainPictureActiveArea>";
+
+ {
+ Editor e(find_cpl(dir));
+ e.delete_lines_after(area, 2);
+ e.insert(area, "<meta:Height>4080</meta:Height>");
+ e.insert(area, "<meta:Width>1997</meta:Width>");
+ }
+
+ dcp::PKL pkl(find_pkl(dir));
+ dcp::CPL cpl(find_cpl(dir));
+
+ check_verify_result(
+ { dir },
+ {
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::MISMATCHED_CPL_HASHES, cpl.id(), canonical(find_cpl(dir)) },
+ { dcp::VerificationNote::Type::BV21_ERROR, dcp::VerificationNote::Code::MISMATCHED_PKL_ANNOTATION_TEXT_WITH_CPL, pkl.id(), canonical(find_pkl(dir)), },
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::INVALID_MAIN_PICTURE_ACTIVE_AREA, "width 1997 is not a multiple of 2", canonical(find_cpl(dir)) },
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::INVALID_MAIN_PICTURE_ACTIVE_AREA, "height 4080 is bigger than the asset height 1080", canonical(find_cpl(dir)) },
+ });
+}
+
+
+BOOST_AUTO_TEST_CASE(verify_invalid_main_picture_active_area_2)
+{
+ path dir = "build/test/verify_invalid_main_picture_active_area_2";
+ prepare_directory(dir);
+ auto dcp = make_simple(dir, 1, 24);
+ dcp->write_xml();
+
+ auto constexpr area = "<meta:MainPictureActiveArea>";
+
+ {
+ Editor e(find_cpl(dir));
+ e.delete_lines_after(area, 2);
+ e.insert(area, "<meta:Height>5125</meta:Height>");
+ e.insert(area, "<meta:Width>9900</meta:Width>");
+ }
+
+ dcp::PKL pkl(find_pkl(dir));
+ dcp::CPL cpl(find_cpl(dir));
+
+ check_verify_result(
+ { dir },
+ {
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::MISMATCHED_CPL_HASHES, cpl.id(), canonical(find_cpl(dir)) },
+ { dcp::VerificationNote::Type::BV21_ERROR, dcp::VerificationNote::Code::MISMATCHED_PKL_ANNOTATION_TEXT_WITH_CPL, pkl.id(), canonical(find_pkl(dir)), },
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::INVALID_MAIN_PICTURE_ACTIVE_AREA, "height 5125 is not a multiple of 2", canonical(find_cpl(dir)) },
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::INVALID_MAIN_PICTURE_ACTIVE_AREA, "width 9900 is bigger than the asset width 1998", canonical(find_cpl(dir)) },
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::INVALID_MAIN_PICTURE_ACTIVE_AREA, "height 5125 is bigger than the asset height 1080", canonical(find_cpl(dir)) },
+ });
+}
+
+
+BOOST_AUTO_TEST_CASE(verify_duplicate_pkl_asset_ids)
+{
+ RNGFixer rg;
+
+ path dir = "build/test/verify_duplicate_pkl_asset_ids";
+ prepare_directory(dir);
+ auto dcp = make_simple(dir, 1, 24);
+ dcp->write_xml();
+
+ {
+ Editor e(find_pkl(dir));
+ e.replace("urn:uuid:5407b210-4441-4e97-8b16-8bdc7c12da54", "urn:uuid:6affb8ee-0020-4dff-a53c-17652f6358ab");
+ }
+
+ dcp::PKL pkl(find_pkl(dir));
+
+ check_verify_result(
+ { dir },
+ {
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::DUPLICATE_ASSET_ID_IN_PKL, pkl.id(), canonical(find_pkl(dir)) },
+ });
+}
+
+
+BOOST_AUTO_TEST_CASE(verify_duplicate_assetmap_asset_ids)
+{
+ RNGFixer rg;
+
+ path dir = "build/test/verify_duplicate_assetmap_asset_ids";
+ prepare_directory(dir);
+ auto dcp = make_simple(dir, 1, 24);
+ dcp->write_xml();
+
+ {
+ Editor e(find_asset_map(dir));
+ e.replace("urn:uuid:5407b210-4441-4e97-8b16-8bdc7c12da54", "urn:uuid:97f0f352-5b77-48ee-a558-9df37717f4fa");
+ }
+
+ dcp::PKL pkl(find_pkl(dir));
+ dcp::AssetMap asset_map(find_asset_map(dir));
+
+ check_verify_result(
+ { dir },
+ {
+ { dcp::VerificationNote::Type::BV21_ERROR, dcp::VerificationNote::Code::MISMATCHED_PKL_ANNOTATION_TEXT_WITH_CPL, pkl.id(), canonical(find_pkl(dir)), },
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::DUPLICATE_ASSET_ID_IN_ASSETMAP, asset_map.id(), canonical(find_asset_map(dir)) },
+ { dcp::VerificationNote::Type::WARNING, dcp::VerificationNote::Code::EXTERNAL_ASSET, string("5407b210-4441-4e97-8b16-8bdc7c12da54") },
+ });
+}
+