Add test to create new Sessions with localized names and reopen them
authorTim Mayberry <mojofunk@gmail.com>
Mon, 19 Sep 2016 00:10:23 +0000 (10:10 +1000)
committerTim Mayberry <mojofunk@gmail.com>
Mon, 19 Sep 2016 04:47:52 +0000 (14:47 +1000)
This test is successful on Linux but fails on Windows currently because of the
incorrect realpath implementation for windows in pbd/path_expand.cc

libs/ardour/test/session_test.cc
libs/ardour/test/session_test.h

index b9372aa5a5d99032ef27cf11fbf581690d6d1ee3..d64fe77f7fc84a0508456624eddc058de352b2ba 100644 (file)
@@ -85,3 +85,74 @@ SessionTest::new_session_from_template ()
        delete template_session;
        stop_and_destroy_backend ();
 }
+
+void
+SessionTest::open_session_utf8_path ()
+{
+       std::vector<std::string> utf8_strings;
+
+       get_utf8_test_strings (utf8_strings);
+
+       CPPUNIT_ASSERT (!utf8_strings.empty());
+
+       const string test_dir = new_test_output_dir ("open_session_utf8_path");
+
+       for (std::vector<std::string>::const_iterator i = utf8_strings.begin (); i != utf8_strings.end ();
+            ++i) {
+
+               const string session_name (*i);
+               std::string new_session_dir = Glib::build_filename (test_dir, session_name);
+               bool new_session_failed = false;
+
+               CPPUNIT_ASSERT (!Glib::file_test (new_session_dir, Glib::FILE_TEST_EXISTS));
+
+               create_and_start_dummy_backend ();
+
+               ARDOUR::Session* session = 0;
+
+               try {
+                       session = new Session (*AudioEngine::instance(), new_session_dir, session_name);
+
+                       CPPUNIT_ASSERT (session);
+
+                       session->save_state ("");
+
+               } catch(...) {
+                       new_session_failed = true;
+
+                       std::cerr << "Failed to create new session using name : " << *i << std::endl;
+               }
+
+               delete session;
+               session = 0;
+               stop_and_destroy_backend ();
+
+               CPPUNIT_ASSERT (!new_session_failed);
+
+               if (new_session_failed) break;
+
+               create_and_start_dummy_backend ();
+
+               bool open_session_failed = false;
+
+               try {
+                       // reopen same session to check that it opens without error
+                       session = new Session (*AudioEngine::instance (), new_session_dir, session_name);
+
+                       CPPUNIT_ASSERT (session);
+               } catch (...) {
+                       open_session_failed = true;
+
+                       std::cerr << "Failed to open session using name : " << *i << std::endl;
+               }
+
+               delete session;
+               session = 0;
+               stop_and_destroy_backend ();
+
+               CPPUNIT_ASSERT (!open_session_failed);
+
+               if (open_session_failed) break;
+       }
+
+}
index 9aba3d9847bbed6c7af2687bafd8e52d67c1aa95..37228bac15bc7da8b7945791bec58ae7a0241bd2 100644 (file)
@@ -7,10 +7,12 @@ class SessionTest : public CppUnit::TestFixture
        CPPUNIT_TEST_SUITE (SessionTest);
        CPPUNIT_TEST (new_session);
        CPPUNIT_TEST (new_session_from_template);
+       CPPUNIT_TEST (open_session_utf8_path);
        CPPUNIT_TEST_SUITE_END ();
 
 public:
 
        void new_session ();
        void new_session_from_template ();
+       void open_session_utf8_path ();
 };