#!/usr/bin/python2

# Configure this in order to run the testcases.

"setuptestframework.py v 2.5.0.c9"



import os

import sys

import tempfile

import shutil



try:

    OSErrors = (WindowsError, OSError)

except NameError:  # not running on Windows

    OSErrors = OSError



def maketemp():

    temphome = tempfile.gettempdir()

    tempdir = os.path.join(temphome, 'adodbapi_test')

    ## try:  ## if running simultanous test, don't erase the other thread's work

    ##    shutil.rmtree(tempdir) # kill off an old copy

    ## except: pass

    try: os.mkdir(tempdir)

    except: pass

    return tempdir



def _cleanup_function(testfolder, mdb_name):

    try: os.unlink(os.path.join(testfolder, mdb_name))

    except: pass  # mdb database not present

    try: shutil.rmtree(os.path.join(testfolder, 'adodbapi'))

    except: pass # test package not present



def getcleanupfunction():

    return _cleanup_function



def find_ado_path():

    adoName = os.path.normpath(os.getcwd() + '/../../adodbapi.py')

    adoPackage = os.path.dirname(adoName)

    return adoPackage



# make a new package directory for the test copy of ado

def makeadopackage(testfolder):

    adoName = os.path.normpath(os.getcwd() + '/../adodbapi.py')

    adoPath = os.path.dirname(adoName)

    if os.path.exists(adoName):

        newpackage = os.path.join(testfolder,'adodbapi')

        try:

            os.mkdir(newpackage)

        except OSErrors:

            print('*Note: temporary adodbapi package already exists: may be two versions running?')

        for f in os.listdir(adoPath):

            if f.endswith('.py'):

                shutil.copy(os.path.join(adoPath, f), newpackage)

        if sys.version_info >= (3,0): # only when running Py3.n

            save = sys.stdout

            sys.stdout = None

            from lib2to3.main import main  # use 2to3 to make test package

            main("lib2to3.fixes",args=['-n','-w', newpackage])

            sys.stdout = save

        return testfolder

    else:

        raise EnvironmentError('Connot find source of adodbapi to test.')



def makemdb(testfolder, mdb_name):

    # following setup code borrowed from pywin32 odbc test suite

    # kindly contributed by Frank Millman.

    import os



    _accessdatasource = os.path.join(testfolder, mdb_name)

    if not os.path.isfile(_accessdatasource):

        try:

            from win32com.client.gencache import EnsureDispatch

            from win32com.client import constants

            win32 = True

        except ImportError: #perhaps we are running IronPython

            win32 = False #iron Python

            try:

                from System import Activator, Type

            except:

                pass



        # Create a brand-new database - what is the story with these?

        dbe = None

        for suffix in (".36", ".35", ".30"):

            try:

                if win32:

                    dbe = EnsureDispatch("DAO.DBEngine" + suffix)

                else:

                    type= Type.GetTypeFromProgID("DAO.DBEngine" + suffix)

                    dbe =  Activator.CreateInstance(type)

                break

            except:

                pass

        if dbe:

            print(('    ...Creating ACCESS db at '+_accessdatasource))

            if win32:

                workspace = dbe.Workspaces(0)

                newdb = workspace.CreateDatabase(_accessdatasource,

                                                constants.dbLangGeneral,

                                                constants.dbEncrypt)

            else:

                newdb = dbe.CreateDatabase(_accessdatasource,';LANGID=0x0409;CP=1252;COUNTRY=0')

            newdb.Close()

        else:

            print(('    ...copying test ACCESS db to '+_accessdatasource))

            mdbName = os.path.normpath(os.getcwd() + '/../examples/test.mdb')

            import shutil

            shutil.copy(mdbName, _accessdatasource)



    return  _accessdatasource



if __name__ == "__main__":

    print('Setting up a Jet database for server to use for remote testing...')

    temp = maketemp()

    makemdb(temp, 'server_test.mdb')

