/////////////////////////////////////////////////////////////////////////////// // 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 #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/dcmemory.h" #endif // WX_PRECOMP #include "wx/html/winpars.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 { public: virtual wxObject *GetProduct() wxOVERRIDE { return NULL; } protected: virtual void AddText(const wxString& WXUNUSED(txt)) wxOVERRIDE { } }; NullParser p; wxMemoryDC dc; p.SetDC(&dc); p.Parse("<"); p.Parse("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