| 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
 |