Be a bit more defensive in a test that is failing on Windows.
[dcpomatic.git] / test / subtitle_font_id_change_test.cc
index 32cf57400c0a33475418ab8e521379b05979840e..57add5c63e6d825fb8cfaa045f4cc01b1ded5aea 100644 (file)
 using std::string;
 
 
-class Editor
-{
-public:
-       Editor (boost::filesystem::path path)
-               : _path(path)
-               , _content(dcp::file_to_string(path))
-       {
-
-       }
-
-       ~Editor ()
-       {
-               auto f = fopen(_path.string().c_str(), "w");
-               BOOST_REQUIRE(f);
-               fwrite(_content.c_str(), _content.length(), 1, f);
-               fclose(f);
-       }
-
-       void replace (string a, string b)
-       {
-               auto old_content = _content;
-               boost::algorithm::replace_all (_content, a, b);
-               BOOST_REQUIRE (_content != old_content);
-       }
-
-private:
-       boost::filesystem::path _path;
-       std::string _content;
-};
-
-
 BOOST_AUTO_TEST_CASE(subtitle_font_id_change_test1)
 {
        auto film = new_test_film2("subtitle_font_id_change_test1");
@@ -84,6 +53,7 @@ BOOST_AUTO_TEST_CASE(subtitle_font_id_change_test1)
 
        CheckContentJob check(film);
        check.run();
+       BOOST_REQUIRE (!wait_for_jobs());
 
        make_and_verify_dcp(film, { dcp::VerificationNote::Code::INVALID_STANDARD });
 }
@@ -105,9 +75,14 @@ BOOST_AUTO_TEST_CASE(subtitle_font_id_change_test2)
        BOOST_REQUIRE_EQUAL(content[0]->text.size(), 1U);
 
        content[0]->set_paths({"test/data/short.srt"});
+       /* Make sure the content doesn't look like it's changed, otherwise it will be re-examined
+        * which obscures the point of this test.
+        */
+       content[0]->_last_write_times[0] = boost::filesystem::last_write_time("test/data/short.srt");
 
        CheckContentJob check(film);
        check.run();
+       BOOST_REQUIRE (!wait_for_jobs());
 
        auto font = content[0]->text.front()->get_font("");
        BOOST_REQUIRE(font->file());
@@ -136,14 +111,43 @@ BOOST_AUTO_TEST_CASE(subtitle_font_id_change_test3)
 
        CheckContentJob check(film);
        check.run();
+       BOOST_REQUIRE (!wait_for_jobs());
 
        auto font = content[0]->text.front()->get_font("Arial Black");
+       BOOST_REQUIRE(font);
        BOOST_REQUIRE(font->file());
        BOOST_CHECK_EQUAL(*font->file(), "test/data/Inconsolata-VF.ttf");
 
        font = content[0]->text.front()->get_font("Helvetica Neue");
+       BOOST_REQUIRE(font);
        BOOST_REQUIRE(font->file());
        BOOST_CHECK_EQUAL(*font->file(), "test/data/Inconsolata-VF.ttf");
 
        make_and_verify_dcp(film, { dcp::VerificationNote::Code::INVALID_STANDARD });
 }
+
+
+BOOST_AUTO_TEST_CASE(subtitle_font_id_change_test4)
+{
+       auto film = new_test_film2("subtitle_font_id_change_test4");
+       boost::filesystem::remove(film->file("metadata.xml"));
+       boost::filesystem::copy_file("test/data/subtitle_font_id_change_test4.xml", film->file("metadata.xml"));
+
+       {
+               Editor editor(film->file("metadata.xml"));
+               editor.replace("dcpomatic-test-private", TestPaths::private_data().string());
+       }
+
+       film->read_metadata();
+
+       auto content = film->content();
+       BOOST_REQUIRE_EQUAL(content.size(), 1U);
+       BOOST_REQUIRE_EQUAL(content[0]->text.size(), 1U);
+
+       CheckContentJob check(film);
+       check.run();
+       BOOST_REQUIRE(!wait_for_jobs());
+
+       make_and_verify_dcp(film, { dcp::VerificationNote::Code::INVALID_STANDARD });
+}
+