Exemple #1
0
// test the stdlib functions with the given locale
void XLocaleTestCase::TestStdlibFunctionsWith(const wxXLocale& loc)
{
    // NOTE: here go the checks which must pass under _any_ locale "loc";
    //       checks for specific locales are in TestStdlibFunctions()

#if wxUSE_UNICODE
    wchar_t* endptr;
#else
    char* endptr;
#endif

    // strtod (don't use decimal separator as it's locale-specific)
    CPPUNIT_ASSERT_EQUAL( 0.0,        wxStrtod_l(wxT("0"), NULL, loc) );
    CPPUNIT_ASSERT_EQUAL( 1234.0,     wxStrtod_l(wxT("1234"), NULL, loc) );

    // strtol
    endptr = NULL;
    CPPUNIT_ASSERT_EQUAL( 100,        wxStrtol_l(wxT("100"), NULL, 0, loc) );
    CPPUNIT_ASSERT_EQUAL( 0xFF,       wxStrtol_l(wxT("0xFF"), NULL, 0, loc) );
    CPPUNIT_ASSERT_EQUAL( 2001,       wxStrtol_l(wxT("2001 60c0c0 -1101110100110100100000 0x6fffff"), &endptr, 10, loc) );
    CPPUNIT_ASSERT_EQUAL( 0x60c0c0,   wxStrtol_l(endptr, &endptr, 16, loc) );
    CPPUNIT_ASSERT_EQUAL( -0x374D20,  wxStrtol_l(endptr, &endptr, 2, loc) );
    CPPUNIT_ASSERT_EQUAL( 0x6fffff,   wxStrtol_l(endptr, NULL, 0, loc) );
    
    // strtoul
    // NOTE: 3147483647 and 0xEE6B2800 are greater than LONG_MAX (on 32bit machines) but
    //       smaller than ULONG_MAX
    CPPUNIT_ASSERT_EQUAL( (unsigned long)3147483647,  wxStrtoul_l(wxT("3147483647"), NULL, 0, loc) );
    CPPUNIT_ASSERT_EQUAL( (unsigned long)0xEE6B2800, wxStrtoul_l(wxT("0xEE6B2800"), NULL, 0, loc) );

    // TODO: test for "failure" behaviour of the functions above
}
Exemple #2
0
void XLocaleTestCase::TestStdlibFunctions()
{
    TestStdlibFunctionsWith(wxCLocale);

#if wxUSE_UNICODE
    wchar_t* endptr;
#else
    char* endptr;
#endif

    // strtod checks specific for C locale
    endptr = NULL;
    CPPUNIT_ASSERT_EQUAL( 0.0,        wxStrtod_l(wxT("0.000"), NULL, wxCLocale) );
    CPPUNIT_ASSERT_EQUAL( 1.234,      wxStrtod_l(wxT("1.234"), NULL, wxCLocale) );
    CPPUNIT_ASSERT_EQUAL( -1.234E-5,  wxStrtod_l(wxT("-1.234E-5"), NULL, wxCLocale) );
    CPPUNIT_ASSERT_EQUAL( 365.24,     wxStrtod_l(wxT("365.24 29.53"), &endptr, wxCLocale) );
    CPPUNIT_ASSERT_EQUAL( 29.53,      wxStrtod_l(endptr, NULL, wxCLocale) );

#ifdef wxHAS_XLOCALE_SUPPORT

    // french

    if (!wxLocale::IsAvailable(wxLANGUAGE_FRENCH))
        return;     // you should have french support installed to continue this test!

    wxXLocale locFR(wxLANGUAGE_FRENCH);
    CPPUNIT_ASSERT( locFR.IsOk() ); // doesn't make sense to continue otherwise

    TestCtypeFunctionsWith(locFR);

    // comma as decimal point:
    CPPUNIT_ASSERT_EQUAL( 1.234, wxStrtod_l(wxT("1,234"), NULL, locFR) );
    
    // space as thousands separator is not recognized by wxStrtod_l():
    CPPUNIT_ASSERT( 1234.5 != wxStrtod_l(wxT("1 234,5"), NULL, locFR) );
    
    
    // italian

    if (!wxLocale::IsAvailable(wxLANGUAGE_ITALIAN))
        return;     // you should have italian support installed to continue this test!

    wxXLocale locIT(wxLANGUAGE_ITALIAN);
    CPPUNIT_ASSERT( locIT.IsOk() ); // doesn't make sense to continue otherwise

    TestStdlibFunctionsWith(locIT);

    // comma as decimal point:
    CPPUNIT_ASSERT_EQUAL( 1.234, wxStrtod_l(wxT("1,234"), NULL, locIT) );
    
    // dot as thousands separator is not recognized by wxStrtod_l():
    CPPUNIT_ASSERT( 1234.5 != wxStrtod_l(wxT("1.234,5"), NULL, locIT) );
#endif
}
void XLocaleTestCase::PreserveLocale()
{
    // Test that using locale functions doesn't change the global C locale.
    const wxString origLocale(setlocale(LC_ALL, NULL));

    wxStrtod_l(wxT("1.234"), NULL, wxCLocale);

    CPPUNIT_ASSERT_EQUAL( origLocale, setlocale(LC_ALL, NULL) );
}