Make a test check more informative.
[dcpomatic.git] / test / test.cc
index 27393386bd1ebdcdb266cbf0bb2580b943bec14d..3cd5688e7fd2bd69f1b87b16376c58bd6790d497 100644 (file)
@@ -105,7 +105,6 @@ setup_test_config ()
        Config::instance()->set_master_encoding_threads (boost::thread::hardware_concurrency());
        Config::instance()->set_server_encoding_threads (1);
        Config::instance()->set_server_port_base (61921);
-       Config::instance()->set_default_isdcf_metadata (ISDCFMetadata ());
        Config::instance()->set_default_container (Ratio::from_id ("185"));
        Config::instance()->set_default_dcp_content_type (static_cast<DCPContentType*> (0));
        Config::instance()->set_default_audio_delay (0);
@@ -114,9 +113,7 @@ setup_test_config ()
        Config::instance()->set_default_still_length (10);
        Config::instance()->set_log_types (
                LogEntry::TYPE_GENERAL | LogEntry::TYPE_WARNING |
-               LogEntry::TYPE_ERROR | LogEntry::TYPE_DEBUG_THREE_D |
-               LogEntry::TYPE_DEBUG_ENCODE | LogEntry::TYPE_DEBUG_PLAYER |
-               LogEntry::TYPE_DISK
+               LogEntry::TYPE_ERROR | LogEntry::TYPE_DISK
                );
        Config::instance()->set_automatic_audio_analysis (false);
        auto signer = make_shared<dcp::CertificateChain>(dcp::file_to_string("test/data/signer_chain"));
@@ -445,13 +442,13 @@ check_image (boost::filesystem::path ref, boost::filesystem::path check, double
 
 
 void
-check_file (boost::filesystem::path ref, boost::filesystem::path check, bool binary_mode)
+check_file (boost::filesystem::path ref, boost::filesystem::path check)
 {
        auto N = boost::filesystem::file_size (ref);
        BOOST_CHECK_EQUAL (N, boost::filesystem::file_size (check));
-       auto ref_file = fopen_boost (ref, binary_mode ? "rb" : "r");
+       auto ref_file = fopen_boost (ref, "rb");
        BOOST_CHECK (ref_file);
-       auto check_file = fopen_boost (check, binary_mode ? "rb" : "r");
+       auto check_file = fopen_boost (check, "rb");
        BOOST_CHECK (check_file);
 
        int const buffer_size = 65536;
@@ -483,6 +480,38 @@ check_file (boost::filesystem::path ref, boost::filesystem::path check, bool bin
 }
 
 
+void
+check_text_file (boost::filesystem::path ref, boost::filesystem::path check)
+{
+       auto ref_file = fopen_boost (ref, "r");
+       BOOST_CHECK (ref_file);
+       auto check_file = fopen_boost (check, "r");
+       BOOST_CHECK (check_file);
+
+       int const buffer_size = std::max(
+               boost::filesystem::file_size(ref),
+               boost::filesystem::file_size(check)
+               );
+
+       DCPOMATIC_ASSERT (buffer_size < 1024 * 1024);
+
+       auto ref_buffer = new uint8_t[buffer_size];
+       auto ref_read = fread(ref_buffer, 1, buffer_size, ref_file);
+       auto check_buffer = new uint8_t[buffer_size];
+       auto check_read = fread(check_buffer, 1, buffer_size, check_file);
+       BOOST_CHECK_EQUAL (ref_read, check_read);
+
+       string const error = "File " + check.string() + " differs from reference " + ref.string();
+       BOOST_CHECK_MESSAGE(memcmp(ref_buffer, check_buffer, ref_read) == 0, error);
+
+       delete[] ref_buffer;
+       delete[] check_buffer;
+
+       fclose (ref_file);
+       fclose (check_file);
+}
+
+
 static void
 note (dcp::NoteType t, string n)
 {
@@ -877,3 +906,17 @@ make_and_verify_dcp (shared_ptr<Film> film, vector<dcp::VerificationNote::Code>
        BOOST_CHECK(ok);
 }
 
+
+void
+check_int_close (int a, int b, int d)
+{
+       BOOST_CHECK_MESSAGE (std::abs(a - b) < d, a << " differs from " << b << " by more than " << d);
+}
+
+
+void
+check_int_close (std::pair<int, int> a, std::pair<int, int> b, int d)
+{
+       check_int_close (a.first, b.first, d);
+       check_int_close (a.second, b.second, d);
+}