Files
wxWidgets/tests/drawing/plugindriver.cpp
Vadim Zeitlin a4568e7c85 Add a new test checking wxGraphicsContext implementation correctness.
This test verifies that the output of wxGraphicsContext on the current system
matches the pregenerated reference output.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76164 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-03-18 19:31:21 +00:00

105 lines
3.3 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: tests/drawing/plugindriver.cpp
// Purpose: Plugin management for the drawing tests
// Author: Armel Asselin
// Created: 2014-02-28
// Copyright: (c) 2014 Ellié Computing <opensource@elliecomputing.com>
///////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "testprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/app.h"
#include "wx/font.h"
#include "wx/window.h"
#endif // WX_PRECOMP
#define _WX_CURSOR_H_BASE_
#include "drawing.h"
#if wxUSE_TEST_GC_DRAWING
#include <wx/dynlib.h>
void GraphicsContextDrawingTestCase::RunPluginsDrawingCase (
const DrawingTestCase & testCase)
{
if (!m_drawingPluginsLoaded)
{
m_drawingPluginsLoaded = true;
wxString pluginsListStr;
if (!wxGetEnv ("WX_TEST_SUITE_GC_DRAWING_PLUGINS", &pluginsListStr))
return; // no plugins
wxArrayString pluginsNameArray = wxSplit (pluginsListStr, ',', '\0');
m_drawingPlugins.resize (pluginsNameArray.size());
for (size_t idx=0; idx<pluginsNameArray.size(); ++idx)
{
PluginInfo &pluginBeingLoaded = m_drawingPlugins[idx];
pluginBeingLoaded.library = new wxDynamicLibrary;
if (!pluginBeingLoaded.library->Load (pluginsNameArray[idx]))
{
wxLogFatalError("could not load drawing plugin %s",
pluginsNameArray[idx]);
return;
}
wxDYNLIB_FUNCTION(CreateDrawingTestLifeCycleFunction,
CreateDrawingTestLifeCycle, *pluginBeingLoaded.library);
wxDYNLIB_FUNCTION(DestroyDrawingTestLifeCycleFunction,
DestroyDrawingTestLifeCycle, *pluginBeingLoaded.library);
if (!pfnCreateDrawingTestLifeCycle ||
!pfnDestroyDrawingTestLifeCycle)
{
wxLogFatalError("could not find function"
" CreateDrawingTestLifeCycle or "
"DestroyDrawingTestLifeCycle in %s", pluginsNameArray[idx]);
return;
}
pluginBeingLoaded.destroy = pfnDestroyDrawingTestLifeCycle;
pluginBeingLoaded.gcFactory = (*pfnCreateDrawingTestLifeCycle)();
if (!pluginBeingLoaded.gcFactory)
{
wxLogFatalError("failed to create life-cycle object in %s",
pluginsNameArray[idx]);
return;
}
}
}
// now execute the test case for each plugin
for (size_t idxp=0; idxp<m_drawingPlugins.size(); ++idxp)
{
RunIndividualDrawingCase (*m_drawingPlugins[idxp].gcFactory, testCase);
}
}
///////////////////////////////////////////////////////////////////////////////
// GraphicsContextDrawingTestCase::PluginInfo /////////////////////////////////
GraphicsContextDrawingTestCase::PluginInfo::PluginInfo()
: library(NULL), gcFactory(NULL), destroy(NULL) {
}
GraphicsContextDrawingTestCase::PluginInfo::~PluginInfo()
{
if (destroy && gcFactory)
(*destroy)(gcFactory);
delete library;
}
#endif // wxUSE_TEST_GC_DRAWING