void ListBaseTestCase::ItemRect() { wxListCtrl* const list = GetList(); // set up for the test list->InsertColumn(0, "Column 0", wxLIST_FORMAT_LEFT, 60); list->InsertColumn(1, "Column 1", wxLIST_FORMAT_LEFT, 50); list->InsertColumn(2, "Column 2", wxLIST_FORMAT_LEFT, 40); list->InsertItem(0, "Item 0"); list->SetItem(0, 1, "first column"); list->SetItem(0, 1, "second column"); // do test wxRect r; WX_ASSERT_FAILS_WITH_ASSERT( list->GetItemRect(1, r) ); CPPUNIT_ASSERT( list->GetItemRect(0, r) ); CPPUNIT_ASSERT_EQUAL( 150, r.GetWidth() ); CPPUNIT_ASSERT( list->GetSubItemRect(0, 0, r) ); CPPUNIT_ASSERT_EQUAL( 60, r.GetWidth() ); CPPUNIT_ASSERT( list->GetSubItemRect(0, 1, r) ); CPPUNIT_ASSERT_EQUAL( 50, r.GetWidth() ); CPPUNIT_ASSERT( list->GetSubItemRect(0, 2, r) ); CPPUNIT_ASSERT_EQUAL( 40, r.GetWidth() ); WX_ASSERT_FAILS_WITH_ASSERT( list->GetSubItemRect(0, 3, r) ); //tidy up when we are finished list->ClearAll(); }
void ItemContainerTestCase::ClientData() { wxItemContainer * const container = GetContainer(); wxStringClientData* item0data = new wxStringClientData("item0data"); wxStringClientData* item1data = new wxStringClientData("item1data"); wxStringClientData* item2data = new wxStringClientData("item2data"); container->Append("item 0", item0data); CPPUNIT_ASSERT_EQUAL(static_cast<wxClientData*>(item0data), container->GetClientObject(0)); container->Append("item 1"); container->SetClientObject(1, item1data); CPPUNIT_ASSERT_EQUAL(static_cast<wxClientData*>(item1data), container->GetClientObject(1)); container->Insert("item 2", 2, item2data); CPPUNIT_ASSERT_EQUAL(static_cast<wxClientData*>(item2data), container->GetClientObject(2)); WX_ASSERT_FAILS_WITH_ASSERT( container->SetClientObject((unsigned)-1, item0data) ); WX_ASSERT_FAILS_WITH_ASSERT( container->SetClientObject(12345, item0data) ); }
void ListBaseTestCase::ItemRect() { wxListCtrl* const list = GetList(); // set up for the test list->InsertColumn(0, "Column 0", wxLIST_FORMAT_LEFT, 60); list->InsertColumn(1, "Column 1", wxLIST_FORMAT_LEFT, 50); list->InsertColumn(2, "Column 2", wxLIST_FORMAT_LEFT, 40); list->InsertItem(0, "Item 0"); list->SetItem(0, 1, "first column"); list->SetItem(0, 1, "second column"); // do test wxRect r; WX_ASSERT_FAILS_WITH_ASSERT( list->GetItemRect(1, r) ); CPPUNIT_ASSERT( list->GetItemRect(0, r) ); CPPUNIT_ASSERT_EQUAL( 150, r.GetWidth() ); CPPUNIT_ASSERT( list->GetSubItemRect(0, 0, r) ); CPPUNIT_ASSERT_EQUAL( 60, r.GetWidth() ); CPPUNIT_ASSERT( list->GetSubItemRect(0, 1, r) ); CPPUNIT_ASSERT_EQUAL( 50, r.GetWidth() ); CPPUNIT_ASSERT( list->GetSubItemRect(0, 2, r) ); CPPUNIT_ASSERT_EQUAL( 40, r.GetWidth() ); WX_ASSERT_FAILS_WITH_ASSERT( list->GetSubItemRect(0, 3, r) ); // As we have a header, the top item shouldn't be at (0, 0), but somewhere // below the header. // // Notice that we consider that the header can't be less than 10 pixels // because we don't know its exact height. CPPUNIT_ASSERT( list->GetItemRect(0, r) ); CPPUNIT_ASSERT( r.y >= 10 ); // However if we remove the header now, the item should be at (0, 0). list->SetWindowStyle(wxLC_REPORT | wxLC_NO_HEADER); CPPUNIT_ASSERT( list->GetItemRect(0, r) ); CPPUNIT_ASSERT_EQUAL( 0, r.y ); //tidy up when we are finished list->ClearAll(); }
void VsnprintfTestCase::WrongFormatStrings() { // test how wxVsnprintf() behaves with wrong format string: #if 0 // NB: the next 2 tests currently return an error but it would be nice // if they didn't (see ticket #9367) // two positionals with the same index: r = wxSnprintf(buf, MAX_TEST_LEN, wxT("%1$s %1$s"), "hello"); CPPUNIT_ASSERT(r != -1); // three positionals with the same index mixed with other pos args: r = wxSnprintf(buf, MAX_TEST_LEN, wxT("%4$d %2$f %1$s %2$s %3$d"), "hello", "world", 3, 4); CPPUNIT_ASSERT(r != -1); #endif // a missing positional arg should result in an assert WX_ASSERT_FAILS_WITH_ASSERT( wxSnprintf(buf, MAX_TEST_LEN, wxT("%1$d %3$d"), 1, 2, 3) ); // positional and non-positionals in the same format string: r = wxSnprintf(buf, MAX_TEST_LEN, wxT("%1$d %d %3$d"), 1, 2, 3); CPPUNIT_ASSERT_EQUAL(-1, r); }
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 ); }
void MiscThreadTestCase::TestThreadRun() { MyJoinableThread thread1(2); CPPUNIT_ASSERT_EQUAL( wxTHREAD_NO_ERROR, thread1.Run() ); thread1.Wait(); // wait until the thread ends // verify that running twice the same thread fails WX_ASSERT_FAILS_WITH_ASSERT( thread1.Run() ); }
void DatePickerCtrlTestCase::Value() { const wxDateTime dt(18, wxDateTime::Jul, 2011); m_datepicker->SetValue(dt); CPPUNIT_ASSERT_EQUAL( dt, m_datepicker->GetValue() ); // We don't use wxDP_ALLOWNONE currently, hence a value is required. WX_ASSERT_FAILS_WITH_ASSERT( m_datepicker->SetValue(wxDateTime()) ); }
void MiscTestCase::Assert() { AssertIfOdd(0); WX_ASSERT_FAILS_WITH_ASSERT(AssertIfOdd(1)); // doesn't fail any more wxAssertHandler_t oldHandler = wxSetAssertHandler(NULL); AssertIfOdd(17); wxSetAssertHandler(oldHandler); }
void MiscTestCase::StaticCast() { #if wxUSE_TARSTREAM wxTarEntry tarEntry; CPPUNIT_ASSERT( wxStaticCast(&tarEntry, wxArchiveEntry) ); wxArchiveEntry *entry = &tarEntry; CPPUNIT_ASSERT( wxStaticCast(entry, wxTarEntry) ); #if wxUSE_ZIPSTREAM wxZipEntry zipEntry; entry = &zipEntry; CPPUNIT_ASSERT( wxStaticCast(entry, wxZipEntry) ); WX_ASSERT_FAILS_WITH_ASSERT( IsNull(wxStaticCast(&zipEntry, wxTarEntry)) ); #endif // wxUSE_ZIPSTREAM WX_ASSERT_FAILS_WITH_ASSERT( IsNull(wxStaticCast(entry, wxTarEntry)) ); #endif // wxUSE_TARSTREAM }
void CheckBoxTestCase::InvalidStyles() { // Check that using incompatible styles doesn't work. wxDELETE( m_check ); WX_ASSERT_FAILS_WITH_ASSERT( CreateCheckBox(wxCHK_2STATE | wxCHK_3STATE) ); #if !wxDEBUG_LEVEL CPPUNIT_ASSERT( !m_check->Is3State() ); CPPUNIT_ASSERT( !m_check->Is3rdStateAllowedForUser() ); #endif wxDELETE( m_check ); WX_ASSERT_FAILS_WITH_ASSERT( CreateCheckBox(wxCHK_2STATE | wxCHK_ALLOW_3RD_STATE_FOR_USER) ); #if !wxDEBUG_LEVEL CPPUNIT_ASSERT( !m_check->Is3State() ); CPPUNIT_ASSERT( !m_check->Is3rdStateAllowedForUser() ); #endif // wxCHK_ALLOW_3RD_STATE_FOR_USER without wxCHK_3STATE doesn't work. wxDELETE( m_check ); WX_ASSERT_FAILS_WITH_ASSERT( CreateCheckBox(wxCHK_ALLOW_3RD_STATE_FOR_USER) ); }
void ItemContainerTestCase::VoidData() { wxItemContainer * const container = GetContainer(); wxString item0data("item0data"), item1data("item0data"), item2data("item0data"); void* item0 = &item0data; void* item1 = &item1data; void* item2 = &item2data; container->Append("item 0", item0); CPPUNIT_ASSERT_EQUAL(item0, container->GetClientData(0)); container->Append("item 1"); container->SetClientData(1, item1); CPPUNIT_ASSERT_EQUAL(item1, container->GetClientData(1)); container->Insert("item 2", 2, item2); CPPUNIT_ASSERT_EQUAL(item2, container->GetClientData(2)); WX_ASSERT_FAILS_WITH_ASSERT( container->SetClientData((unsigned)-1, NULL) ); WX_ASSERT_FAILS_WITH_ASSERT( container->SetClientData(12345, NULL) ); // wxMSW used to hace problems retrieving the client data of -1 from a few // standard controls, especially if the last error was set before doing it, // so test for this specially. const wxUIntPtr minus1 = static_cast<wxUIntPtr>(-1); container->Append("item -1", wxUIntToPtr(minus1)); #ifdef __WINDOWS__ ::SetLastError(ERROR_INVALID_DATA); #endif CPPUNIT_ASSERT_EQUAL( minus1, wxPtrToUInt(container->GetClientData(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::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 ); }
void MiscGUIFuncsTestCase::ParseFileDialogFilter() { wxArrayString descs, filters; CPPUNIT_ASSERT_EQUAL ( 1, wxParseCommonDialogsFilter("Image files|*.jpg;*.png", descs, filters) ); CPPUNIT_ASSERT_EQUAL( "Image files", descs[0] ); CPPUNIT_ASSERT_EQUAL( "*.jpg;*.png", filters[0] ); CPPUNIT_ASSERT_EQUAL ( 2, wxParseCommonDialogsFilter ( "All files (*.*)|*.*|Python source (*.py)|*.py", descs, filters ) ); CPPUNIT_ASSERT_EQUAL( "*.*", filters[0] ); CPPUNIT_ASSERT_EQUAL( "*.py", filters[1] ); // Test some invalid ones too. WX_ASSERT_FAILS_WITH_ASSERT ( wxParseCommonDialogsFilter ( "All files (*.*)|*.*|Python source (*.py)|*.py|", descs, filters ) ); }
void TextCtrlTestCase::DoPositionToCoordsTestWithStyle(long style) { delete m_text; CreateText(style); // Asking for invalid index should fail. WX_ASSERT_FAILS_WITH_ASSERT( m_text->PositionToCoords(1) ); // Getting position shouldn't return wxDefaultPosition except if the method // is not implemented at all in the current port. const wxPoint pos0 = m_text->PositionToCoords(0); if ( pos0 == wxDefaultPosition ) { #if defined(__WXMSW__) || defined(__WXGTK20__) CPPUNIT_FAIL( "PositionToCoords() unexpectedly failed." ); #endif return; } CPPUNIT_ASSERT(pos0.x >= 0); CPPUNIT_ASSERT(pos0.y >= 0); m_text->SetValue("Hello"); wxYield(); // Let GTK layout the control correctly. // Position of non-first character should be positive. const long posHello4 = m_text->PositionToCoords(4).x; CPPUNIT_ASSERT( posHello4 > 0 ); // Asking for position beyond the last character should succeed and return // reasonable result. CPPUNIT_ASSERT( m_text->PositionToCoords(5).x > posHello4 ); // But asking for the next position should fail. WX_ASSERT_FAILS_WITH_ASSERT( m_text->PositionToCoords(6) ); // Test getting the coordinates of the last character when it is in the // beginning of a new line to exercise MSW code which has specific logic // for it. m_text->AppendText("\n"); const wxPoint posLast = m_text->PositionToCoords(m_text->GetLastPosition()); CPPUNIT_ASSERT_EQUAL( pos0.x, posLast.x ); CPPUNIT_ASSERT( posLast.y > 0 ); // Add enough contents to the control to make sure it has a scrollbar. m_text->SetValue("First line" + wxString(50, '\n') + "Last line"); m_text->SetInsertionPoint(0); wxYield(); // Let GTK layout the control correctly. // This shouldn't change anything for the first position coordinates. CPPUNIT_ASSERT_EQUAL( pos0, m_text->PositionToCoords(0) ); // And the last one must be beyond the window boundary and so not be // visible -- but getting its coordinate should still work. CPPUNIT_ASSERT ( m_text->PositionToCoords(m_text->GetLastPosition()).y > TEXT_HEIGHT ); // Now make it scroll to the end and check that the first position now has // negative offset as its above the visible part of the window while the // last position is in its bounds. m_text->SetInsertionPointEnd(); CPPUNIT_ASSERT( m_text->PositionToCoords(0).y < 0 ); CPPUNIT_ASSERT ( m_text->PositionToCoords(m_text->GetInsertionPoint()).y <= TEXT_HEIGHT ); }
void VarArgTestCase::ArgsValidation() { void *ptr = this; int written; short int swritten; // these are valid: wxString::Format("a string(%s,%s), ptr %p, int %i", wxString(), "foo", "char* as pointer", 1); // Microsoft has helpfully disabled support for "%n" in their CRT by // default starting from VC8 and somehow even calling // _set_printf_count_output() doesn't help here, so don't use "%n" at all // with it. #if wxCHECK_VISUALC_VERSION(8) #define wxNO_PRINTF_PERCENT_N #endif // VC8+ // Similarly, many modern Linux distributions ship with g++ that uses // -D_FORTIFY_SOURCE=2 flag by default and this option prevents "%n" from // being used in a string outside of read-only memory, meaning that it // can't be used in wxString to which we (may, depending on build options) // assign it, so also disable testing of "%n" in this case lest we die with // an abort inside vswprintf(). #if defined(_FORTIFY_SOURCE) #if _FORTIFY_SOURCE >= 2 #define wxNO_PRINTF_PERCENT_N #endif #endif #ifndef wxNO_PRINTF_PERCENT_N wxString::Format("foo%i%n", 42, &written); CPPUNIT_ASSERT_EQUAL( 5, written ); #endif // but these are not: WX_ASSERT_FAILS_WITH_ASSERT( wxString::Format("%i", "foo") ); WX_ASSERT_FAILS_WITH_ASSERT( wxString::Format("%s", (void*)this) ); WX_ASSERT_FAILS_WITH_ASSERT( wxString::Format("%d", ptr) ); // we don't check wxNO_PRINTF_PERCENT_N here as these expressions should // result in an assert in our code before the CRT functions are even called WX_ASSERT_FAILS_WITH_ASSERT( wxString::Format("foo%i%n", &written) ); WX_ASSERT_FAILS_WITH_ASSERT( wxString::Format("foo%n", ptr) ); WX_ASSERT_FAILS_WITH_ASSERT( wxString::Format("foo%i%n", 42, &swritten) ); // the following test (correctly) fails at compile-time with <type_traits> #if !defined(HAVE_TYPE_TRAITS) && !defined(HAVE_TR1_TYPE_TRAITS) wxObject obj; WX_ASSERT_FAILS_WITH_ASSERT( wxString::Format("%s", obj) ); wxObject& ref = obj; WX_ASSERT_FAILS_WITH_ASSERT( wxString::Format("%s", ref) ); #endif // %c should accept integers too wxString::Format("%c", 80); wxString::Format("%c", wxChar(80) + wxChar(1)); // check size_t handling size_t len = sizeof(*this); #ifdef __WINDOWS__ wxString::Format("%Iu", len); #else wxString::Format("%zu", len); #endif }