From 75ade6b2df3926b965f5af6ec6d7ed8659167b73 Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Mon, 19 Sep 2016 10:10:23 +1000 Subject: Add test to create new Sessions with localized names and reopen them 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 | 71 ++++++++++++++++++++++++++++++++++++++++ libs/ardour/test/session_test.h | 2 ++ 2 files changed, 73 insertions(+) diff --git a/libs/ardour/test/session_test.cc b/libs/ardour/test/session_test.cc index b9372aa5a5..d64fe77f7f 100644 --- a/libs/ardour/test/session_test.cc +++ b/libs/ardour/test/session_test.cc @@ -85,3 +85,74 @@ SessionTest::new_session_from_template () delete template_session; stop_and_destroy_backend (); } + +void +SessionTest::open_session_utf8_path () +{ + std::vector 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::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; + } + +} diff --git a/libs/ardour/test/session_test.h b/libs/ardour/test/session_test.h index 9aba3d9847..37228bac15 100644 --- a/libs/ardour/test/session_test.h +++ b/libs/ardour/test/session_test.h @@ -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 (); }; -- cgit v1.2.3