add wxURL::GetInputStream test unit; add a global IsNetworkAvailable() utility to the test units

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60851 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Francesco Montorsi
2009-06-01 11:30:50 +00:00
parent 255c07b4df
commit 1f51673bb8
4 changed files with 161 additions and 44 deletions

View File

@@ -7,6 +7,10 @@
// Licence: wxWidgets licence // Licence: wxWidgets licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx/wx.h" // For compilers that support precompilation, includes "wx/wx.h"
// and "wx/cppunit.h" // and "wx/cppunit.h"
#include "testprec.h" #include "testprec.h"
@@ -45,12 +49,19 @@
#include "wx/osx/private.h" #include "wx/osx/private.h"
#endif #endif
#include "wx/socket.h"
using namespace std; using namespace std;
using CppUnit::Test; using CppUnit::Test;
using CppUnit::TestSuite; using CppUnit::TestSuite;
using CppUnit::TestFactoryRegistry; using CppUnit::TestFactoryRegistry;
// ----------------------------------------------------------------------------
// helper classes
// ----------------------------------------------------------------------------
// exception class for MSVC debug CRT assertion failures // exception class for MSVC debug CRT assertion failures
#ifdef wxUSE_VC_CRTDBG #ifdef wxUSE_VC_CRTDBG
@@ -79,7 +90,7 @@ static string GetExceptionMessage()
{ {
msg << "wxWidgets assert: " << e.m_cond << " failed " msg << "wxWidgets assert: " << e.m_cond << " failed "
"at " << e.m_file << ":" << e.m_line << " in " << e.m_func "at " << e.m_file << ":" << e.m_line << " in " << e.m_func
<< " with message " << e.m_msg; << " with message '" << e.m_msg << "'";
} }
#endif // wxDEBUG_LEVEL #endif // wxDEBUG_LEVEL
#ifdef wxUSE_VC_CRTDBG #ifdef wxUSE_VC_CRTDBG
@@ -244,6 +255,11 @@ private:
IMPLEMENT_APP_NO_MAIN(TestApp) IMPLEMENT_APP_NO_MAIN(TestApp)
// ----------------------------------------------------------------------------
// global functions
// ----------------------------------------------------------------------------
#ifdef wxUSE_VC_CRTDBG #ifdef wxUSE_VC_CRTDBG
static int TestCrtReportHook(int reportType, char *message, int *) static int TestCrtReportHook(int reportType, char *message, int *)
@@ -295,6 +311,63 @@ int main(int argc, char **argv)
return -1; return -1;
} }
extern void SetFilterEventFunc(FilterEventFunc func)
{
wxGetApp().SetFilterEventFunc(func);
}
extern void SetProcessEventFunc(ProcessEventFunc func)
{
wxGetApp().SetProcessEventFunc(func);
}
extern bool IsNetworkAvailable()
{
// NOTE: we could use wxDialUpManager here if it was in wxNet; since it's in
// wxCore we use a simple rough test:
wxSocketBase::Initialize();
wxIPV4address addr;
if (!addr.Hostname("www.google.com") || !addr.Service("www"))
{
wxSocketBase::Shutdown();
return false;
}
wxSocketClient sock;
bool online = sock.Connect(addr);
wxSocketBase::Shutdown();
return online;
}
// helper of OnRun(): gets the test with the given name, returning NULL (and
// not an empty test suite) if there is no such test
static Test *GetTestByName(const wxString& name)
{
Test *
test = TestFactoryRegistry::getRegistry(string(name.mb_str())).makeTest();
if ( test )
{
TestSuite * const suite = dynamic_cast<TestSuite *>(test);
if ( !suite || !suite->countTestCases() )
{
// it's a bogus test, don't use it
delete test;
test = NULL;
}
}
return test;
}
// ----------------------------------------------------------------------------
// TestApp
// ----------------------------------------------------------------------------
TestApp::TestApp() TestApp::TestApp()
: m_list(false), : m_list(false),
m_longlist(false) m_longlist(false)
@@ -406,36 +479,6 @@ bool TestApp::ProcessEvent(wxEvent& event)
return TestAppBase::ProcessEvent(event); return TestAppBase::ProcessEvent(event);
} }
extern void SetFilterEventFunc(FilterEventFunc func)
{
wxGetApp().SetFilterEventFunc(func);
}
extern void SetProcessEventFunc(ProcessEventFunc func)
{
wxGetApp().SetProcessEventFunc(func);
}
// helper of OnRun(): gets the test with the given name, returning NULL (and
// not an empty test suite) if there is no such test
static Test *GetTestByName(const wxString& name)
{
Test *
test = TestFactoryRegistry::getRegistry(string(name.mb_str())).makeTest();
if ( test )
{
TestSuite * const suite = dynamic_cast<TestSuite *>(test);
if ( !suite || !suite->countTestCases() )
{
// it's a bogus test, don't use it
delete test;
test = NULL;
}
}
return test;
}
// Run // Run
// //
int TestApp::OnRun() int TestApp::OnRun()

View File

@@ -59,3 +59,5 @@ typedef bool (*ProcessEventFunc)(wxEvent&);
extern void SetFilterEventFunc(FilterEventFunc func); extern void SetFilterEventFunc(FilterEventFunc func);
extern void SetProcessEventFunc(ProcessEventFunc func); extern void SetProcessEventFunc(ProcessEventFunc func);
extern bool IsNetworkAvailable();

View File

@@ -27,11 +27,6 @@
// Test wxURL & wxURI compat? // Test wxURL & wxURI compat?
#define TEST_URL wxUSE_URL #define TEST_URL wxUSE_URL
// Define this as 1 to test network connections, this is disabled by default as
// some machines running automatic builds don't allow outgoing connections and
// so the tests fail
#define TEST_NETWORK 0
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// test class // test class
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -373,14 +368,7 @@ void URITestCase::URLCompat()
{ {
wxURL url("http://user:password@wxwidgets.org"); wxURL url("http://user:password@wxwidgets.org");
CPPUNIT_ASSERT(url.GetError() == wxURL_NOERR); CPPUNIT_ASSERT( url.GetError() == wxURL_NOERR );
#if TEST_NETWORK
wxInputStream* pInput = url.GetInputStream();
CPPUNIT_ASSERT( pInput != NULL );
#endif
CPPUNIT_ASSERT( url == wxURL("http://user:password@wxwidgets.org") ); CPPUNIT_ASSERT( url == wxURL("http://user:password@wxwidgets.org") );
wxURI uri("http://user:password@wxwidgets.org"); wxURI uri("http://user:password@wxwidgets.org");

84
tests/uris/url.cpp Normal file
View File

@@ -0,0 +1,84 @@
///////////////////////////////////////////////////////////////////////////////
// Name: tests/uris/url.cpp
// Purpose: wxURL unit test
// Author: Francesco Montorsi
// Created: 2009-5-31
// RCS-ID: $Id: uris.cpp 58272 2009-01-21 17:02:11Z VZ $
// Copyright: (c) 2009 Francesco Montorsi
///////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "testprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif // WX_PRECOMP
#include "wx/url.h"
#include "wx/mstream.h"
// ----------------------------------------------------------------------------
// test class
// ----------------------------------------------------------------------------
class URLTestCase : public CppUnit::TestCase
{
public:
URLTestCase();
~URLTestCase();
private:
CPPUNIT_TEST_SUITE( URLTestCase );
CPPUNIT_TEST( GetInputStream );
CPPUNIT_TEST_SUITE_END();
void GetInputStream();
DECLARE_NO_COPY_CLASS(URLTestCase)
};
// register in the unnamed registry so that these tests are run by default
CPPUNIT_TEST_SUITE_REGISTRATION( URLTestCase );
// also include in it's own registry so that these tests can be run alone
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( URLTestCase, "URLTestCase" );
URLTestCase::URLTestCase()
{
wxSocketBase::Initialize();
}
URLTestCase::~URLTestCase()
{
wxSocketBase::Shutdown();
}
void URLTestCase::GetInputStream()
{
if (!IsNetworkAvailable()) // implemented in test.cpp
{
wxLogWarning("No network connectivity; skipping the URLTestCase::GetInputStream test unit.");
return;
}
wxURL url("http://wxwidgets.org/logo9.jpg");
CPPUNIT_ASSERT_EQUAL(wxURL_NOERR, url.GetError());
wxInputStream *in_stream = url.GetInputStream();
CPPUNIT_ASSERT(in_stream && in_stream->IsOk());
wxMemoryOutputStream ostream;
CPPUNIT_ASSERT(in_stream->Read(ostream).GetLastError() == wxSTREAM_EOF);
// wx logo image currently is 13219 bytes
CPPUNIT_ASSERT(ostream.GetSize() == 13219);
}