Home | History | Annotate | Download | only in unit
      1 //We are including stdlib.h and stddef.h first because under MSVC
      2 //those headers contains a errno macro definition without the underlying value
      3 //definition.
      4 #include <stdlib.h>
      5 #include <stddef.h>
      6 
      7 #include <errno.h>
      8 #include <errno.h> // not typo, check errno def/undef/redef
      9 
     10 #ifndef _STLP_WCE
     11 
     12 #include "cppunit/cppunit_proxy.h"
     13 
     14 //
     15 // TestCase class
     16 //
     17 class ErrnoTest : public CPPUNIT_NS::TestCase
     18 {
     19   CPPUNIT_TEST_SUITE(ErrnoTest);
     20   CPPUNIT_TEST(check);
     21   CPPUNIT_TEST_SUITE_END();
     22 
     23 protected:
     24   void check();
     25 };
     26 
     27 CPPUNIT_TEST_SUITE_REGISTRATION(ErrnoTest);
     28 
     29 void ErrnoTest::check()
     30 {
     31   //We are using ERANGE as it is part of the C++ ISO (see Table 26 in section 19.3)
     32   //Using ERANGE improve the test as it means that the native errno.h file has really
     33   //been included.
     34   errno = ERANGE;
     35 
     36   CPPUNIT_ASSERT( errno == ERANGE );
     37   errno = 0;
     38 
     39 /* Note: in common, you can't write ::errno or std::errno,
     40  * due to errno in most cases is just a macro, that frequently
     41  * (in MT environment errno is a per-thread value) expand to something like
     42  * (*__errno_location()). I don't know way how masquerade such
     43  * things: name of macro can't include ::.
     44  *
     45  *                - ptr, 2005-03-30
     46  */
     47 # if 0
     48   if ( ::errno != 0 ) {
     49     return 1;
     50   }
     51   if ( std::errno != 0 ) {
     52     return 1;
     53   }
     54 # endif
     55 }
     56 #endif // _STLP_WCE
     57