Home | History | Annotate | Download | only in unit
      1 #define _STLP_DO_IMPORT_CSTD_FUNCTIONS
      2 
      3 #include <cstring>
      4 
      5 #include "cppunit/cppunit_proxy.h"
      6 
      7 //This test purpose is to check the right import of math.h C symbols
      8 //into the std namespace so we do not use the using namespace std
      9 //specification
     10 
     11 //
     12 // TestCase class
     13 //
     14 class CStringTest : public CPPUNIT_NS::TestCase
     15 {
     16   CPPUNIT_TEST_SUITE(CStringTest);
     17 #if defined (STLPORT) && !defined (_STLP_USE_NAMESPACES)
     18   CPPUNIT_IGNORE;
     19 #endif
     20   CPPUNIT_TEST(import_checks);
     21   CPPUNIT_TEST_SUITE_END();
     22 
     23   protected:
     24     void import_checks();
     25 };
     26 
     27 CPPUNIT_TEST_SUITE_REGISTRATION(CStringTest);
     28 
     29 #if defined (_MSC_VER) && (_MSC_VER >= 1400)
     30 //For deprecated symbols like strcat, strtok...
     31 #  pragma warning (disable : 4996)
     32 #endif
     33 
     34 //
     35 // tests implementation
     36 //
     37 void CStringTest::import_checks()
     38 {
     39 #if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)
     40   std::size_t bar = 0;
     41   CPPUNIT_CHECK( bar == 0 );
     42 
     43   CPPUNIT_CHECK( std::memchr("foo", 'o', 3) != NULL );
     44   CPPUNIT_CHECK( std::memcmp("foo1", "foo2", 3) == 0 );
     45   char buf1[1], buf2[1];
     46   CPPUNIT_CHECK( std::memcpy(buf1, buf2, 0) != NULL );
     47   CPPUNIT_CHECK( std::memmove(buf1, buf2, 0) != NULL );
     48   CPPUNIT_CHECK( std::memset(buf1, 0, 1) != NULL );
     49   char buf[16]; buf[0] = 0;
     50   const char* foo = "foo";
     51 #  if !defined(_WIN32_WCE)
     52   CPPUNIT_CHECK( std::strcoll("foo", "foo") == 0 );
     53   CPPUNIT_CHECK( std::strerror(0) != NULL );
     54 #  endif
     55   CPPUNIT_CHECK( std::strcat((char*)buf, foo) == (char*)buf ); // buf <- foo
     56   CPPUNIT_CHECK( std::strchr(foo, 'o') != NULL );
     57   CPPUNIT_CHECK( std::strcmp("foo1", "foo2") < 0 );
     58   CPPUNIT_CHECK( std::strcpy((char*)buf, foo) == (char*)buf ); // buf <- foo
     59   CPPUNIT_CHECK( std::strcspn("foo", "o") == 1 );
     60   CPPUNIT_CHECK( std::strlen("foo") == 3 );
     61   CPPUNIT_CHECK( std::strncat((char*)buf, foo, 2) == (char*)buf ); // buf <- foofo
     62   CPPUNIT_CHECK( std::strncmp("foo1", "foo2", 3) == 0 );
     63   CPPUNIT_CHECK( std::strncpy((char*)buf, foo, 3) == (char*)buf ); // buf <- foo
     64   CPPUNIT_CHECK( std::strpbrk(foo, "abcdo") == foo + 1 );
     65   const char* foofoo = "foofoo";
     66   CPPUNIT_CHECK( std::strrchr(foofoo, 'f') == foofoo + 3 );
     67   CPPUNIT_CHECK( std::strspn(foofoo, "aofz") == 6 );
     68   CPPUNIT_CHECK( std::strstr(foo, "") == foo );
     69   char foofoobuf[] = "foofoo";
     70   CPPUNIT_CHECK( std::strtok(foofoobuf, "z") != NULL );
     71 #  if !defined(_WIN32_WCE)
     72   CPPUNIT_CHECK( std::strxfrm((char*)buf, foo, 3) != 0 );
     73 #  endif
     74 #endif
     75 }
     76