/////////////////////////////////////////////////////////////////////////////// // Name: tests/html/htmlparser.cpp // Purpose: wxHtmlParser tests // Author: Vadim Zeitlin // Created: 2011-01-13 // Copyright: (c) 2011 Vadim Zeitlin /////////////////////////////////////////////////////////////////////////////// // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- #include "testprec.h" #if wxUSE_HTML #ifndef WX_PRECOMP #include "wx/dcmemory.h" #endif // WX_PRECOMP #include "wx/html/winpars.h" #include "wx/scopedptr.h" // Test that parsing invalid HTML simply fails but doesn't crash for example. TEST_CASE("wxHtmlParser::ParseInvalid", "[html][parser][error]") { class NullParser : public wxHtmlWinParser { protected: virtual void AddText(const wxString& WXUNUSED(txt)) wxOVERRIDE { } }; NullParser p; wxMemoryDC dc; p.SetDC(&dc); delete p.Parse("<"); delete p.Parse(" const top(new wxHtmlContainerCell(NULL)); wxHtmlContainerCell* const cont = new wxHtmlContainerCell(NULL); wxHtmlCell* const cell1 = new wxHtmlWordCell("Hello", dc); wxHtmlCell* const cell2 = new wxHtmlColourCell(*wxRED); wxHtmlCell* const cell3 = new wxHtmlWordCell("world", dc); cont->InsertCell(cell1); cont->InsertCell(cell2); cont->InsertCell(cell3); top->InsertCell(cont); SECTION("container") { top->Detach(cont); CHECK( top->GetFirstChild() == NULL ); delete cont; } SECTION("first-child") { cont->Detach(cell1); CHECK( cont->GetFirstChild() == cell2 ); delete cell1; } SECTION("middle-child") { cont->Detach(cell2); CHECK( cont->GetFirstChild() == cell1 ); CHECK( cell1->GetNext() == cell3 ); delete cell2; } SECTION("last-child") { cont->Detach(cell3); CHECK( cont->GetFirstChild() == cell1 ); CHECK( cell1->GetNext() == cell2 ); CHECK( cell2->GetNext() == NULL ); delete cell3; } SECTION("invalid") { WX_ASSERT_FAILS_WITH_ASSERT_MESSAGE ( "Expected assertion for detaching non-child", top->Detach(cell1); ); } } #endif //wxUSE_HTML