#include <fstream>
-using std::list;
-using std::ofstream;
using std::make_shared;
+using std::ofstream;
using std::string;
+using std::vector;
using boost::optional;
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 (...) {}
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");
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");
}