/////////////////////////////////////////////////////////////////////////////// // Name: tests/controls/label.cpp // Purpose: wxControl and wxStaticText label tests // Author: Francesco Montorsi // Created: 2010-3-21 // Copyright: (c) 2010 Francesco Montorsi /////////////////////////////////////////////////////////////////////////////// // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- #include "testprec.h" #ifndef WX_PRECOMP #include "wx/app.h" #endif // WX_PRECOMP #include "wx/checkbox.h" #include "wx/control.h" #include "wx/scopedptr.h" #include "wx/stattext.h" #include "wx/generic/stattextg.h" namespace { const char* const ORIGINAL_LABEL = "origin label"; // The actual testing function. It will change the label of the provided // control, which is assumed to be ORIGINAL_LABEL initially. void DoTestLabel(wxControl* c) { CHECK( c->GetLabel() == ORIGINAL_LABEL ); const wxString testLabelArray[] = { "label without mnemonics and markup", "label with &mnemonic", "label with some markup", "label with some markup and &mnemonic", "label with an && (ampersand)", "label with an && (&ersand)", "", // empty label should work too }; for ( unsigned int s = 0; s < WXSIZEOF(testLabelArray); s++ ) { const wxString& l = testLabelArray[s]; // GetLabel() should always return the string passed to SetLabel() c->SetLabel(l); CHECK( c->GetLabel() == l ); // GetLabelText() should always return unescaped version of the label CHECK( c->GetLabelText() == wxControl::RemoveMnemonics(l) ); // GetLabelText() should always return the string passed to SetLabelText() c->SetLabelText(l); CHECK( c->GetLabelText() == l ); // And GetLabel() should be the escaped version of the text CHECK( l == wxControl::RemoveMnemonics(c->GetLabel()) ); } // Check that both "&" and "&" work in markup. #if wxUSE_MARKUP c->SetLabelMarkup("mnemonic in &markup"); CHECK( c->GetLabel() == "mnemonic in &markup" ); CHECK( c->GetLabelText() == "mnemonic in markup" ); c->SetLabelMarkup("mnemonic in &markup"); CHECK( c->GetLabel() == "mnemonic in &markup" ); CHECK( c->GetLabelText() == "mnemonic in markup" ); c->SetLabelMarkup("&& finally"); CHECK( c->GetLabel() == "&& finally" ); CHECK( c->GetLabelText() == "& finally" ); c->SetLabelMarkup("&& finally"); CHECK( c->GetLabel() == "&& finally" ); CHECK( c->GetLabelText() == "& finally" ); #endif // wxUSE_MARKUP } } // anonymous namespace TEST_CASE("wxControl::Label", "[wxControl][label]") { SECTION("wxStaticText") { const wxScopedPtr st(new wxStaticText(wxTheApp->GetTopWindow(), wxID_ANY, ORIGINAL_LABEL)); DoTestLabel(st.get()); } SECTION("wxStaticText/ellipsized") { const wxScopedPtr st(new wxStaticText(wxTheApp->GetTopWindow(), wxID_ANY, ORIGINAL_LABEL, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_START)); DoTestLabel(st.get()); } SECTION("wxGenericStaticText") { const wxScopedPtr gst(new wxGenericStaticText(wxTheApp->GetTopWindow(), wxID_ANY, ORIGINAL_LABEL)); DoTestLabel(gst.get()); } SECTION("wxCheckBox") { const wxScopedPtr cb(new wxCheckBox(wxTheApp->GetTopWindow(), wxID_ANY, ORIGINAL_LABEL)); DoTestLabel(cb.get()); } } TEST_CASE("wxControl::RemoveMnemonics", "[wxControl][label][mnemonics]") { CHECK( "mnemonic" == wxControl::RemoveMnemonics("&mnemonic") ); CHECK( "&mnemonic" == wxControl::RemoveMnemonics("&&mnemonic") ); CHECK( "&mnemonic" == wxControl::RemoveMnemonics("&&&mnemonic") ); } TEST_CASE("wxControl::FindAccelIndex", "[wxControl][label][mnemonics]") { CHECK( wxControl::FindAccelIndex("foo") == wxNOT_FOUND ); CHECK( wxControl::FindAccelIndex("&foo") == 0 ); CHECK( wxControl::FindAccelIndex("f&oo") == 1 ); CHECK( wxControl::FindAccelIndex("foo && bar") == wxNOT_FOUND ); CHECK( wxControl::FindAccelIndex("foo && &bar") == 6 ); }