#
# Generate scripts needed for serious testing!
#
import win32com, win32com.client.makepy
import win32com.test
import pythoncom
import sys, os

genList = [
("msword8", "{00020905-0000-0000-C000-000000000046}",1033,8,0),
]

genDir = "Generated4Test"
def GetGenPath():
    import win32api
    return os.path.join(win32api.GetFullPathName(win32com.test.__path__[0]), genDir)

def GenerateFromRegistered(fname, *loadArgs):
#       tlb = apply(pythoncom.LoadRegTypeLib, loadArgs)
    genPath = GetGenPath()
    try:
        os.stat(genPath)
    except os.error:
        os.mkdir(genPath)
    # Ensure an __init__ exists.
    open(os.path.join(genPath, "__init__.py"), "w").close()
    print fname, ": generating -",
    f = open(os.path.join(genPath, fname + ".py"), "w")
    win32com.client.makepy.GenerateFromTypeLibSpec(loadArgs, f, bQuiet = 1, bGUIProgress = 1)
    f.close()
    print "compiling -",
    fullModName = "win32com.test.%s.%s" % (genDir, fname)
    exec "import " + fullModName
    # Inject the generated module as a top level module.
    sys.modules[fname] = sys.modules[fullModName]
    print "done"


def GenerateAll():
    for args in genList:
        try:
            GenerateFromRegistered(*args)
        except KeyboardInterrupt:
            print "** Interrupted ***"
            break
        except pythoncom.com_error:
            print "** Could not generate test code for ", args[0]

def CleanAll():
    print "Cleaning generated test scripts..."
    try: # Clear exceptions!
        1/0
    except:
        pass
    genPath = GetGenPath()
    for args in genList:
        try:
            name = args[0]+".py"
            os.unlink(os.path.join(genPath, name))
        except os.error, details:
            if type(details)==type(()) and details[0]!=2:
                print "Could not deleted generated", name, details
        try:
            name = args[0]+".pyc"
            os.unlink(os.path.join(genPath, name))
        except os.error, details:
            if type(details)==type(()) and details[0]!=2:
                print "Could not deleted generated", name, details
        try:
            os.unlink(os.path.join(genPath, "__init__.py"))
        except:
            pass
        try:
            os.unlink(os.path.join(genPath, "__init__.pyc"))
        except:
            pass
    try:
        os.rmdir(genPath)
    except os.error, details:
        print "Could not delete test directory -", details

if __name__=='__main__':
    GenerateAll()
    CleanAll()
