d326d52cd9
Setting the locale in the ctor of the test object doesn't work because the locale is changed by the other tests that run before this one, use the initialization method provided by cppunit to change the locale instead, this is somewhat wasteful but at least it does work, unlike the old version. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66718 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
305 lines
10 KiB
C++
305 lines
10 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: tests/strings/numformat.cpp
|
|
// Purpose: wxNumberFormatter unit test
|
|
// Author: Vadim Zeitlin
|
|
// Created: 2011-01-15
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// headers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#include "testprec.h"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#include "wx/numformatter.h"
|
|
#include "wx/intl.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// test class
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class NumFormatterTestCase : public CppUnit::TestCase
|
|
{
|
|
public:
|
|
NumFormatterTestCase() { m_locale = NULL; }
|
|
|
|
virtual void setUp()
|
|
{
|
|
// We need to use a locale with known decimal point and which uses the
|
|
// thousands separator for the tests to make sense.
|
|
m_locale = new wxLocale(wxLANGUAGE_ENGLISH_UK,
|
|
wxLOCALE_DONT_LOAD_DEFAULT);
|
|
if ( !m_locale->IsOk() )
|
|
tearDown();
|
|
}
|
|
|
|
virtual void tearDown()
|
|
{
|
|
delete m_locale;
|
|
m_locale = NULL;
|
|
}
|
|
|
|
private:
|
|
CPPUNIT_TEST_SUITE( NumFormatterTestCase );
|
|
CPPUNIT_TEST( LongToString );
|
|
#ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
CPPUNIT_TEST( LongLongToString );
|
|
#endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
CPPUNIT_TEST( DoubleToString );
|
|
CPPUNIT_TEST( NoTrailingZeroes );
|
|
CPPUNIT_TEST( LongFromString );
|
|
#ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
CPPUNIT_TEST( LongLongFromString );
|
|
#endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
CPPUNIT_TEST( DoubleFromString );
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
void LongToString();
|
|
#ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
void LongLongToString();
|
|
#endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
void DoubleToString();
|
|
void NoTrailingZeroes();
|
|
void LongFromString();
|
|
#ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
void LongLongFromString();
|
|
#endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
void DoubleFromString();
|
|
|
|
wxLocale *m_locale;
|
|
|
|
wxDECLARE_NO_COPY_CLASS(NumFormatterTestCase);
|
|
};
|
|
|
|
// register in the unnamed registry so that these tests are run by default
|
|
CPPUNIT_TEST_SUITE_REGISTRATION( NumFormatterTestCase );
|
|
|
|
// also include in it's own registry so that these tests can be run alone
|
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( NumFormatterTestCase, "NumFormatterTestCase" );
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// tests themselves
|
|
// ----------------------------------------------------------------------------
|
|
|
|
void NumFormatterTestCase::LongToString()
|
|
{
|
|
if ( !m_locale )
|
|
return;
|
|
|
|
CPPUNIT_ASSERT_EQUAL( "1", wxNumberFormatter::ToString( 1L));
|
|
CPPUNIT_ASSERT_EQUAL( "12", wxNumberFormatter::ToString( 12L));
|
|
CPPUNIT_ASSERT_EQUAL( "123", wxNumberFormatter::ToString( 123L));
|
|
CPPUNIT_ASSERT_EQUAL( "1,234", wxNumberFormatter::ToString( 1234L));
|
|
CPPUNIT_ASSERT_EQUAL( "12,345", wxNumberFormatter::ToString( 12345L));
|
|
CPPUNIT_ASSERT_EQUAL( "123,456", wxNumberFormatter::ToString( 123456L));
|
|
CPPUNIT_ASSERT_EQUAL( "1,234,567", wxNumberFormatter::ToString( 1234567L));
|
|
CPPUNIT_ASSERT_EQUAL( "12,345,678", wxNumberFormatter::ToString( 12345678L));
|
|
CPPUNIT_ASSERT_EQUAL("123,456,789", wxNumberFormatter::ToString( 123456789L));
|
|
}
|
|
|
|
#ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
|
|
void NumFormatterTestCase::LongLongToString()
|
|
{
|
|
if ( !m_locale )
|
|
return;
|
|
|
|
CPPUNIT_ASSERT_EQUAL( "1", wxNumberFormatter::ToString(wxLL( 1)));
|
|
CPPUNIT_ASSERT_EQUAL( "12", wxNumberFormatter::ToString(wxLL( 12)));
|
|
CPPUNIT_ASSERT_EQUAL( "123", wxNumberFormatter::ToString(wxLL( 123)));
|
|
CPPUNIT_ASSERT_EQUAL( "1,234", wxNumberFormatter::ToString(wxLL( 1234)));
|
|
CPPUNIT_ASSERT_EQUAL( "12,345", wxNumberFormatter::ToString(wxLL( 12345)));
|
|
CPPUNIT_ASSERT_EQUAL( "123,456", wxNumberFormatter::ToString(wxLL( 123456)));
|
|
CPPUNIT_ASSERT_EQUAL( "1,234,567", wxNumberFormatter::ToString(wxLL( 1234567)));
|
|
CPPUNIT_ASSERT_EQUAL( "12,345,678", wxNumberFormatter::ToString(wxLL( 12345678)));
|
|
CPPUNIT_ASSERT_EQUAL("123,456,789", wxNumberFormatter::ToString(wxLL( 123456789)));
|
|
}
|
|
|
|
#endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
|
|
void NumFormatterTestCase::DoubleToString()
|
|
{
|
|
if ( !m_locale )
|
|
return;
|
|
|
|
CPPUNIT_ASSERT_EQUAL("1.0", wxNumberFormatter::ToString(1., 1));
|
|
CPPUNIT_ASSERT_EQUAL("0.123456", wxNumberFormatter::ToString(0.123456, 6));
|
|
CPPUNIT_ASSERT_EQUAL("1.234567", wxNumberFormatter::ToString(1.234567, 6));
|
|
CPPUNIT_ASSERT_EQUAL("12.34567", wxNumberFormatter::ToString(12.34567, 5));
|
|
CPPUNIT_ASSERT_EQUAL("123.4567", wxNumberFormatter::ToString(123.4567, 4));
|
|
CPPUNIT_ASSERT_EQUAL("1,234.56", wxNumberFormatter::ToString(1234.56, 2));
|
|
CPPUNIT_ASSERT_EQUAL("12,345.6", wxNumberFormatter::ToString(12345.6, 1));
|
|
CPPUNIT_ASSERT_EQUAL("12,345.6", wxNumberFormatter::ToString(12345.6, 1));
|
|
CPPUNIT_ASSERT_EQUAL("123,456,789.0",
|
|
wxNumberFormatter::ToString(123456789., 1));
|
|
CPPUNIT_ASSERT_EQUAL("123,456,789.012",
|
|
wxNumberFormatter::ToString(123456789.012, 3));
|
|
}
|
|
|
|
void NumFormatterTestCase::NoTrailingZeroes()
|
|
{
|
|
WX_ASSERT_FAILS_WITH_ASSERT
|
|
(
|
|
wxNumberFormatter::ToString(123L, wxNumberFormatter::Style_NoTrailingZeroes)
|
|
);
|
|
|
|
if ( !m_locale )
|
|
return;
|
|
|
|
CPPUNIT_ASSERT_EQUAL
|
|
(
|
|
"123.000",
|
|
wxNumberFormatter::ToString(123., 3)
|
|
);
|
|
|
|
CPPUNIT_ASSERT_EQUAL
|
|
(
|
|
"123",
|
|
wxNumberFormatter::ToString(123., 3, wxNumberFormatter::Style_NoTrailingZeroes)
|
|
);
|
|
|
|
CPPUNIT_ASSERT_EQUAL
|
|
(
|
|
"123",
|
|
wxNumberFormatter::ToString(123., 9, wxNumberFormatter::Style_NoTrailingZeroes)
|
|
);
|
|
|
|
CPPUNIT_ASSERT_EQUAL
|
|
(
|
|
"123.456",
|
|
wxNumberFormatter::ToString(123.456, 3, wxNumberFormatter::Style_NoTrailingZeroes)
|
|
);
|
|
|
|
CPPUNIT_ASSERT_EQUAL
|
|
(
|
|
"123.456000000",
|
|
wxNumberFormatter::ToString(123.456, 9)
|
|
);
|
|
|
|
CPPUNIT_ASSERT_EQUAL
|
|
(
|
|
"123.456",
|
|
wxNumberFormatter::ToString(123.456, 9, wxNumberFormatter::Style_NoTrailingZeroes)
|
|
);
|
|
}
|
|
|
|
void NumFormatterTestCase::LongFromString()
|
|
{
|
|
if ( !m_locale )
|
|
return;
|
|
|
|
WX_ASSERT_FAILS_WITH_ASSERT
|
|
(
|
|
wxNumberFormatter::FromString("123", static_cast<long *>(0))
|
|
);
|
|
|
|
long l;
|
|
CPPUNIT_ASSERT( !wxNumberFormatter::FromString("", &l) );
|
|
CPPUNIT_ASSERT( !wxNumberFormatter::FromString("foo", &l) );
|
|
CPPUNIT_ASSERT( !wxNumberFormatter::FromString("1.234", &l) );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("123", &l) );
|
|
CPPUNIT_ASSERT_EQUAL( 123, l );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("1234", &l) );
|
|
CPPUNIT_ASSERT_EQUAL( 1234, l );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234", &l) );
|
|
CPPUNIT_ASSERT_EQUAL( 1234, l );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345", &l) );
|
|
CPPUNIT_ASSERT_EQUAL( 12345, l );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456", &l) );
|
|
CPPUNIT_ASSERT_EQUAL( 123456, l );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234,567", &l) );
|
|
CPPUNIT_ASSERT_EQUAL( 1234567, l );
|
|
}
|
|
|
|
#ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
|
|
void NumFormatterTestCase::LongLongFromString()
|
|
{
|
|
if ( !m_locale )
|
|
return;
|
|
|
|
WX_ASSERT_FAILS_WITH_ASSERT
|
|
(
|
|
wxNumberFormatter::FromString("123", static_cast<wxLongLong_t *>(0))
|
|
);
|
|
|
|
wxLongLong_t l;
|
|
CPPUNIT_ASSERT( !wxNumberFormatter::FromString("", &l) );
|
|
CPPUNIT_ASSERT( !wxNumberFormatter::FromString("foo", &l) );
|
|
CPPUNIT_ASSERT( !wxNumberFormatter::FromString("1.234", &l) );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("123", &l) );
|
|
CPPUNIT_ASSERT_EQUAL( 123, l );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("1234", &l) );
|
|
CPPUNIT_ASSERT_EQUAL( 1234, l );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234", &l) );
|
|
CPPUNIT_ASSERT_EQUAL( 1234, l );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345", &l) );
|
|
CPPUNIT_ASSERT_EQUAL( 12345, l );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456", &l) );
|
|
CPPUNIT_ASSERT_EQUAL( 123456, l );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234,567", &l) );
|
|
CPPUNIT_ASSERT_EQUAL( 1234567, l );
|
|
}
|
|
|
|
#endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
|
|
void NumFormatterTestCase::DoubleFromString()
|
|
{
|
|
if ( !m_locale )
|
|
return;
|
|
|
|
WX_ASSERT_FAILS_WITH_ASSERT
|
|
(
|
|
wxNumberFormatter::FromString("123", static_cast<double *>(0))
|
|
);
|
|
|
|
double d;
|
|
CPPUNIT_ASSERT( !wxNumberFormatter::FromString("", &d) );
|
|
CPPUNIT_ASSERT( !wxNumberFormatter::FromString("bar", &d) );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("123", &d) );
|
|
CPPUNIT_ASSERT_EQUAL( 123., d );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("123.456789012", &d) );
|
|
CPPUNIT_ASSERT_EQUAL( 123.456789012, d );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234.56789012", &d) );
|
|
CPPUNIT_ASSERT_EQUAL( 1234.56789012, d );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345.6789012", &d) );
|
|
CPPUNIT_ASSERT_EQUAL( 12345.6789012, d );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456.789012", &d) );
|
|
CPPUNIT_ASSERT_EQUAL( 123456.789012, d );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("1,234,567.89012", &d) );
|
|
CPPUNIT_ASSERT_EQUAL( 1234567.89012, d );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("12,345,678.9012", &d) );
|
|
CPPUNIT_ASSERT_EQUAL( 12345678.9012, d );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("123,456,789.012", &d) );
|
|
CPPUNIT_ASSERT_EQUAL( 123456789.012, d );
|
|
|
|
CPPUNIT_ASSERT( wxNumberFormatter::FromString("123456789.012", &d) );
|
|
CPPUNIT_ASSERT_EQUAL( 123456789.012, d );
|
|
}
|