📄 chk_sockaddrlocal.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2003 Check WySockAddrLocal public members Build: make chk_sockaddrlocal Note: Test data files should exist in the working directory Files may be created in the working directory and unlinked*/#include "wysockaddrlocal.h"#include "wy_atdestroy.h"#include <memory>#include <iostream>#if WYSOCKADDRLOCAL_VERSION!=31#error Test code is for WYSOCKADDRLOCAL_VERSION 31#endif//// Assert ff is default//static void assert_default(const WySockAddrLocal& laddr){ static const WySockAddrLocal Def_Obj; WyRet r; if(laddr.is_default()==false) { WY_THROW( WyRet() ); } if(laddr.family()!=AF_LOCAL) { WY_THROW( WyRet() ); } if(laddr._path().size()!=0) { WY_THROW(r); } if(laddr!=Def_Obj) { WY_THROW( WyRet() ); } if(laddr==Def_Obj) { } else { WY_THROW( WyRet() ); }};static void assert_not_default(const WySockAddrLocal& laddr){ static const WySockAddrLocal Def_Obj; WyRet r; if(laddr.is_default()) { WY_THROW( WyRet() ); } if(laddr.family()!=AF_LOCAL) { WY_THROW( WyRet() ); } if(laddr._path().size()==0) { WY_THROW(r); } if(laddr==Def_Obj) { WY_THROW( WyRet() ); } if(laddr!=Def_Obj) { } else { WY_THROW( WyRet() ); }};static void assert_equ(const WySockAddrLocal& a1,const WySockAddrLocal& a2){ if(a1.family()!=AF_LOCAL) { WY_THROW( WyRet() ); } if(a2.family()!=AF_LOCAL) { WY_THROW( WyRet() ); } if(Wy::_strcmp(a1._path(),a2._path())!=0) { WY_THROW( WyRet() ); }};static void assert_equ(const WySockAddrLocal& a1,const struct ::sockaddr_un& a2){ if(a1.family()!=AF_LOCAL) { WY_THROW( WyRet() ); } // Note: a2.sun_family not checked // if(Wy::_strcmp(a1._path(),a2.sun_path)!=0) { 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_EQU(a1,a2)\ try { assert_equ((a1),(a2)); } catch(...) { WY_THROW( WyRet()); }//// Check basic operations on default object//static void t1(void){ WyRet r; // WySockAddrLocal()/WySockAddrLocal(copy) { WySockAddrLocal a0; CHK_DEFAULT(a0); WySockAddrLocal a1(a0); CHK_DEFAULT(a1); CHK_EQU(a1,a0); } // WySockAddrLocal(const WyStr&) { const WyStr Notation("abcd2"); WyStr pn0; WyStr pn1(Notation); WyStr str; WySockAddrLocal a0(pn0); CHK_DEFAULT(a0); WySockAddrLocal a1(pn1); CHK_NOT_DEFAULT(a1); if(a1._path()!=Notation) { WY_THROW( WyRet() ); } WySockAddrLocal a2(Notation); CHK_EQU(a1,a2); if((r=str.reset(WySockAddrLocal::PathMaxLen-1,char('A')))!=Ok) { WY_THROW( WyRet(r) ); } WySockAddrLocal a3(str); if(str!=a3._path()) { WY_THROW( WyRet() ); } if((r=str.reset(WySockAddrLocal::PathMaxLen,char('A')))!=Ok) { WY_THROW( WyRet(r) ); } try { WySockAddrLocal a4(str); a4.is_default(); WY_THROW( WyRet() ); } catch(const WySockAddrLocal::Reply& e) { if(e!=Wym_ENAMETOOLONG) { throw; } // FALLTHROUGH }; } // chk ops on parameter const ::sockaddr_un& { struct ::sockaddr_un saddr; const char* SPath="helo4"; ::strcpy(saddr.sun_path,SPath); WySockAddrLocal tmp1(saddr,SUN_LEN(&saddr)); CHK_EQU(tmp1,saddr); if(Wy::_strcmp(tmp1._path(),saddr.sun_path)!=0) { WY_THROW( WyRet() ); } WySockAddrLocal tmp2; CHK_DEFAULT(tmp2); tmp2.reset(saddr,SUN_LEN(&saddr)); CHK_EQU(tmp2,saddr); CHK_EQU(tmp2,tmp1); WySockAddrLocal tmp3(saddr,sizeof(saddr)); CHK_NOT_DEFAULT(tmp3); tmp2.reset(); CHK_DEFAULT(tmp2); } // WySockAddrLocal(const char*) { WySockAddrLocal tmp1(""); CHK_DEFAULT(tmp1); WySockAddrLocal tmp2("abb"); CHK_NOT_DEFAULT(tmp2); if(Wy::_strcmp(tmp2._path(),"abb")!=0) { WY_THROW( WyRet() ); } } // WySockAddrLocal(WyCSeg) { WyCSeg path("path"); WySockAddrLocal tmp1(path); CHK_NOT_DEFAULT(tmp1); if(Wy::_strcmp(tmp1._path(),path)!=0) { WY_THROW( WyRet() ); } } // notation(WyStr&) { WyCSeg path("testpath.12"); WySockAddrLocal laddr(path); WyStr str(WyCSeg("xx")); if((r=laddr.notation(str))!=Ok) { WY_THROW( r ); } if(str!=path) { WY_THROW( WyRet() ); } laddr.reset(); if((r=laddr.notation(str))!=Ok) { WY_THROW( r ); } if(str.size()!=0) { WY_THROW( WyRet() ); } } // reset() { WySockAddrLocal a0; a0.reset(); CHK_DEFAULT(a0); WySockAddrLocal a1("x"); CHK_NOT_DEFAULT(a1); a1.reset(); CHK_DEFAULT(a1); } // reset(const WySockAddrLocal&) { WySockAddrLocal a0; WySockAddrLocal a1; a1.reset(a0); CHK_DEFAULT(a0); CHK_DEFAULT(a1); CHK_EQU(a1,a0); if((r=a1.reset(WyStr()))!=Ok) { WY_THROW(r); } if((r=a1.reset(WyStr("helo")))!=Ok) { WY_THROW(r); } CHK_NOT_DEFAULT(a1); } // reset(sockaddr_un,size_t) { struct ::sockaddr_un saddr; const char* SPath="helo6"; ::strcpy(saddr.sun_path,SPath); WySockAddrLocal tmp1; CHK_DEFAULT(tmp1); if((r=tmp1.reset(saddr,SUN_LEN(&saddr)))!=Ok) { WY_THROW(r); } CHK_EQU(tmp1,saddr); } // reset(const WyStr&) { WyStr pn("ddd"); WyRet r; WySockAddrLocal tmp; CHK_DEFAULT(tmp); if((r=tmp.reset(pn))!=Ok) { WY_THROW(r); } CHK_NOT_DEFAULT(tmp); } // reset(const WyStr&) { WyStr str(2,char(0)); WyRet r; str+='a'; WySockAddrLocal tmp; CHK_DEFAULT(tmp); if((r=tmp.reset(str))!=Ok) { WY_THROW(r); } CHK_NOT_DEFAULT(tmp); if(str!=tmp._path()) { WY_THROW( WyRet() ); } if(str!=Wy::wrd(tmp)) { WY_THROW( WyRet() ); } } // operator= { WySockAddrLocal a0; WySockAddrLocal a1; a1=a0; CHK_DEFAULT(a0); CHK_DEFAULT(a1); if((r=a0.reset(WyStr("helo")))!=Ok) { WY_THROW(r); } a1=a0; CHK_NOT_DEFAULT(a0); CHK_NOT_DEFAULT(a1); CHK_EQU(a0,a1); a0.reset(); CHK_DEFAULT(a0); a0=WyStr("helo"); CHK_EQU(a0,a1); a0=""; CHK_DEFAULT(a0); a0="1234"; if(Wy::_strcmp(a0._path(),"1234")!=0) { WY_THROW( WyRet() ); } WyCSeg seg("asdf"); a0=seg; if(Wy::_strcmp(a0._path(),seg)!=0) { WY_THROW( WyRet() ); } } // _path { WySockAddrLocal a0; CHK_DEFAULT(a0); WyStr str; if(a0._path().size()!=0) { WY_THROW(r); } WyStr LStr(WySockAddrLocal::PathMaxLen-1,'x'); if((r=a0.reset(LStr))!=Ok) { WY_THROW(r); } if(LStr!=a0._path()) { WY_THROW(r); } if(LStr!=Wy::wrd(a0)) { WY_THROW( WyRet() ); } LStr+='x'; // add one char if((r=a0.reset(LStr))!=Wym_ENAMETOOLONG) { WY_THROW(r); } } // operator==/!= { WySockAddrLocal a0,a1; const WyStr Str("helo"); if(a0==a1) { } else { WY_THROW( WyRet() ); } if(a0!=a1) { WY_THROW( WyRet() ); } if(a0==WyStr()) { } else { WY_THROW( WyRet() ); } if(a0!=WyStr()) { WY_THROW( WyRet() ); } else { } if(a0==WyCSeg("",size_t(0))) { } else { WY_THROW( WyRet() ); } if(a0!=WyCSeg("",size_t(0))) { WY_THROW( WyRet() ); } if((r=a1.reset(Str))!=Ok) { WY_THROW(r); } if(a1==a0) { WY_THROW( WyRet() ); } if(a1!=a0) { } else { WY_THROW( WyRet() ); } if(a1==a0._path()) { WY_THROW( WyRet() ); } if(a1!=a0._path()) { } else { WY_THROW( WyRet() ); } if(a1==WyStr(a0._path())) { WY_THROW( WyRet() ); } if(a1!=WyStr(a0._path())) { } else { WY_THROW( WyRet() ); } if(WyStr("helo")==a1) { } else { WY_THROW( WyRet() ); } if(WyStr("helo")!=a1) { WY_THROW( WyRet() ); } if(Str.cseg()==a1) { } else { WY_THROW( WyRet() ); } if(Str.cseg()!=a1) { WY_THROW( WyRet() ); } } // operator==/!= { WyStr str("helo"); WySockAddrLocal tmp0(str); if(tmp0==str) { } else { WY_THROW( WyRet() ); } if(str==tmp0) { } else { WY_THROW( WyRet() ); } if(tmp0!=str) { WY_THROW( WyRet() ); } if(str!=tmp0) { WY_THROW( WyRet() ); } WyCSeg tseg("he\0lo",5); if((r=tmp0.reset(tseg))!=Ok) { WY_THROW( WyRet(r) ); } if(tmp0==tseg) { } else { WY_THROW( WyRet() ); } if(tseg==tmp0) { } else { WY_THROW( WyRet() ); } if(tmp0!=tseg) { WY_THROW( WyRet() ); } if(tseg!=tmp0) { WY_THROW( WyRet() ); }/* struct sockaddr_un un_addr; std::strcpy(un_addr.sun_path,str.c_str()); tmp0=str; if(tmp0==un_addr) { } else { WY_THROW( WyRet() ); } if(un_addr==tmp0) { } else { WY_THROW( WyRet() ); } if(tmp0!=un_addr) { WY_THROW( WyRet() );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -