⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chk_lnkfile.cpp

📁 一个不错
💻 CPP
字号:
/* Copyright is licensed under GNU LGPL.                 by I.J.Wang 2003   Check Wy_LnkFile public members   Build: make chk_regfile   Note: Test data files should exist in the working directory         Files may be created in the working directory and unlinked*/#include "wy_lnkfile.h"#include "wy_atdestroy.h"#include <unistd.h>#include <iostream>#if WY_LNKFILE_VERSION!=31#error Test code is for WY_LNKFILE_VERSION 31#endifstatic const WyStr RefLnkName("testfile.lnkf.L1"); // points to "nofile"static const WyStr RefLnkNameValue("nofile");static const WyStr TmpLnkName("tmp.lnkfile.tmp");//// Assert ff is default//static void assert_default(const Wy_LnkFile& ff){ WyRet r; if(ff.is_default()==false) {   WY_THROW( WyRet() ); } // stat {   WyFileStat stt;   if((r=ff.stat(stt))!=Wym_EBADF) {     WY_THROW(r);   }   if(stt.is_default()==false) {     WY_THROW( WyRet() );   } }};static void assert_not_default(const Wy_LnkFile& ff){ WyRet r; if(ff.is_default()) {   WY_THROW( WyRet() ); } // stat {   WyFileStat stt;   if((r=ff.stat(stt))!=Ok) {     WY_THROW(r);   }   if(stt.is_lnk()==false) {     WY_THROW( WyRet() );   } }};//// Assert f1,f2 the same systerm file//static void assert_same_sysf(const Wy_LnkFile& f1,const Wy_LnkFile& f2){ if(f1.wy_lnkf()!=f2.wy_lnkf()) {   WY_THROW( WyRet() ); }};#define CHK_DEFAULT(p)\    try { assert_default(p); } catch(...) { WY_THROW( WyRet()); }#define CHK_NOT_DEFAULT(p)\    try { assert_not_default(p); } catch(...) { WY_THROW( WyRet()); }#define CHK_SAME_SYSF(p1,p2)\    try { assert_same_sysf(p1,p2); } catch(...) { WY_THROW( WyRet()); }//// Setup the test //static void setup_test(void){ ::unlink(RefLnkName.c_str()); if(::symlink(RefLnkNameValue.c_str(),              RefLnkName.c_str())!=0) {   WY_THROW( WyRet(WyReply(errno)) );  // cannot create the test file }};//// Undo setup_test//static void close_test(void){ ::unlink(RefLnkName.c_str());};//// Check basic operations on default object//static void t1(void){ WyRet r; Wy_LnkFile NObj;     // non-default object for test as argument CHK_DEFAULT(NObj); if((r=NObj.reset(RefLnkName))!=Ok) {   WY_THROW(r); } CHK_NOT_DEFAULT(NObj);  // stat {   WyFileStat stt;   if((r=NObj.stat(stt))!=Ok) {     WY_THROW(r);   }   if(stt.is_lnk()==false) {     WY_THROW( WyRet() );   } } // Wy_LnkFile()/Wy_LnkFile(const Wy_LnkFile&) {   Wy_LnkFile tmp0;   Wy_LnkFile tmp1(tmp0);   CHK_DEFAULT(tmp0);   CHK_DEFAULT(tmp1);   Wy_LnkFile tmp2(NObj);   CHK_NOT_DEFAULT(tmp2);   CHK_SAME_SYSF(tmp2,NObj);   WyStr pn;   if((r=tmp2.read(pn))!=Ok) {     WY_THROW(r);   }   if(pn!=RefLnkNameValue) {     WY_THROW( WyRet() );   } } // Wy_LnkFile(const char*) {   Wy_LnkFile tmp(RefLnkName.c_str());   CHK_SAME_SYSF(tmp,NObj); } // Wy_LnkFile(const WyStr&) {   Wy_LnkFile tmp(RefLnkName);   CHK_SAME_SYSF(tmp,NObj); } // reset() {   Wy_LnkFile tmp;   CHK_DEFAULT(tmp);   if((r=tmp.reset())!=Ok) {     WY_THROW(r);   }   CHK_DEFAULT(tmp);   Wy_LnkFile tmp2(NObj);   CHK_NOT_DEFAULT(tmp2);   if((r=tmp2.reset())!=Ok) {     WY_THROW(r);   }   CHK_DEFAULT(tmp2); } // // reset(Wy_LnkFile) // {   Wy_LnkFile tmp;   CHK_DEFAULT(tmp);   if((r=tmp.reset(Wy_LnkFile()))!=Ok) {     WY_THROW(r);   }   CHK_DEFAULT(tmp);   if((r=tmp.reset(NObj))!=Ok) {     WY_THROW(r);   }   CHK_NOT_DEFAULT(tmp);   if((r=tmp.reset(Wy_LnkFile()))!=Ok) {     WY_THROW(r);   }   CHK_DEFAULT(tmp); } // reset(const char*) {   Wy_LnkFile tmp;   if((r=tmp.reset(RefLnkName.c_str()))!=Ok) {     WY_THROW(r);   }   CHK_SAME_SYSF(tmp,NObj); } // reset(const WyStr&) {   Wy_LnkFile tmp;   if((r=tmp.reset(RefLnkName))!=Ok) {     WY_THROW(r);   }   CHK_SAME_SYSF(tmp,NObj); } // read {   Wy_LnkFile tmp;   CHK_DEFAULT(tmp);   WyStr pn;   if((r=tmp.read(pn))!=Wym_EBADF) {     WY_THROW(r);   }   CHK_DEFAULT(tmp); }};//// Check basic operations on non-default object//static void t2(void){ WyRet r;  Wy_LnkFile NObj;     // non-default object for the test CHK_DEFAULT(NObj); if((r=NObj.reset(RefLnkName))!=Ok) {   WY_THROW(r); } CHK_NOT_DEFAULT(NObj);  // stat {   WyFileStat stt;   if((r=NObj.stat(stt))!=Ok) {     WY_THROW(r);   }   if(stt.is_lnk()==false) {     WY_THROW( WyRet() );   } } // constructor { } // reset {   Wy_LnkFile tmp(NObj);   CHK_NOT_DEFAULT(tmp);   if((r=tmp.reset())!=Ok) {     WY_THROW(r);   }   CHK_DEFAULT(tmp); } // reset(Wy_LnkFile) {   Wy_LnkFile tmp(NObj);   CHK_NOT_DEFAULT(tmp);   if((r=tmp.reset(tmp))!=Ok) {     WY_THROW(r);   }   CHK_NOT_DEFAULT(tmp);   CHK_SAME_SYSF(tmp,NObj); } // reset(const char*) {   Wy_LnkFile tmp(NObj);   if((r=tmp.reset(RefLnkName.c_str()))!=Ok) {     WY_THROW(r);   }   CHK_SAME_SYSF(tmp,NObj); } // reset(const WyStr&) {   Wy_LnkFile tmp(NObj);   if((r=tmp.reset(RefLnkName))!=Ok) {     WY_THROW(r);   }   CHK_SAME_SYSF(tmp,NObj); } // read {   Wy_LnkFile tmp(NObj);   WyStr pn;   CHK_NOT_DEFAULT(tmp);   if((r=tmp.read(pn))!=Ok) {     WY_THROW(r);   }   if(pn!=RefLnkNameValue) {     WY_THROW( WyRet() );   } } // _swap {  Wy_LnkFile tmp0(NObj),tmp1,tmp2;  CHK_NOT_DEFAULT(tmp0);  CHK_DEFAULT(tmp1);  CHK_DEFAULT(tmp2);  CHK_NOT_DEFAULT(NObj);  if((r=tmp1._swap(tmp2))!=Ok) {    WY_THROW(r);  }  CHK_DEFAULT(tmp1);  CHK_DEFAULT(tmp2);  if((r=tmp1._swap(tmp0))!=Ok) {    WY_THROW(r);  }  CHK_DEFAULT(tmp0);  CHK_NOT_DEFAULT(tmp1);  CHK_SAME_SYSF(tmp1,NObj);  if((r=tmp0._swap(tmp1))!=Ok) {    WY_THROW(r);  }  CHK_DEFAULT(tmp1);  CHK_NOT_DEFAULT(tmp0);  CHK_SAME_SYSF(tmp0,NObj);  struct TmpClass : public Wy_LnkFile {} tctmp;  if((r=tctmp._swap(tmp0))!=Wym_EBADTYPE) {    WY_THROW(r);  } } // chk _alloc {   Wy_LnkFile* p= Wy_LnkFile()._alloc(r);   if(r!=Ok) {     WY_THROW(r);   }   if(p==0) {     WY_THROW( WyRet() );   }   Wy_AtDestroy<void,Wy_LnkFile*> rrid(Wy::_delete_one,p);   CHK_DEFAULT(*p); } // // reset(Wy_LnkFile()) // {   Wy_LnkFile tmp(NObj);   CHK_NOT_DEFAULT(tmp);   if((r=tmp.reset(Wy_LnkFile()))!=Ok) {     WY_THROW(r);   }   CHK_DEFAULT(tmp); } // chk move ctor {  char raw_buf[2*sizeof(Wy_LnkFile)];  ::memset(raw_buf,0,sizeof(raw_buf));  Wy_LnkFile* const p1( reinterpret_cast<Wy_LnkFile*>(raw_buf) );  Wy_LnkFile* const p2(p1+1);  new(p1) Wy_LnkFile();  if(p1->is_default()==false) {    p1->~Wy_LnkFile();    WY_THROW(r);  }  // move *p1 to p2  try {    new(p2) Wy_LnkFile(*p1,Wy::ByMove);  }  catch(...) {    p1->~Wy_LnkFile();    throw;  };  if(p2->is_default()==false) {    p2->~Wy_LnkFile();    WY_THROW(r);  }  p2->~Wy_LnkFile(); }};//// Check basic operations for static functions//static void t3_1(void)try { WyRet r; // // Create TmpLnkName and unlink it // ::unlink(TmpLnkName.c_str()); if((r=Wy_LnkFile::create("tmp.tmp.tmp",TmpLnkName))!=Ok) {   WY_THROW(r); } // check if it's there {   Wy_LnkFile tmp;   if((r=tmp.reset(TmpLnkName.c_str()))!=Ok) {     WY_THROW(r);   } } ::unlink(TmpLnkName.c_str()); // check if it's unlinked {   Wy_LnkFile tmp;   if((r=tmp.reset(TmpLnkName.c_str()))!=Wym_ENOENT) {     WY_THROW(r);   }   CHK_DEFAULT(tmp); }}catch(...) { ::unlink(TmpLnkName.c_str()); throw;};//// Check basic operations for static functions//static void t3_2(void)try { WyRet r; // // Create TmpLnkName and unlink it // ::unlink(TmpLnkName.c_str()); if((r=Wy_LnkFile::create(WyStr("tmp.tmp.tmp"),TmpLnkName))!=Ok) {   WY_THROW(r); } // check if it's there {   Wy_LnkFile tmp;   if((r=tmp.reset(TmpLnkName))!=Ok) {     WY_THROW(r);   } } ::unlink(TmpLnkName.c_str()); // check if it's unlinked {   Wy_LnkFile tmp;   if((r=tmp.reset(TmpLnkName))!=Wym_ENOENT) {     WY_THROW(r);   }   CHK_DEFAULT(tmp); }}catch(...) { ::unlink(TmpLnkName.c_str()); throw;};static void t3(void){ t3_1(); t3_2();};static void t4(void){};static void t_exception(void){ // // Test copy constructor exception // try { } catch(const Wy_LnkFile::Reply& e) {   // FALL_THROUGH  } catch(...) {   throw; }; // // Test destructor exception // { }};static const WyStr chdr(                  "+---------------+\n"                  "| main() caught:|\n"                  "+---------------+\n");int main(void) throw()try { std::cout << "Checking wy_lnkfile.h ...\n"; if(std::strcmp(Wy_LnkFile::class_name,"Wy_LnkFile")!=0) {   WY_THROW( WyRet() ); } try {   setup_test();   t1();   t2();   t3();   t4();   t_exception();   close_test();/*   {     WyRet r;     Wy_LnkFile lnk(WyStr("/etc/localtime"));     WyStr val;     if((r=lnk.read(val))!=Ok) {       WY_THROW(r);     }     std::cout << "/etc/localtime -> " << val << std::endl;   }*/ } catch(...) {   close_test();   throw; } std::cout << "Checked Ok\n"; return(0);}catch(const WyRet& e) { std::cerr << chdr.c_str() << Wy::wrd(e).c_str() << std::endl; return(-1);}catch(const std::exception& e) { std::cerr << chdr.c_str() << "std::exception" << std::endl; return(-1);}catch(...) { std::cerr << chdr.c_str() << "unknown unwind" << std::endl; return(-1);};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -