mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			129 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#! /usr/bin/env python
 | 
						|
"""Test script for the anydbm module
 | 
						|
   based on testdumbdbm.py
 | 
						|
"""
 | 
						|
 | 
						|
import os
 | 
						|
import unittest
 | 
						|
import anydbm
 | 
						|
import glob
 | 
						|
from test import test_support
 | 
						|
 | 
						|
_fname = test_support.TESTFN
 | 
						|
 | 
						|
_all_modules = []
 | 
						|
 | 
						|
for _name in anydbm._names:
 | 
						|
    try:
 | 
						|
        _module = __import__(_name)
 | 
						|
    except ImportError:
 | 
						|
        continue
 | 
						|
    _all_modules.append(_module)
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# Iterates over every database module supported by anydbm
 | 
						|
# currently available, setting anydbm to use each in turn,
 | 
						|
# and yielding that module
 | 
						|
#
 | 
						|
def dbm_iterator():
 | 
						|
    old_default = anydbm._defaultmod
 | 
						|
    for module in _all_modules:
 | 
						|
        anydbm._defaultmod = module
 | 
						|
        yield module
 | 
						|
    anydbm._defaultmod = old_default
 | 
						|
 | 
						|
#
 | 
						|
# Clean up all scratch databases we might have created
 | 
						|
# during testing
 | 
						|
#
 | 
						|
def delete_files():
 | 
						|
    # we don't know the precise name the underlying database uses
 | 
						|
    # so we use glob to locate all names
 | 
						|
    for f in glob.glob(_fname + "*"):
 | 
						|
        try:
 | 
						|
            os.unlink(f)
 | 
						|
        except OSError:
 | 
						|
            pass
 | 
						|
 | 
						|
class AnyDBMTestCase(unittest.TestCase):
 | 
						|
    _dict = {'0': b'',
 | 
						|
             'a': b'Python:',
 | 
						|
             'b': b'Programming',
 | 
						|
             'c': b'the',
 | 
						|
             'd': b'way',
 | 
						|
             'f': b'Guido',
 | 
						|
             'g': b'intended',
 | 
						|
             }
 | 
						|
 | 
						|
    def __init__(self, *args):
 | 
						|
        unittest.TestCase.__init__(self, *args)
 | 
						|
 | 
						|
    def test_anydbm_creation(self):
 | 
						|
        f = anydbm.open(_fname, 'c')
 | 
						|
        self.assertEqual(list(f.keys()), [])
 | 
						|
        for key in self._dict:
 | 
						|
            f[key.encode("ascii")] = self._dict[key]
 | 
						|
        self.read_helper(f)
 | 
						|
        f.close()
 | 
						|
 | 
						|
    def test_anydbm_modification(self):
 | 
						|
        self.init_db()
 | 
						|
        f = anydbm.open(_fname, 'c')
 | 
						|
        self._dict['g'] = f[b'g'] = b"indented"
 | 
						|
        self.read_helper(f)
 | 
						|
        f.close()
 | 
						|
 | 
						|
    def test_anydbm_read(self):
 | 
						|
        self.init_db()
 | 
						|
        f = anydbm.open(_fname, 'r')
 | 
						|
        self.read_helper(f)
 | 
						|
        f.close()
 | 
						|
 | 
						|
    def test_anydbm_keys(self):
 | 
						|
        self.init_db()
 | 
						|
        f = anydbm.open(_fname, 'r')
 | 
						|
        keys = self.keys_helper(f)
 | 
						|
        f.close()
 | 
						|
 | 
						|
    def test_anydbm_access(self):
 | 
						|
        self.init_db()
 | 
						|
        f = anydbm.open(_fname, 'r')
 | 
						|
        key = "a".encode("ascii")
 | 
						|
        assert(key in f)
 | 
						|
        assert(f[key] == b"Python:")
 | 
						|
        f.close()
 | 
						|
 | 
						|
    def read_helper(self, f):
 | 
						|
        keys = self.keys_helper(f)
 | 
						|
        for key in self._dict:
 | 
						|
            self.assertEqual(self._dict[key], f[key.encode("ascii")])
 | 
						|
 | 
						|
    def init_db(self):
 | 
						|
        f = anydbm.open(_fname, 'n')
 | 
						|
        for k in self._dict:
 | 
						|
            f[k.encode("ascii")] = self._dict[k]
 | 
						|
        f.close()
 | 
						|
 | 
						|
    def keys_helper(self, f):
 | 
						|
        keys = sorted(k.decode("ascii") for k in f.keys())
 | 
						|
        dkeys = sorted(self._dict.keys())
 | 
						|
        self.assertEqual(keys, dkeys)
 | 
						|
        return keys
 | 
						|
 | 
						|
    def tearDown(self):
 | 
						|
        delete_files()
 | 
						|
 | 
						|
    def setUp(self):
 | 
						|
        delete_files()
 | 
						|
 | 
						|
 | 
						|
def test_main():
 | 
						|
    try:
 | 
						|
        for module in dbm_iterator():
 | 
						|
            test_support.run_unittest(AnyDBMTestCase)
 | 
						|
    finally:
 | 
						|
        delete_files()
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    test_main()
 |