123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- #include "File.h"
- #include "TestUtil.h"
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <string>
- #include <fstream>
- #include <cppunit/extensions/HelperMacros.h>
- #include "util.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(testUtime);
- 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();
- void testUtime();
- };
- CPPUNIT_TEST_SUITE_REGISTRATION( FileTest );
- void FileTest::testExists() {
- File f(A2_TEST_DIR"/FileTest.cc");
- CPPUNIT_ASSERT(f.exists());
- File f2("NonExistentFile");
- CPPUNIT_ASSERT(!f2.exists());
- File d1(A2_TEST_DIR);
- CPPUNIT_ASSERT(d1.exists());
- }
- void FileTest::testIsFile() {
- File f(A2_TEST_DIR"/FileTest.cc");
- CPPUNIT_ASSERT(f.isFile());
- File f2("NonExistentFile");
- CPPUNIT_ASSERT(!f2.isFile());
- File d1(A2_TEST_DIR);
- CPPUNIT_ASSERT(!d1.isFile());
- }
- void FileTest::testIsDir() {
- File f(A2_TEST_DIR"/FileTest.cc");
- CPPUNIT_ASSERT(!f.isDir());
- File f2("NonExistentFile");
- CPPUNIT_ASSERT(!f2.isDir());
- File d1(A2_TEST_DIR);
- CPPUNIT_ASSERT(d1.isDir());
- }
- void FileTest::testRemove() {
- int fd;
- std::string name = A2_TEST_OUT_DIR"/aria2_FileTest_testRemove_testregfile";
- 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 = A2_TEST_OUT_DIR"/aria2_FileTest_testRemove_testdir";
- #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(A2_TEST_DIR"/4096chunk.txt");
- CPPUNIT_ASSERT_EQUAL(4096, (int)f.size());
- }
- void FileTest::testMkdir() {
- {
- std::string dir = A2_TEST_OUT_DIR"/aria2_FileTest_testMkdir/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());
- }
- {
- std::string dir = A2_TEST_OUT_DIR"////aria2_FileTest_testMkdir////test2///";
- std::string nDir = A2_TEST_OUT_DIR"/aria2_FileTest_testMkdir/test2";
- File d(dir);
- File nd(nDir);
- if(d.exists()) {
- CPPUNIT_ASSERT(d.remove());
- }
- CPPUNIT_ASSERT(!nd.exists());
- CPPUNIT_ASSERT(d.mkdirs());
- CPPUNIT_ASSERT(nd.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());
- }
- #ifdef __MINGW32__
- {
- File f("c:\\foo\\bar");
- CPPUNIT_ASSERT_EQUAL(std::string("c:\\foo"), f.getDirname());
- }
- #endif // __MINGW32__
- }
- 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());
- }
- #ifdef __MINGW32__
- {
- File f("c:\\foo\\bar");
- CPPUNIT_ASSERT_EQUAL(std::string("bar"), f.getBasename());
- }
- {
- File f("c:\\foo\\");
- CPPUNIT_ASSERT_EQUAL(std::string(""), f.getBasename());
- }
- #endif // __MINGW32__
- }
- void FileTest::testRenameTo()
- {
- std::string fname = A2_TEST_OUT_DIR"/aria2_FileTest_testRenameTo.txt";
- std::ofstream of(fname.c_str(), std::ios::binary);
- of.close();
- File f(fname);
- std::string fnameTo = A2_TEST_OUT_DIR"/aria2_FileTest_testRenameTo_dest.txt";
- CPPUNIT_ASSERT(f.renameTo(fnameTo));
- CPPUNIT_ASSERT(f.exists());
- CPPUNIT_ASSERT(!File(fname).exists());
- CPPUNIT_ASSERT_EQUAL(File(fnameTo).getBasename(), f.getBasename());
- // to see renameTo() work even when the destination file exists
- of.open(fname.c_str());
- of.close();
- CPPUNIT_ASSERT(f.renameTo(fname));
- }
- void FileTest::testUtime()
- {
- File f(A2_TEST_OUT_DIR"/aria2_FileTest_testUTime");
- createFile(f.getPath(), 0);
- time_t atime = (time_t) 100000;
- time_t mtime = (time_t) 200000;
- CPPUNIT_ASSERT(f.utime(Time(atime), Time(mtime)));
- a2_struct_stat buf;
- CPPUNIT_ASSERT(0 == a2stat(utf8ToWChar(f.getPath()).c_str(), &buf));
- CPPUNIT_ASSERT_EQUAL((time_t)atime, (time_t)buf.st_atime);
- CPPUNIT_ASSERT_EQUAL((time_t)mtime, f.getModifiedTime().getTime());
- File notFound(A2_TEST_OUT_DIR"/aria2_FileTest_testUTime_notFound");
- notFound.remove();
- CPPUNIT_ASSERT(!notFound.utime(Time(atime), Time(mtime)));
- }
- } // namespace aria2
|