mirror of https://github.com/aria2/aria2
Address better renaming review comments and suggestions pt.1
parent
e6e2de96ca
commit
67f556f208
|
@ -780,9 +780,21 @@ void RequestGroup::tryAutoFileRenaming()
|
||||||
}
|
}
|
||||||
auto fn = filepath;
|
auto fn = filepath;
|
||||||
std::string ext;
|
std::string ext;
|
||||||
auto idx = fn.find_last_of(".");
|
const auto idx = fn.find_last_of(".");
|
||||||
auto slash = fn.find_last_of("\\/");
|
const auto slash = fn.find_last_of("\\/");
|
||||||
if (idx != std::string::npos && (slash == std::string::npos || slash < idx)) {
|
// Do extract the extension, as in "file.ext" = "file" and ".ext",
|
||||||
|
// but do not consider ".file" to be a file name without extension instead
|
||||||
|
// of a blank file name and an extension of ".file"
|
||||||
|
if (idx != std::string::npos &&
|
||||||
|
// fn has no path component and starts with a dot, but has no extension
|
||||||
|
// otherwise
|
||||||
|
idx != 0 &&
|
||||||
|
// has a file path component if we found a slash.
|
||||||
|
// if slash == idx - 1 this means a form of "*/.*", so the file name
|
||||||
|
// starts with a dot, has no extension otherwise, and therefore do not
|
||||||
|
// extract an extension either
|
||||||
|
(slash == std::string::npos || slash < idx - 1)
|
||||||
|
) {
|
||||||
ext = fn.substr(idx);
|
ext = fn.substr(idx);
|
||||||
fn = fn.substr(0, idx);
|
fn = fn.substr(0, idx);
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ class RequestGroupTest : public CppUnit::TestFixture {
|
||||||
|
|
||||||
CPPUNIT_TEST_SUITE(RequestGroupTest);
|
CPPUNIT_TEST_SUITE(RequestGroupTest);
|
||||||
CPPUNIT_TEST(testGetFirstFilePath);
|
CPPUNIT_TEST(testGetFirstFilePath);
|
||||||
|
CPPUNIT_TEST(testTryAutoFileRenaming);
|
||||||
CPPUNIT_TEST(testCreateDownloadResult);
|
CPPUNIT_TEST(testCreateDownloadResult);
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
|
||||||
|
@ -24,6 +25,7 @@ public:
|
||||||
void setUp() { option_.reset(new Option()); }
|
void setUp() { option_.reset(new Option()); }
|
||||||
|
|
||||||
void testGetFirstFilePath();
|
void testGetFirstFilePath();
|
||||||
|
void testTryAutoFileRenaming();
|
||||||
void testCreateDownloadResult();
|
void testCreateDownloadResult();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -39,7 +41,22 @@ void RequestGroupTest::testGetFirstFilePath()
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("/tmp/myfile"), group.getFirstFilePath());
|
CPPUNIT_ASSERT_EQUAL(std::string("/tmp/myfile"), group.getFirstFilePath());
|
||||||
|
|
||||||
// test file renaming
|
// test in-memory
|
||||||
|
ctx->getFirstFileEntry()->setPath("/tmp/myfile");
|
||||||
|
|
||||||
|
group.markInMemoryDownload();
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(std::string("[MEMORY]myfile"), group.getFirstFilePath());
|
||||||
|
}
|
||||||
|
|
||||||
|
void RequestGroupTest::testTryAutoFileRenaming()
|
||||||
|
{
|
||||||
|
std::shared_ptr<DownloadContext> ctx(
|
||||||
|
new DownloadContext(1_k, 1_k, "/tmp/myfile"));
|
||||||
|
|
||||||
|
RequestGroup group(GroupId::create(), option_);
|
||||||
|
group.setDownloadContext(ctx);
|
||||||
|
|
||||||
option_->put(PREF_AUTO_FILE_RENAMING, "false");
|
option_->put(PREF_AUTO_FILE_RENAMING, "false");
|
||||||
try {
|
try {
|
||||||
group.tryAutoFileRenaming();
|
group.tryAutoFileRenaming();
|
||||||
|
@ -65,12 +82,22 @@ void RequestGroupTest::testGetFirstFilePath()
|
||||||
group.tryAutoFileRenaming();
|
group.tryAutoFileRenaming();
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("/tmp.txt/myfile.1.txt"), group.getFirstFilePath());
|
CPPUNIT_ASSERT_EQUAL(std::string("/tmp.txt/myfile.1.txt"), group.getFirstFilePath());
|
||||||
|
|
||||||
// test in-memory
|
ctx->getFirstFileEntry()->setPath(".bashrc");
|
||||||
ctx->getFirstFileEntry()->setPath("/tmp/myfile");
|
group.tryAutoFileRenaming();
|
||||||
|
CPPUNIT_ASSERT_EQUAL(std::string(".bashrc.1"), group.getFirstFilePath());
|
||||||
|
|
||||||
group.markInMemoryDownload();
|
ctx->getFirstFileEntry()->setPath(".bashrc.txt");
|
||||||
|
group.tryAutoFileRenaming();
|
||||||
|
CPPUNIT_ASSERT_EQUAL(std::string(".bashrc.1.txt"), group.getFirstFilePath());
|
||||||
|
|
||||||
|
ctx->getFirstFileEntry()->setPath("/tmp.txt/.bashrc");
|
||||||
|
group.tryAutoFileRenaming();
|
||||||
|
CPPUNIT_ASSERT_EQUAL(std::string("/tmp.txt/.bashrc.1"), group.getFirstFilePath());
|
||||||
|
|
||||||
|
ctx->getFirstFileEntry()->setPath("/tmp.txt/.bashrc.txt");
|
||||||
|
group.tryAutoFileRenaming();
|
||||||
|
CPPUNIT_ASSERT_EQUAL(std::string("/tmp.txt/.bashrc.1.txt"), group.getFirstFilePath());
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("[MEMORY]myfile"), group.getFirstFilePath());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RequestGroupTest::testCreateDownloadResult()
|
void RequestGroupTest::testCreateDownloadResult()
|
||||||
|
|
Loading…
Reference in New Issue