]> granicus.if.org Git - python/commitdiff
Remove the winreg module from the project. I don't believe any
authorTim Peters <tim.peters@gmail.com>
Mon, 21 Aug 2000 02:27:22 +0000 (02:27 +0000)
committerTim Peters <tim.peters@gmail.com>
Mon, 21 Aug 2000 02:27:22 +0000 (02:27 +0000)
docs changes are needed (only reference to winreg I could find
was in libwinreg.tex, which is documenting _winreg, and merely
mentions that a higher-level winreg module *may* appear someday;
that's still true).

Lib/plat-win/winreg.py [deleted file]
Lib/test/output/test_winreg2 [deleted file]
Lib/test/test_winreg2.py [deleted file]

diff --git a/Lib/plat-win/winreg.py b/Lib/plat-win/winreg.py
deleted file mode 100644 (file)
index 8da70e9..0000000
+++ /dev/null
@@ -1,386 +0,0 @@
-"""
-Windows registry support.
-
-openKey( keyname ) 
-    open existing key object
-
->>> key=openKey( r"HKLM\HARDWARE\DESCRIPTION\System" )
-
-createKey( keyname ) 
-    create a key if it doesn't already exist
-
->>> key=createKey( r"HKLM\SOFTWARE\Python\Test" )
-
-deleteKey( keyname ) 
-    delete a key if it exists
-    Note: deleteKey may not be recursive on all platforms.
-
->>> key=deleteKey( r"HKLM\SOFTWARE\Python\Test" )
-
-RemoteKey( machine, top_level_key ): 
-    open a key on another machine.
-    You can use the returned key as a basis for opens, creates and deletes
-    on the other machine.
-
->>> key=RemoteKey( "somemachine", "HKLM" )
-
-For information on the key API, open a key and look at its docstring.
-
-
-"""
-
-import _winreg
-import sys
-import exceptions
-import array
-from types import *
-import string
-
-class RegType:
-    "Represents one of the types that can go into the registry"
-    def __init__( self, msname, friendlyname ):
-        self.msname=msname
-        self.friendlyname=friendlyname
-        self.intval=getattr( _winreg, msname )
-
-    def __repr__( self ):
-        "Return a useful representation of the type object"
-        return "<RegType %d: %s %s>" % \
-                        (self.intval, self.msname, self.friendlyname )
-
-_typeConstants={ 
-    _winreg.REG_NONE: 
-        RegType( "REG_NONE", "None" ),
-    _winreg.REG_SZ: 
-        RegType( "REG_SZ", "String" ),
-    _winreg.REG_EXPAND_SZ: 
-        RegType("REG_EXPAND_SZ", "Expandable Template String" ),
-    _winreg.REG_BINARY: 
-        RegType("REG_BINARY", "Binary Data"),
-    _winreg.REG_DWORD : 
-        RegType("REG_DWORD", "Integer" ),
-#    _winreg.REG_DWORD_LITTLE_ENDIAN : 
-#        RegType("REG_DWORD_LITTLE_ENDIAN", "Integer"),
-    _winreg.REG_DWORD_BIG_ENDIAN : 
-        RegType("REG_DWORD_BIG_ENDIAN", "Big Endian Integer"),
-    _winreg.REG_LINK : 
-        RegType("REG_LINK", "Link"),
-    _winreg.REG_MULTI_SZ : 
-        RegType("REG_MULTI_SZ", "List of Strings"),
-    _winreg.REG_RESOURCE_LIST : 
-        RegType("REG_RESOURCE_LIST", "Resource List"),
-    _winreg.REG_FULL_RESOURCE_DESCRIPTOR : 
-        RegType( "REG_FULL_RESOURCE_DESCRIPTOR", 
-                                            "Full Resource Descriptor" ),
-    _winreg.REG_RESOURCE_REQUIREMENTS_LIST: 
-        RegType( "REG_RESOURCE_REQUIREMENTS_LIST", 
-                                            "Resource Requirements List" )
-}
-
-regtypes={}
-for constant in _typeConstants.values():
-    regtypes[constant.msname]=constant
-
-class _DictBase:
-    "Base class for dictionary-type objects"
-    def __init__( self, key ):
-        self.key=key
-
-    def clear( self ):
-        "Clear the list of keys/data values, as in dictionaries"
-        keys=list( self.keys() )
-        map( self.__delitem__, keys )
-
-    def get( self, item, defaultVal=None ):
-        "Get a key/value by name or index"
-        try:
-            return self.__getitem__( item )
-        except (IndexError, EnvironmentError, WindowsError):
-            return defaultVal
-
-    def has_key( self, item ):
-        "Check if a key/data value with a particular name exists"
-        try:
-            self.__getitem__( item )
-            return 1
-        except (IndexError, EnvironmentError, WindowsError):
-            return 0
-
-    def keys( self ):
-        "Get a list of key/data value names"
-        keys=[] 
-        try:
-            for i in xrange( 0, sys.maxint ):
-                keyname = self._nameFromNum( i  )
-                keys.append( keyname )
-        except (IndexError, EnvironmentError, WindowsError):
-            pass
-        return keys
-
-    def values( self ):
-        "Get a list of key objects or data values"
-        values=[]  # map() doesn't use the IndexError semantics...
-        for i in self:
-            values.append( i )
-        return values
-
-    def items( self ):
-        "Get pairs of keyname/key object or valuename/value data"
-        return map( None, self.keys(), self.values() )
-
-    def __len__( self ):
-        return len( self.keys() )
-
-def _getName( item, nameFromNum ):
-    "Helper function -- don't use it directly"
-    if type( item ) == IntType:
-        try:
-            keyname = nameFromNum( item )
-        except (WindowsError, EnvironmentError):
-            raise IndexError, item
-
-    elif type( item ) in [StringType, UnicodeType]: 
-        keyname=item
-    else:
-        raise exceptions.TypeError, \
-                "Requires integer index or string key name" 
-    return keyname
-
-
-class RegValuesDict( _DictBase ):
-    "A dictionary of registry data values"
-    def _nameFromNum( self, i ):
-        return self.key._nameFromNum( i )
-
-    def __getitem__( self, item ):
-        return self.key.getValueNameDataAndType( item )
-
-    def __setitem__( self, name, val):
-        if type( val )==TupleType:
-            data, datatype=val
-            assert isinstance( datatype, RegType )
-            self.key.setValue( name, data, datatype )
-        else:
-            self.key.setValue( name, val )
-
-    def __delitem__( self, item ):
-        valname=_getName( item, self._nameFromNum )
-        self.key.deleteValue( valname )
-    
-class RegKeysDict( _DictBase ):
-    "A dictionary of registry keys"
-    def _nameFromNum( self, item ):
-        return _winreg.EnumKey( self.key.handle, item )
-
-    def __getitem__( self, item ):
-        keyname=_getName( item, self._nameFromNum )
-        return self.key.openSubkey( keyname )
-
-    def __delitem__( self, item ):
-        keyname=_getName( item, self._nameFromNum )
-        self.key.deleteSubkey( keyname )
-
-def openKey( keyname, samFlags=None ):
-    "Open a key by name"
-    lst=string.split( keyname, "\\", 1 )
-    if len( lst )==2:
-        hivename,path=lst
-        return hives[hivename].openSubkey( path )
-    else:
-        hivename=lst[0]
-        return hives[hivename]
-
-def createKey( keyname ):
-    lst=string.split( keyname, "\\", 1 )
-    assert len( lst )==2
-    hivename,path=lst
-    return hives[hivename].createSubkey( path )
-
-def deleteKey( keyname ):
-    lst=string.split( keyname, "\\", 1 )
-    assert len( lst )==2
-    hivename,path=lst
-    return hives[hivename].deleteSubkey( path )
-
-
-class RegKey:
-    "A registry key object"
-
-    def __init__( self, name, handle=None ):
-        self.name=name
-        self.handle=handle
-
-    def _nameFromNum( self, item ):
-        "internal"
-        (name,data,datatype)=_winreg.EnumValue( self.handle, item )
-        return name
-
-    def __nonzero__(self):
-        "Is the key open?"
-        if self.handle:
-            return 1
-        else:
-            return 0
-
-    def __cmp__ (self, other ):
-        "Compare two keys for equality"
-        if hasattr( other, "handle" ) and hasattr( other, "name" ):
-            return cmp( self.name, other.name )
-        else:
-            return cmp( self.handle, other )
-
-    def __repr__( self ):
-        return "<Windows RegKey: %s>"% self.name
-
-    def close(self ):
-        "Close the key"
-        return _winreg.CloseKey( self.handle )
-
-    def getSubkeyNames( self ):
-        "Get a list of subkey names"
-        return self.getSubkeys().keys()
-
-    def getValueNames( self ):
-        "Get a list of value names"
-        return self.getValues().keys()
-
-    def deleteSubkey( self, subkey ):
-        "Delete a subkey by name"
-        return _winreg.DeleteKey( self.handle, subkey )
-        
-    def deleteValue( self, valname ):
-        "Delete a value by name"
-        return _winreg.DeleteValue( self.handle, valname )
-
-    def createSubkey( self, keyname ):
-        "Create a subkey by name"
-        handle=_winreg.CreateKey( self.handle, keyname )
-        return RegKey( self.name+"\\"+keyname, handle)
-
-    def openSubkey( self, keyname, samFlags=None ):
-        "Open a named subkey"
-        if samFlags:
-            handle=_winreg.OpenKey( self.handle, keyname, 0, samFlags )
-        else:
-            handle=_winreg.OpenKey( self.handle, keyname, 0 )
-        return RegKey( self.name+"\\"+keyname, handle )
-
-    def getSubkeys( self ):
-        "Get a dictionary-like mapping of subkeys"
-        return RegKeysDict( self )
-
-    def getValues( self ):
-        "Get a dictionary-like mapping of data values"
-        return RegValuesDict( self )
-
-    def getValueNameDataAndType( self, valname ):
-        "Get a data value's name, data and type all at one time"
-        try:
-            if type( valname )==IntType:
-                (valname,data,datatype)=_winreg.EnumValue( self.handle, valname )
-            else:
-                keyname=_getName( valname, self._nameFromNum )
-                (data,datatype)=_winreg.QueryValueEx( self.handle, keyname )
-        except (WindowsError, EnvironmentError):
-            raise IndexError, valname
-
-        if datatype==_winreg.REG_BINARY:
-            # use arrays for binary data
-            data=array.array( 'c', data )
-
-        return (valname, data, _typeConstants[datatype] )
-
-    def getValueData( self, valname ):
-        "Get a data value's data."
-        name, data, type=self.getValueNameDataAndType( valname )
-        return data
-
-    def setValue( self, valname, data, regtype=None ):
-        "Set a data value's data (and optionally type)"
-        if regtype:
-            typeint=regtype.intval
-        else:
-            if type( data ) in [StringType, UnicodeType]:
-                typeint=_winreg.REG_SZ
-            elif type( data )==ListType:
-                 # XXX - _winreg currently only supports lists
-                 # Also, probably should check each element is
-                 # string/unicode.
-                 typeint = _winreg.REG_MULTI_SZ
-            elif type( data )==IntType:
-                typeint=_winreg.REG_DWORD
-            elif type( data )==array.ArrayType:
-                typeint=_winreg.REG_BINARY
-        _winreg.SetValueEx( self.handle, valname, 0, typeint, data )
-
-    def flush(self ):
-        "Make sure that all changes are written to the registry. "
-        "Only use this if you know what you are doing. "
-        "It isn't usually needed."
-        _winreg.FlushKey( self.keyobbj )
-
-    def save( self, filename ):
-        "Save a key to a filename"
-        _winreg.SaveKey( self.keyobj, filename )
-
-    def load( self, subkey, filename ):
-        "Load a key from a filename"
-        return _winreg.RegLoadKey( self.handle, subkey, filename )
-
-
-class RemoteKey( RegKey ):
-    "Open a key on a remote machine"
-    def __init__( self, machine, topLevelKey ):
-        assert topLevelKey in _hivenames 
-        self.handle =  _winreg.ConnectRegistry( machine, parentKey )
-        self.name=r"\\%s\%s" % (machine, topLevelKey )
-
-_hivenames = ["HKEY_CLASSES_ROOT","HKEY_CURRENT_USER","HKEY_LOCAL_MACHINE",
-                "HKEY_USERS","HKEY_CURRENT_CONFIG","HKEY_DYN_DATA",
-                "HKEY_PERFORMANCE_DATA"]
-hives={}
-for name in _hivenames:
-    hives[name]=RegKey( name, getattr( _winreg, name ) )
-hives["HKLM"]=hives["HKEY_LOCAL_MACHINE"]
-hives["HKCR"]=hives["HKEY_CLASSES_ROOT"]
-hives["HKCU"]=hives["HKEY_CURRENT_USER"]
-
-_flagnames = ["KEY_ALL_ACCESS","KEY_CREATE_LINK", "KEY_CREATE_SUB_KEY",
-             "KEY_ENUMERATE_SUB_KEYS", "KEY_EXECUTE", "KEY_NOTIFY", 
-             "KEY_QUERY_VALUE", "KEY_READ", "KEY_SET_VALUE"]
-flags={}
-for name in _flagnames:
-    flags[name]=getattr( _winreg, name )
-
-_RegNotifyChangeKeyValueOptions=[ "REG_NOTIFY_CHANGE_ATTRIBUTES",
-            "REG_NOTIFY_CHANGE_SECURITY", "REG_NOTIFY_CHANGE_LAST_SET",
-            "REG_NOTIFY_CHANGE_NAME", "REG_LEGAL_CHANGE_FILTER" ]
-
-_RegRestoreKeyOptions=["REG_WHOLE_HIVE_VOLATILE", 
-    "REG_NO_LAZY_FLUSH",
-    "REG_OPTION_VOLATILE",
-    "REG_REFRESH_HIVE",
-    "REG_OPTION_NON_VOLATILE",
-    "REG_OPTION_BACKUP_RESTORE" ]
-
-_RegCreateKeyExOptions=[
-    "REG_LEGAL_OPTION",
-    "REG_OPTION_RESERVED",
-    "REG_OPTION_VOLATILE",
-    "REG_OPTION_NON_VOLATILE",
-    "REG_OPTION_BACKUP_RESTORE",
-    "REG_CREATED_NEW_KEY",
-    "REG_OPENED_EXISTING_KEY",
-    "REG_OPTION_CREATE_LINK"]
-
-
-#unusednames=_RegNotifyChangeKeyValueOptions+_RegRestoreKeyOptions+_RegCreateKeyExOptions
-
-#typeConstantNames=map( lambda x: x.msname, typeConstants.values() )
-
-#allnames=_hivenames+_flagnames+typeConstantNames+unusednames
-#winregnames=_winreg.__dict__.keys()
-#for name in winregnames:
-#    if name not in allnames:
-#        print name
-
diff --git a/Lib/test/output/test_winreg2 b/Lib/test/output/test_winreg2
deleted file mode 100644 (file)
index 712d110..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-test_winreg2
-Test Passed: testKeyDict_Values
-Test Passed: testKeyDict_Items
-Test Passed: testGetValueNames
-Test Passed: testSetDwordBigEndian
-Test Passed: testGetSubkeyNames
-Test Passed: testResourceRequirementsListType
-Test Passed: testLoad
-Test Passed: testDeleteKey
-Test Passed: testValueDict_Length
-Test Passed: testResourceDescriptionType
-Test Passed: testSetMultiSz
-Test Passed: testSetFullResourceDescription
-HKEY_CLASSES_ROOT
-HKEY_CURRENT_USER
-HKEY_LOCAL_MACHINE
-HKEY_USERS
-HKEY_CURRENT_CONFIG
-HKEY_DYN_DATA
-HKEY_PERFORMANCE_DATA
-Test Passed: testHives
-Test Passed: testDWordType
-Test Passed: testRemote
-Test Passed: testKeyDict_DelItem
-Test Passed: testSetIntValue
-Test Passed: testResourceLinkType
-Test Passed: testNoneType
-Test Passed: testValueDict_Map
-Test Passed: testSetResourceList
-Test Passed: testKeyDict_Length
-Test Passed: testKeyDict_ClearKeys
-Test Passed: testDWordBigEndianType
-Test Passed: testOpen
-Test Passed: testSetBinaryData
-Test Passed: testGetValueNameDataAndType
-Test Passed: testSetBinaryValue
-Test Passed: testSetResourceRequirementsList
-Test Passed: testUnicodeValueName
-Test Passed: testGetValueDataFromEnum
-Test Passed: testValueDict_Get
-Test Passed: testValueDict_GetItem
-Test Passed: testValueDict_Keys
-Test Passed: testKeyDict_HasKey
-Test Passed: testExpandStringType
-Test Passed: testValueDict_HasKey
-Test Passed: testCreateKey
-Test Passed: testGetBinaryData
-Test Passed: testKeyDict_Get
-Test Passed: testSave
-Test Passed: testValueDict_ClearKeys
-Test Passed: testCmp
-Test Passed: testLinkType
-Test Passed: testSetExpandString
-Test Passed: testKeyDict_GetItem
-Test Passed: testRepr
-Test Passed: testClose
-Test Passed: testSetLink
-Test Passed: testGetValueDataFromName
-Test Passed: testUnicodeKeyName
-Test Passed: testShortcuts
-Test Passed: testKeyDict_Map
-Test Passed: testStringType
-Test Passed: testOpenFailure
-Test Passed: testSetDword
-Test Passed: testOpenKeyWithFlags
-Test Passed: testSetNone
-Test Passed: testKeyDict_Keys
-Test Passed: testMultiStringType
-Test Passed: testSetStringValue
-Test Passed: testValueDict_Items
-Test Passed: testValueDict_DelItem
-Test Passed: testNonZero
-Test Passed: testFlush
-Test Passed: testGetSubkeys
-Test Passed: testDeleteValue
-Test Passed: testSetString
-Test Passed: testValueDict_Values
diff --git a/Lib/test/test_winreg2.py b/Lib/test/test_winreg2.py
deleted file mode 100644 (file)
index dd9229a..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-from winreg import hives, createKey, openKey, flags, deleteKey, regtypes
-import sys, traceback
-import time
-import array
-
-def testHives():
-    hivenames = ["HKEY_CLASSES_ROOT","HKEY_CURRENT_USER","HKEY_LOCAL_MACHINE",
-                "HKEY_USERS","HKEY_CURRENT_CONFIG"] #, # 
-    for hivename in hivenames:
-        hive = hives[ hivename ]
-        print hive.name
-        assert hive.handle
-        assert hive.getSubkeys()
-    for hivename in ["HKEY_DYN_DATA", "HKEY_PERFORMANCE_DATA"]:
-        hive =  hives[ hivename ]
-        print hive.name
-        assert hive.handle
-        assert not hive.getValues()
-        assert not hive.getSubkeys()
-
-def testNonZero():
-    key=hives["HKLM"].openSubkey( "SOFTWARE" )
-    assert key.openSubkey( "Microsoft" )
-    assert key
-    key.close()
-    assert not key
-    try:
-        key.openSubkey( "Microsoft" )
-        assert 0
-    except EnvironmentError:
-        pass
-
-def testCmp():
-    HKLM=hives["HKLM"]
-    assert (openKey("HKLM\\SOFTWARE")==\
-                        HKLM.openSubkey("SOFTWARE"))
-    assert not HKLM.openSubkey("SYSTEM")!=HKLM.openSubkey("SYSTEM")
-    assert HKLM.openSubkey("SOFTWARE")!=HKLM.openSubkey("SYSTEM")
-    assert not HKLM.openSubkey("SOFTWARE")==HKLM.openSubkey("SYSTEM")
-    assert not HKLM.openSubkey("SOFTWARE")=="spam"
-    assert ((HKLM.openSubkey("SOFTWARE")<"spam") !=
-                        (HKLM.openSubkey("SOFTWARE")>"spam"))
-
-def testClose(): 
-    key=hives["HKLM"].openSubkey( "SOFTWARE" )
-    assert key
-    key.close()
-    assert not key
-
-def testOpen():
-    assert openKey( r"HKLM" )
-    assert openKey( r"HKLM\HARDWARE" )
-    assert openKey( r"HKLM\HARDWARE\DESCRIPTION\System" )
-
-def testOpenFailure():
-    try:
-        print openKey( r"HKCU\Software\Python\A\B\C\D" )
-        assert 0 #
-    except EnvironmentError:
-        pass
-
-def testDeleteKey():
-    createKey( r"HKCU\Software\Python\A\B\C\D" )
-    deleteKey( r"HKCU\Software\Python\A\B\C\D" )
-    deleteKey( r"HKCU\Software\Python\A\B\C" )
-    deleteKey( r"HKCU\Software\Python\A\B" )
-    assert "A" in \
-            openKey(r"HKCU\Software\Python").getSubkeys().keys()
-    openKey( r"HKCU\Software\Python" ).deleteSubkey( r"A" )
-    assert "A" not in \
-            openKey(r"HKCU\Software\Python").getSubkeys().keys()
-
-def testDeleteValue():
-    key=createKey( r"HKCU\Software\Python\A" )
-    key.setValue( "abcde", "fghij" )
-    assert key.getValueData( "abcde" )=="fghij"
-    assert "abcde" in key.getValues().keys()
-    assert "fghij" in map( lambda x:x[1], key.getValues().values() )
-    assert "abcde" in key.getValues().keys()
-    key.deleteValue( "abcde" )
-    assert "abcde" not in key.getValues().keys()
-    assert "fghij" not in map( lambda x:x[1], key.getValues().values() )
-    deleteKey( r"HKCU\Software\Python\A" )
-
-def testCreateKey():
-    key=createKey( r"HKCU\Software\Python\A" )
-    assert openKey( r"HKCU\Software\Python").getSubkeys().has_key( "A" )
-    deleteKey( r"HKCU\Software\Python\A" )
-    assert not openKey( r"HKCU\Software\Python").getSubkeys().\
-                        has_key( "A" )
-    key=openKey( r"HKCU\Software\Python" ).createSubkey( "A" )
-
-def testOpenKeyWithFlags():
-    assert openKey( r"HKCU\Software\Python", 
-                                flags["KEY_READ"])
-    assert openKey( r"HKCU\Software\Python", 
-                                flags["KEY_ALL_ACCESS"])
-
-def testGetSubkeys():
-    keys=openKey( r"HKCU\Software" ).getSubkeys()
-    assert keys
-    index=0
-    for i in keys:
-        index=index+1
-    assert index==len( keys )
-
-def testGetValueNameDataAndType(): pass
-
-def testGetSubkeyNames():
-    subkeyNames=hives["HKLM"].getSubkeyNames()
-    assert len( subkeyNames )==len(hives["HKLM"].getSubkeys())
-    for name in subkeyNames:
-        assert type( name )==type("")
-
-def testGetValueNames(): 
-    valNames=hives["HKLM"].getValueNames()
-    assert len( valNames )==len(hives["HKLM"].getValues())
-    for name in valNames:
-        assert type( name )==type("")
-
-def testRepr():
-    assert repr(hives["HKCU"])==str(hives["HKCU"])
-
-def testSetStringValue():
-    hives["HKCU"].setValue( "Blah", "abc" )
-    assert hives["HKCU"].getValueData( "Blah" )=="abc"
-    assert hives["HKCU"].getValues().has_key( "Blah" )
-    del hives["HKCU"].getValues()[ "Blah" ]
-    assert not hives["HKCU"].getValues().has_key( "Blah" )
-
-    # Ensure Unicode works as we expect
-    hives["HKCU"].setValue( u"Blah", u"abc" )
-    assert hives["HKCU"].getValueData( "Blah" )=="abc"
-    assert hives["HKCU"].getValues().has_key( u"Blah" )
-    del hives["HKCU"].getValues()[ u"Blah" ]
-    assert not hives["HKCU"].getValues().has_key( u"Blah" )
-
-def testDeleteValue():
-    hives["HKCU"].setValue( "Blah", "abc" )
-    assert hives["HKCU"].getValues().has_key( "Blah" )
-    del hives["HKCU"].getValues()[ "Blah" ]
-    assert not hives["HKCU"].getValues().has_key( "Blah" )
-    hives["HKCU"].setValue( "Blah", "abc" )
-    hives["HKCU"].deleteValue( "Blah" )
-    assert not hives["HKCU"].getValues().has_key( "Blah" )
-
-def testKeyDict_ClearKeys():
-    createKey( "HKLM\\Software\\a\\b\\c\\d\\e" )
-    createKey( "HKLM\\Software\\a\\b\\c\\d\\f" )
-    createKey( "HKLM\\Software\\a\\b\\c\\d\\g" )
-    createKey( "HKLM\\Software\\a\\b\\c\\d\\h" )
-    createKey( "HKLM\\Software\\a\\b\\c\\d\\i" )
-    key=openKey( "HKLM\\Software\\a\\b\\c\\d" )
-    assert key.getSubkeys()
-    key.getSubkeys().clear()
-    assert not key.getSubkeys()
-    assert not openKey( "HKLM\\Software\\a\\b\\c\\d").getSubkeys()
-    deleteKey( "HKLM\\Software\\a\\b\\c\\d" )
-    deleteKey( "HKLM\\Software\\a\\b\\c" )
-    deleteKey( "HKLM\\Software\\a\\b" )
-    deleteKey( "HKLM\\Software\\a" )
-
-def testUnicodeKeyName(): pass
-
-def testUnicodeValueName(): pass
-
-def testGetValueDataFromEnum(): pass
-
-def testGetValueDataFromName(): pass
-
-def testGetBinaryData(): pass
-
-
-def testSetIntValue():
-    key=createKey( "HKLM\\Software\\a\\b")
-    key.setValue( "abcd", 5 )
-    assert key.getValueData( "abcd" )==5
-    assert key.getValues()[ "abcd" ][1]==5
-    key.deleteValue( "abcd" )
-    key.getValues()["abcd"]=5
-    assert key.getValues()[ "abcd" ][1]==5
-    key.deleteValue( "abcd" )
-    key.getValues()["abcd"]=(5,regtypes["REG_DWORD"])
-    assert key.getValues()[ "abcd" ][1]==5
-    key.deleteValue( "abcd" )
-    deleteKey( "HKLM\\Software\\a\\b")
-    deleteKey( "HKLM\\Software\\a")
-
-def testSetBinaryValue(): 
-    key=createKey( "HKLM\\Software\\a\\b")
-    key.setValue( "abcd", array.array( 'c', "PPPPPPPPPPPPPPP") )
-    key.setValue( "abcde", array.array( 'c', "PPPPPPPPPPPPPPP"), 
-                       regtypes["REG_BINARY"] )
-    assert key.getValues()["abcd"][1]==key.getValues()["abcde"][1]
-    key = None # Remove our reference.
-    deleteKey( "HKLM\\Software\\a\\b")
-    deleteKey( "HKLM\\Software\\a")
-
-def testSetNone(): pass
-
-def testSetString(): pass
-
-def testSetExpandString(): pass
-
-def testSetBinaryData(): pass
-
-def testSetDword(): pass
-
-def testSetDwordBigEndian(): pass
-
-def testSetLink(): pass
-
-def testSetMultiSz(): pass
-
-def testSetResourceList(): pass
-
-def testSetFullResourceDescription(): pass
-
-def testSetResourceRequirementsList(): pass
-
-
-
-def testFlush(): pass
-
-def testSave(): pass
-
-def testLoad(): pass
-
-
-
-
-
-def testNoneType(): pass
-
-def testStringType(): pass
-
-def testExpandStringType(): pass
-
-def testDWordType(): pass
-
-def testDWordBigEndianType(): pass
-
-def testLinkType(): pass
-
-def testMultiStringType(): pass
-
-def testResourceLinkType(): pass
-
-def testResourceDescriptionType(): pass
-
-def testResourceRequirementsListType(): pass
-
-
-def getSubkeysDict(): pass
-
-def testKeyDict_Get(): pass
-
-def testKeyDict_HasKey(): pass
-
-def testKeyDict_Keys(): pass
-
-def testKeyDict_Values(): pass
-
-def testKeyDict_Items(): pass
-
-def testKeyDict_Length(): pass
-
-def testKeyDict_Map(): pass
-
-def testKeyDict_GetItem(): pass
-
-def testKeyDict_DelItem(): pass
-
-def testRemote(): pass
-
-def testShortcuts(): pass
-
-
-
-def getValues(): pass
-
-def testValueDict_ClearKeys(): pass
-
-def testValueDict_Get(): pass
-
-def testValueDict_HasKey(): pass
-
-def testValueDict_Keys(): pass
-
-def testValueDict_Values(): pass
-
-def testValueDict_Items(): pass
-
-def testValueDict_Length(): pass
-
-def testValueDict_Map(): pass
-
-def testValueDict_GetItem(): pass
-
-def testValueDict_DelItem(): pass
-
-for name in globals().keys():
-    if name[0:4]=="test":
-        func=globals()[ name ]
-        try:
-            func()
-            print "Test Passed: %s" % name
-        except Exception, e:
-            print "Test Failed: %s" % name
-            traceback.print_exc()
-
-j=[0]*len( regtypes )
-
-k=0
-
-def test1( basekey ):
-    global k
-    for (name, data, type) in basekey.getValues():
-        j[type.intval]=j[type.intval]+1
-        if j[type.intval]==1:
-            pass
-            #print "[[%s]] %s [%s] = %s "% (type.msname, name, basekey, value)
-    keys=basekey.getSubkeys()
-    index=0
-    k=k+1
-    if(k%2500)==0:
-        dump()
-    while 1:
-        try:
-            test1( keys[index] )
-            index=index+1
-        except IndexError:
-            break
-            print "Done", basekey, index
-        except (WindowsError, EnvironmentError):
-            index=index+1
-            dumpfile.write( "Skipping %s %s"% (basekey, index))
-
-def dump(dumpfile):
-    for i in range( len( j )):
-        dumpfile.write( "%s %s\n" %( i,j[i] ))
-
-def testRecursive():
-    dumpfile=open( "foo.txt", "w" )
-    start=time.time()
-    for hive in hives.values():
-        dumpfile.write( "Hive: %s\n" % hive )
-        test1( hive )
-        dump(dumpfile)
-    print time.time()-start