os/ossrv/genericopenlibs/cppstdlib/stl/test/unit/test_errno.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     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