Fix wxFileName::MakeRelativeTo() for directory relatively to itself.

The expected result in this case is ".", but the filename became empty instead
when wxPATH_NATIVE was used.

Fix this by examining GetFormat(format), which takes care of mapping
wxPATH_NATIVE to its real value, instead of wxPATH_NATIVE itself.

Also add a unit test verifying that this works as expected.

Closes #17010.
This commit is contained in:
Vadim Zeitlin
2015-05-29 16:23:17 +02:00
parent a029ac7690
commit de891ddb03
3 changed files with 41 additions and 8 deletions

View File

@@ -133,6 +133,7 @@ private:
CPPUNIT_TEST( TestSetPath );
CPPUNIT_TEST( TestStrip );
CPPUNIT_TEST( TestNormalize );
CPPUNIT_TEST( TestRelative );
CPPUNIT_TEST( TestReplace );
CPPUNIT_TEST( TestGetHumanReadable );
#ifdef __WINDOWS__
@@ -158,6 +159,7 @@ private:
void TestSplit();
void TestSetPath();
void TestStrip();
void TestRelative();
void TestNormalize();
void TestReplace();
void TestGetHumanReadable();
@@ -441,6 +443,21 @@ void FileNameTestCase::TestNormalize()
#endif // __WINDOWS__
}
void FileNameTestCase::TestRelative()
{
wxFileName fn("a/b.cpp");
fn.MakeRelativeTo("a");
CPPUNIT_ASSERT_EQUAL( "b.cpp", fn.GetFullPath() );
fn.AssignDir("a/b");
fn.MakeRelativeTo("a");
CPPUNIT_ASSERT_EQUAL( "b/", fn.GetFullPath() );
fn.AssignDir("a");
fn.MakeRelativeTo("a");
CPPUNIT_ASSERT_EQUAL( "./", fn.GetFullPath() );
}
void FileNameTestCase::TestReplace()
{
static const struct FileNameTest