97 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.2 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"
 | 
						|
 | 
						|
#ifndef WX_PRECOMP
 | 
						|
    #include "wx/log.h"
 | 
						|
#endif // WX_PRECOMP
 | 
						|
 | 
						|
#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
 |