aria2/test/FileTest.cc
Tatsuhiro Tsujikawa d034c4d773 2008-03-16 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Rewritten getBasename() and getDirname(), without standard 
library
	basename(), dirname().
	* src/File.cc
	* test/FileTest.cc
2008-03-16 09:04:21 +00:00

212 lines
4.4 KiB
C++

#include "File.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string>
#include <fstream>
#include <cppunit/extensions/HelperMacros.h>
namespace aria2 {
class FileTest:public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(FileTest);
CPPUNIT_TEST(testExists);
CPPUNIT_TEST(testIsFile);
CPPUNIT_TEST(testIsDir);
CPPUNIT_TEST(testRemove);
CPPUNIT_TEST(testSize);
CPPUNIT_TEST(testMkdir);
CPPUNIT_TEST(testGetDirname);
CPPUNIT_TEST(testGetBasename);
CPPUNIT_TEST(testRenameTo);
CPPUNIT_TEST_SUITE_END();
private:
public:
void setUp() {
}
void testExists();
void testIsFile();
void testIsDir();
void testRemove();
void testSize();
void testMkdir();
void testGetDirname();
void testGetBasename();
void testRenameTo();
};
CPPUNIT_TEST_SUITE_REGISTRATION( FileTest );
void FileTest::testExists() {
File f("FileTest.cc");
CPPUNIT_ASSERT(f.exists());
File f2("NonExistentFile");
CPPUNIT_ASSERT(!f2.exists());
File d1("../test");
CPPUNIT_ASSERT(d1.exists());
}
void FileTest::testIsFile() {
File f("FileTest.cc");
CPPUNIT_ASSERT(f.isFile());
File f2("NonExistentFile");
CPPUNIT_ASSERT(!f2.isFile());
File d1("../test");
CPPUNIT_ASSERT(!d1.isFile());
}
void FileTest::testIsDir() {
File f("FileTest.cc");
CPPUNIT_ASSERT(!f.isDir());
File f2("NonExistentFile");
CPPUNIT_ASSERT(!f2.isDir());
File d1("../test");
CPPUNIT_ASSERT(d1.isDir());
}
void FileTest::testRemove() {
int fd;
std::string name = "/tmp/aria2test";
unlink(name.c_str());
if((fd = creat(name.c_str(), S_IRUSR|S_IWUSR)) < 0) {
CPPUNIT_FAIL("cannot create test file");
}
close(fd);
File f(name);
CPPUNIT_ASSERT(f.isFile());
CPPUNIT_ASSERT(f.remove());
CPPUNIT_ASSERT(!f.exists());
// delete the file again
CPPUNIT_ASSERT(!f.remove());
std::string dir = "/tmp/aria2testdir";
#ifdef __MINGW32__
mkdir(dir.c_str());
#else
mkdir(dir.c_str(), 0777);
#endif // __MINGW32__
File d(dir);
CPPUNIT_ASSERT(d.exists());
CPPUNIT_ASSERT(d.remove());
CPPUNIT_ASSERT(!d.exists());
// delete the directory again
CPPUNIT_ASSERT(!d.remove());
}
void FileTest::testSize() {
File f("4096chunk.txt");
CPPUNIT_ASSERT_EQUAL(4096, (int)f.size());
}
void FileTest::testMkdir() {
std::string dir = "/tmp/aria2test2/test";
File d(dir);
if(d.exists()) {
CPPUNIT_ASSERT(d.remove());
}
CPPUNIT_ASSERT(!d.exists());
CPPUNIT_ASSERT(d.mkdirs());
CPPUNIT_ASSERT(d.exists());
// this test failes because d.mkdir returns false when the directory is
// already exists.
CPPUNIT_ASSERT(!d.mkdirs());
}
void FileTest::testGetDirname()
{
{
File f("/usr/lib");
CPPUNIT_ASSERT_EQUAL(std::string("/usr"), f.getDirname());
}
{
File f("/usr/");
CPPUNIT_ASSERT_EQUAL(std::string("/usr"), f.getDirname());
}
{
File f("usr");
CPPUNIT_ASSERT_EQUAL(std::string("."), f.getDirname());
}
{
File f("/");
CPPUNIT_ASSERT_EQUAL(std::string("/"), f.getDirname());
}
{
File f(".");
CPPUNIT_ASSERT_EQUAL(std::string("."), f.getDirname());
}
{
File f("..");
CPPUNIT_ASSERT_EQUAL(std::string("."), f.getDirname());
}
{
File f("");
CPPUNIT_ASSERT_EQUAL(std::string(""), f.getDirname());
}
}
void FileTest::testGetBasename()
{
{
File f("/usr/lib");
CPPUNIT_ASSERT_EQUAL(std::string("lib"), f.getBasename());
}
{
File f("/usr/");
CPPUNIT_ASSERT_EQUAL(std::string(""), f.getBasename());
}
{
File f("usr");
CPPUNIT_ASSERT_EQUAL(std::string("usr"), f.getBasename());
}
{
File f("/");
CPPUNIT_ASSERT_EQUAL(std::string(""), f.getBasename());
}
{
File f(".");
CPPUNIT_ASSERT_EQUAL(std::string("."), f.getBasename());
}
{
File f("..");
CPPUNIT_ASSERT_EQUAL(std::string(".."), f.getBasename());
}
{
File f("");
CPPUNIT_ASSERT_EQUAL(std::string(""), f.getBasename());
}
}
void FileTest::testRenameTo()
{
std::string fname = "FileTest_testRenameTo.txt";
std::ofstream of(fname.c_str());
of.close();
File f(fname);
std::string fnameTo = "FileTest_testRenameTo_dest.txt";
CPPUNIT_ASSERT(f.renameTo(fnameTo));
CPPUNIT_ASSERT(f.exists());
CPPUNIT_ASSERT(!File(fname).exists());
CPPUNIT_ASSERT_EQUAL(fnameTo, f.getBasename());
// to see renameTo() work even when the destination file exists
of.open(fname.c_str());
of.close();
CPPUNIT_ASSERT(f.renameTo(fname));
}
} // namespace aria2