6d93e28adf
Comparisons didn't work correctly in the other direction as they were not reversed as needed. Fix this by adding wxDEFINE_COMPARISON_REV() macro which defines comparisons in terms of the reverse operations and use it for both wxUniChar and wxUniCharRef. Closes #14547. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72268 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
289 lines
8.4 KiB
C++
289 lines
8.4 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: tests/strings/unichar.cpp
|
|
// Purpose: Test for wxUniChar class
|
|
// Author: Vaclav Slavik
|
|
// Created: 2007-03-11
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) 2007 REA Elektronik GmbH
|
|
// Licence: wxWindows licence
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// headers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#include "testprec.h"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/wx.h"
|
|
#endif // WX_PRECOMP
|
|
|
|
#include "wx/string.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// test class
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class UniCharTestCase : public CppUnit::TestCase
|
|
{
|
|
public:
|
|
UniCharTestCase() {}
|
|
|
|
private:
|
|
CPPUNIT_TEST_SUITE( UniCharTestCase );
|
|
CPPUNIT_TEST( CharCompare );
|
|
CPPUNIT_TEST( CharCompareIntl );
|
|
CPPUNIT_TEST( StringCompare );
|
|
#if wxUSE_UNICODE
|
|
CPPUNIT_TEST( StringCompareIntl );
|
|
#endif // wxUSE_UNICODE
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
void CharCompare();
|
|
void CharCompareIntl();
|
|
void StringCompare();
|
|
void StringCompareIntl();
|
|
|
|
DECLARE_NO_COPY_CLASS(UniCharTestCase)
|
|
};
|
|
|
|
// register in the unnamed registry so that these tests are run by default
|
|
CPPUNIT_TEST_SUITE_REGISTRATION( UniCharTestCase );
|
|
|
|
// also include in its own registry so that these tests can be run alone
|
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( UniCharTestCase, "UniCharTestCase" );
|
|
|
|
void UniCharTestCase::CharCompare()
|
|
{
|
|
wxUniChar a('a');
|
|
wxUniChar b('b');
|
|
|
|
CPPUNIT_ASSERT( a == a );
|
|
CPPUNIT_ASSERT( a == 'a' );
|
|
CPPUNIT_ASSERT( a == wxT('a') );
|
|
CPPUNIT_ASSERT( a == wxUniChar('a') );
|
|
CPPUNIT_ASSERT( a == wxUniChar(wxT('a')) );
|
|
|
|
CPPUNIT_ASSERT( a == a );
|
|
CPPUNIT_ASSERT( 'a' == a );
|
|
CPPUNIT_ASSERT( wxT('a') == a );
|
|
CPPUNIT_ASSERT( wxUniChar('a') == a );
|
|
CPPUNIT_ASSERT( wxUniChar(wxT('a')) == a );
|
|
|
|
CPPUNIT_ASSERT( a != b );
|
|
CPPUNIT_ASSERT( a != 'b' );
|
|
CPPUNIT_ASSERT( a != wxT('b') );
|
|
CPPUNIT_ASSERT( a != wxUniChar('b') );
|
|
CPPUNIT_ASSERT( a != wxUniChar(wxT('b')) );
|
|
|
|
CPPUNIT_ASSERT( b != a );
|
|
CPPUNIT_ASSERT( 'b' != a );
|
|
CPPUNIT_ASSERT( wxT('b') != a );
|
|
CPPUNIT_ASSERT( wxUniChar('b') != a );
|
|
CPPUNIT_ASSERT( wxUniChar(wxT('b')) != a );
|
|
|
|
CPPUNIT_ASSERT( a < b );
|
|
CPPUNIT_ASSERT( a < 'b' );
|
|
CPPUNIT_ASSERT( a < wxT('b') );
|
|
CPPUNIT_ASSERT( a < wxUniChar('b') );
|
|
CPPUNIT_ASSERT( a < wxUniChar(wxT('b')) );
|
|
|
|
CPPUNIT_ASSERT( b > a );
|
|
CPPUNIT_ASSERT( 'b' > a );
|
|
CPPUNIT_ASSERT( wxT('b') > a );
|
|
CPPUNIT_ASSERT( wxUniChar('b') > a );
|
|
CPPUNIT_ASSERT( wxUniChar(wxT('b')) > a );
|
|
|
|
CPPUNIT_ASSERT( a <= b );
|
|
CPPUNIT_ASSERT( a <= 'b' );
|
|
CPPUNIT_ASSERT( a <= wxT('b') );
|
|
CPPUNIT_ASSERT( a <= wxUniChar('b') );
|
|
CPPUNIT_ASSERT( a <= wxUniChar(wxT('b')) );
|
|
|
|
CPPUNIT_ASSERT( b >= a );
|
|
CPPUNIT_ASSERT( 'b' >= a );
|
|
CPPUNIT_ASSERT( wxT('b') >= a );
|
|
CPPUNIT_ASSERT( wxUniChar('b') >= a );
|
|
CPPUNIT_ASSERT( wxUniChar(wxT('b')) >= a );
|
|
|
|
CPPUNIT_ASSERT( a <= a );
|
|
CPPUNIT_ASSERT( a <= 'a' );
|
|
CPPUNIT_ASSERT( a <= wxT('a') );
|
|
CPPUNIT_ASSERT( a <= wxUniChar('a') );
|
|
CPPUNIT_ASSERT( a <= wxUniChar(wxT('a')) );
|
|
|
|
CPPUNIT_ASSERT( a >= a );
|
|
CPPUNIT_ASSERT( 'a' >= a );
|
|
CPPUNIT_ASSERT( wxT('a') >= a );
|
|
CPPUNIT_ASSERT( wxUniChar('a') >= a );
|
|
CPPUNIT_ASSERT( wxUniChar(wxT('a')) >= a );
|
|
|
|
CPPUNIT_ASSERT( b > a );
|
|
CPPUNIT_ASSERT( b > 'a' );
|
|
CPPUNIT_ASSERT( b > wxT('a') );
|
|
CPPUNIT_ASSERT( b > wxUniChar('a') );
|
|
CPPUNIT_ASSERT( b > wxUniChar(wxT('a')) );
|
|
|
|
CPPUNIT_ASSERT( a < b );
|
|
CPPUNIT_ASSERT( 'a' < b );
|
|
CPPUNIT_ASSERT( wxT('a') < b );
|
|
CPPUNIT_ASSERT( wxUniChar('a') < b );
|
|
CPPUNIT_ASSERT( wxUniChar(wxT('a')) < b );
|
|
|
|
CPPUNIT_ASSERT( b >= a );
|
|
CPPUNIT_ASSERT( b >= 'a' );
|
|
CPPUNIT_ASSERT( b >= wxT('a') );
|
|
CPPUNIT_ASSERT( b >= wxUniChar('a') );
|
|
CPPUNIT_ASSERT( b >= wxUniChar(wxT('a')) );
|
|
|
|
CPPUNIT_ASSERT( a <= b );
|
|
CPPUNIT_ASSERT( 'a' <= b );
|
|
CPPUNIT_ASSERT( wxT('a') <= b );
|
|
CPPUNIT_ASSERT( wxUniChar('a') <= b );
|
|
CPPUNIT_ASSERT( wxUniChar(wxT('a')) <= b );
|
|
|
|
CPPUNIT_ASSERT( b >= b );
|
|
CPPUNIT_ASSERT( b >= 'b' );
|
|
CPPUNIT_ASSERT( b >= wxT('b') );
|
|
CPPUNIT_ASSERT( b >= wxUniChar('b') );
|
|
CPPUNIT_ASSERT( b >= wxUniChar(wxT('b')) );
|
|
|
|
CPPUNIT_ASSERT( b <= b );
|
|
CPPUNIT_ASSERT( 'b' <= b );
|
|
CPPUNIT_ASSERT( wxT('b') <= b );
|
|
CPPUNIT_ASSERT( wxUniChar('b') <= b );
|
|
CPPUNIT_ASSERT( wxUniChar(wxT('b')) <= b );
|
|
|
|
CPPUNIT_ASSERT( b - a == 1 );
|
|
CPPUNIT_ASSERT( a - b == -1 );
|
|
}
|
|
|
|
|
|
#define CYRILLIC_SMALL_LETTER_YU ((wchar_t)0x044E)
|
|
#define ARABIC_LETTER_NOON ((wchar_t)0x0646)
|
|
|
|
void UniCharTestCase::CharCompareIntl()
|
|
{
|
|
wxUniChar a(CYRILLIC_SMALL_LETTER_YU);
|
|
wxUniChar b(ARABIC_LETTER_NOON);
|
|
|
|
CPPUNIT_ASSERT( a == a );
|
|
CPPUNIT_ASSERT( a == CYRILLIC_SMALL_LETTER_YU );
|
|
CPPUNIT_ASSERT( a == wxUniChar(CYRILLIC_SMALL_LETTER_YU) );
|
|
|
|
CPPUNIT_ASSERT( a != b );
|
|
CPPUNIT_ASSERT( a != ARABIC_LETTER_NOON );
|
|
CPPUNIT_ASSERT( a != wxUniChar(ARABIC_LETTER_NOON) );
|
|
|
|
CPPUNIT_ASSERT( a < b );
|
|
CPPUNIT_ASSERT( a < ARABIC_LETTER_NOON );
|
|
CPPUNIT_ASSERT( a < wxUniChar(ARABIC_LETTER_NOON) );
|
|
|
|
CPPUNIT_ASSERT( a <= b );
|
|
CPPUNIT_ASSERT( a <= ARABIC_LETTER_NOON );
|
|
CPPUNIT_ASSERT( a <= wxUniChar(ARABIC_LETTER_NOON) );
|
|
|
|
CPPUNIT_ASSERT( a <= a );
|
|
CPPUNIT_ASSERT( a <= CYRILLIC_SMALL_LETTER_YU );
|
|
CPPUNIT_ASSERT( a <= wxUniChar(CYRILLIC_SMALL_LETTER_YU) );
|
|
|
|
CPPUNIT_ASSERT( b > a );
|
|
CPPUNIT_ASSERT( b > CYRILLIC_SMALL_LETTER_YU );
|
|
CPPUNIT_ASSERT( b > wxUniChar(CYRILLIC_SMALL_LETTER_YU) );
|
|
|
|
CPPUNIT_ASSERT( b >= a );
|
|
CPPUNIT_ASSERT( b >= CYRILLIC_SMALL_LETTER_YU );
|
|
CPPUNIT_ASSERT( b >= wxUniChar(CYRILLIC_SMALL_LETTER_YU) );
|
|
|
|
CPPUNIT_ASSERT( b >= b );
|
|
CPPUNIT_ASSERT( b >= ARABIC_LETTER_NOON );
|
|
CPPUNIT_ASSERT( b >= wxUniChar(ARABIC_LETTER_NOON) );
|
|
|
|
CPPUNIT_ASSERT( b - a == 504 );
|
|
CPPUNIT_ASSERT( a - b == -504 );
|
|
}
|
|
|
|
void UniCharTestCase::StringCompare()
|
|
{
|
|
// test string comparison with chars
|
|
wxString sa = "a";
|
|
const wxString sb = "b";
|
|
char c1 = 'a';
|
|
wchar_t c2 = wxT('a');
|
|
wxUniChar c3 = 'a';
|
|
|
|
CPPUNIT_ASSERT( sa == 'a');
|
|
CPPUNIT_ASSERT( 'a' == sa);
|
|
CPPUNIT_ASSERT( sb != 'a');
|
|
CPPUNIT_ASSERT( 'a' != sb);
|
|
|
|
CPPUNIT_ASSERT( sa == c1);
|
|
CPPUNIT_ASSERT( c1 == sa);
|
|
CPPUNIT_ASSERT( sb != c1);
|
|
CPPUNIT_ASSERT( c1 != sb);
|
|
|
|
CPPUNIT_ASSERT( sa == c2);
|
|
CPPUNIT_ASSERT( c2 == sa);
|
|
CPPUNIT_ASSERT( sb != c2);
|
|
CPPUNIT_ASSERT( c2 != sb);
|
|
|
|
CPPUNIT_ASSERT( sa == c3);
|
|
CPPUNIT_ASSERT( c3 == sa);
|
|
CPPUNIT_ASSERT( sb != c3);
|
|
CPPUNIT_ASSERT( c3 != sb);
|
|
|
|
// test wxUniCharRef:
|
|
CPPUNIT_ASSERT( sa == sa[0]);
|
|
CPPUNIT_ASSERT( sa[0] == sa);
|
|
CPPUNIT_ASSERT( sb != sa[0]);
|
|
CPPUNIT_ASSERT( sa[0] != sb);
|
|
|
|
// test const version of operator[] (returns wxUniChar, not wxUniCharRef):
|
|
CPPUNIT_ASSERT( sb == sb[0]);
|
|
CPPUNIT_ASSERT( sb[0] == sb);
|
|
CPPUNIT_ASSERT( sa != sb[0]);
|
|
CPPUNIT_ASSERT( sb[0] != sa);
|
|
}
|
|
|
|
#if wxUSE_UNICODE
|
|
void UniCharTestCase::StringCompareIntl()
|
|
{
|
|
// test string comparison with chars
|
|
wxString sa = CYRILLIC_SMALL_LETTER_YU;
|
|
const wxString sb = ARABIC_LETTER_NOON;
|
|
wchar_t c2 = CYRILLIC_SMALL_LETTER_YU;
|
|
wxUniChar c3 = CYRILLIC_SMALL_LETTER_YU;
|
|
|
|
CPPUNIT_ASSERT( sa == CYRILLIC_SMALL_LETTER_YU);
|
|
CPPUNIT_ASSERT( CYRILLIC_SMALL_LETTER_YU == sa);
|
|
CPPUNIT_ASSERT( sb != CYRILLIC_SMALL_LETTER_YU);
|
|
CPPUNIT_ASSERT( CYRILLIC_SMALL_LETTER_YU != sb);
|
|
|
|
CPPUNIT_ASSERT( sa == c2);
|
|
CPPUNIT_ASSERT( c2 == sa);
|
|
CPPUNIT_ASSERT( sb != c2);
|
|
CPPUNIT_ASSERT( c2 != sb);
|
|
|
|
CPPUNIT_ASSERT( sa == c3);
|
|
CPPUNIT_ASSERT( c3 == sa);
|
|
CPPUNIT_ASSERT( sb != c3);
|
|
CPPUNIT_ASSERT( c3 != sb);
|
|
|
|
// test wxUniCharRef:
|
|
CPPUNIT_ASSERT( sa == sa[0]);
|
|
CPPUNIT_ASSERT( sa[0] == sa);
|
|
CPPUNIT_ASSERT( sb != sa[0]);
|
|
CPPUNIT_ASSERT( sa[0] != sb);
|
|
|
|
// test const version of operator[] (returns wxUniChar, not wxUniCharRef):
|
|
CPPUNIT_ASSERT( sb == sb[0]);
|
|
CPPUNIT_ASSERT( sb[0] == sb);
|
|
CPPUNIT_ASSERT( sa != sb[0]);
|
|
CPPUNIT_ASSERT( sb[0] != sa);
|
|
}
|
|
#endif // wxUSE_UNICODE
|