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
///////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx/wx.h"
// and "wx/cppunit.h"
#include "testprec.h"
@@ -45,12 +49,19 @@
#include "wx/osx/private.h"
#endif
#include "wx/socket.h"
using namespace std;
using CppUnit::Test;
using CppUnit::TestSuite;
using CppUnit::TestFactoryRegistry;
// ----------------------------------------------------------------------------
// helper classes
// ----------------------------------------------------------------------------
// exception class for MSVC debug CRT assertion failures
#ifdef wxUSE_VC_CRTDBG
@@ -79,7 +90,7 @@ static string GetExceptionMessage()
{
msg << "wxWidgets assert: " << e.m_cond << " failed "
"at " << e.m_file << ":" << e.m_line << " in " << e.m_func
<< " with message " << e.m_msg;
<< " with message '" << e.m_msg << "'";
}
#endif // wxDEBUG_LEVEL
#ifdef wxUSE_VC_CRTDBG
@@ -244,6 +255,11 @@ private:
IMPLEMENT_APP_NO_MAIN(TestApp)
// ----------------------------------------------------------------------------
// global functions
// ----------------------------------------------------------------------------
#ifdef wxUSE_VC_CRTDBG
static int TestCrtReportHook(int reportType, char *message, int *)
@@ -295,6 +311,63 @@ int main(int argc, char **argv)
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()
: m_list(false),
m_longlist(false)
@@ -406,36 +479,6 @@ bool TestApp::ProcessEvent(wxEvent& 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
//
int TestApp::OnRun()

View File

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

View File

@@ -27,11 +27,6 @@
// Test wxURL & wxURI compat?
#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
// ----------------------------------------------------------------------------
@@ -373,14 +368,7 @@ void URITestCase::URLCompat()
{
wxURL url("http://user:password@wxwidgets.org");
CPPUNIT_ASSERT(url.GetError() == wxURL_NOERR);
#if TEST_NETWORK
wxInputStream* pInput = url.GetInputStream();
CPPUNIT_ASSERT( pInput != NULL );
#endif
CPPUNIT_ASSERT( url.GetError() == wxURL_NOERR );
CPPUNIT_ASSERT( url == wxURL("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);
}