# Configure this in order to run the testcases.
"testADOdbapiConfig.py v 2.4.0"

import os
import sys
print((sys.version))
#attempt to use the copy of adodbapi in this directory's parent
if sys.version[0] < '3': # only when running Py2.n
    cwd = os.getcwd()
    if 'P3k' not in cwd: # and not in the Python 3 test folder
        adoPath = os.path.normpath(cwd + '/../adodbapi.py')
        if os.path.exists(adoPath):
            if adoPath not in sys.path:
                sys.path.insert(1,os.path.dirname(adoPath))
import adodbapi
# testADOdbapi.py will import this same version when we return

try:
    print(adodbapi.version) # show version
except:
    print('"adodbapi.version" not present or not working.')
print(__doc__)

doAllTests = True
doAccessTest = True or doAllTests
doSqlServerTest = False or doAllTests
doMySqlTest = False or doAllTests
doPostgresTest = False # or doAllTests

try: #If mx extensions are installed, use mxDateTime
    import mx.DateTime
    doMxDateTimeTest=True
except: 
    doMxDateTimeTest=False #Requires eGenixMXExtensions
doDateTimeTest=True #Requires Python 2.3 Alpha2
    
iterateOverTimeTests = False or doAllTests

if doAccessTest:
    _accessdatasource = "test.mdb"  #set to None for automatic creation
    if not os.access(_accessdatasource,os.F_OK):
        _accessdatasource = None
    if _accessdatasource == None:
        # following setup code borrowed from pywin32 odbc test suite
        # kindly contributed by Frank Millman.
        import tempfile
        import os
        try:
            from win32com.client.gencache import EnsureDispatch
            from win32com.client import constants
            win32 = True
        except ImportError: #perhaps we are running IronPython
            win32 = False
        if not win32: #iron Python
            from System import Activator, Type
        _accessdatasource = os.path.join(tempfile.gettempdir(), "test_odbc.mdb")
        if os.path.isfile(_accessdatasource):
            os.unlink(_accessdatasource)
        # Create a brand-new database - what is the story with these?
        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
        else:
            raise RuntimeError("Can't find a DB engine")
        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()
    connStrAccess = r"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _accessdatasource
    # for ODBC connection try...
    # connStrAccess = "Driver={Microsoft Access Driver (*.mdb)};db=%s;Uid=;Pwd=;" + _accessdatasource

if doSqlServerTest:
    _computername=r".\SQLEXPRESS" #or name of computer with SQL Server
    _databasename="Northwind" #or something else
    #_username="guest"
    #_password="12345678"
    connStrSQLServer = r"Provider=SQLOLEDB.1; Integrated Security=SSPI; Initial Catalog=%s;Data Source=%s" %(_databasename, _computername)
    #connStrSQLServer = r"Provider=SQLOLEDB.1; User ID=%s; Password=%s; Initial Catalog=%s;Data Source=%s" %(_username,_password,_databasename, _computername)
    print('    ...Testing MS-SQL login...')
    try:
        s = adodbapi.connect(connStrSQLServer) #connect to server
        s.close()
    except adodbapi.DatabaseError as inst:
        print(inst.args[0])    # should be the error message
        doSqlServerTest = False

if doMySqlTest:
    import socket
    try:
        _computername = socket.gethostbyname('kf7xm.ham-radio-op.net')
    except:
        _computername = '127.0.0.1'
    _databasename='test'
    _username = 'Test'
    _password = '12345678'
    _driver="MySQL ODBC 5.1 Driver"     # or _driver="MySQL ODBC 3.51 Driver"
    connStrMySql = 'Driver={%s};Server=%s;Port=3306;Database=%s;user=%s;password=%s;Option=3;' % \
                   (_driver,_computername,_databasename,_username,_password)
    print('    ...Testing MySql login...')
    try:
        s = adodbapi.connect(connStrMySql) #connect to server
        s.close()
    except adodbapi.DatabaseError as  inst:
        print(inst.args[0])    # should be the error message
        doMySqlTest = False

if doPostgresTest:
    import socket
    try:
        _computername = socket.gethostbyname('kf7xm.ham-radio-op.net')
    except:
        _computername = '127.0.0.1'
    _databasename='test'
    _username = 'Test'
    _password = '12345678'
    _driver="PostgreSQL Unicode"
    connStrPostgres = 'Driver={%s};Server=%s;Database=%s;user=%s;password=%s;' % \
                   (_driver,_computername,_databasename,_username,_password)
    print('    ...Testing PostgreSQL login...')
    try:
        s = adodbapi.connect(connStrPostgres) #connect to server
        s.close()
    except adodbapi.DatabaseError as  inst:
        print(inst.args[0])    # should be the error message
        doPostgresTest = False
