Cleanup: replace some list with vector.
[dcpomatic.git] / test / config_test.cc
index 6b35c595d0b60792b849056f7b66597ae1592c51..103a6a58555ac0f181353afac8f6f257c14f495d 100644 (file)
 #include <fstream>
 
 
-using std::list;
-using std::ofstream;
 using std::make_shared;
+using std::ofstream;
 using std::string;
+using std::vector;
 using boost::optional;
 
 
@@ -177,7 +177,7 @@ BOOST_AUTO_TEST_CASE (config_upgrade_test)
        boost::filesystem::copy_file ("test/data/2.14.cinemas.xml", dir / "cinemas.xml");
        Config::instance();
        try {
-               /* This will fail to write cinemas.xml since the link is to a non-existant directory */
+               /* This will fail to write cinemas.xml since the link is to a non-existent directory */
                Config::instance()->write();
        } catch (...) {}
 
@@ -206,7 +206,7 @@ BOOST_AUTO_TEST_CASE (config_keep_cinemas_if_making_new_config)
 
        Config::instance()->write();
 
-       Config::instance()->add_cinema(make_shared<Cinema>("My Great Cinema", list<string>(), "", 0, 0));
+       Config::instance()->add_cinema(make_shared<Cinema>("My Great Cinema", vector<string>(), "", 0, 0));
        Config::instance()->write();
 
        boost::filesystem::copy_file (dir / "cinemas.xml", dir / "backup_for_test.xml");
@@ -215,6 +215,37 @@ BOOST_AUTO_TEST_CASE (config_keep_cinemas_if_making_new_config)
        boost::filesystem::remove (dir / "2.16" / "config.xml");
        Config::instance();
 
-       check_text_file (dir / "backup_for_test.xml", dir / "cinemas.xml.1");
+       check_text_file(dir / "backup_for_test.xml", dir / "cinemas.xml");
+}
+
+
+BOOST_AUTO_TEST_CASE(keep_config_if_cinemas_fail_to_load)
+{
+       ConfigRestorer cr;
+
+       /* Make a new config */
+       boost::filesystem::path dir = "build/test/keep_config_if_cinemas_fail_to_load";
+       Config::override_path = dir;
+       Config::drop();
+       boost::filesystem::remove_all(dir);
+       boost::filesystem::create_directories(dir);
+       Config::instance()->write();
+
+       auto const cinemas = dir / "cinemas.xml";
+
+       /* Back things up */
+       boost::filesystem::copy_file(dir / "2.16" / "config.xml", dir / "config_backup_for_test.xml");
+       boost::filesystem::copy_file(cinemas, dir / "cinemas_backup_for_test.xml");
+
+       /* Corrupt the cinemas */
+       Config::drop();
+       std::ofstream corrupt(cinemas.string().c_str());
+       corrupt << "foo\n";
+       corrupt.close();
+       Config::instance();
+
+       /* We should have a new cinemas.xml and the old config.xml */
+       check_text_file(dir / "2.16" / "config.xml", dir / "config_backup_for_test.xml");
+       check_text_file(cinemas, dir / "cinemas_backup_for_test.xml");
 }