@@ -93,6 +93,22 @@ def test_anydbm_modification(self):
9393 # setdefault() works as in the dict interface
9494 self .assertEqual (f .setdefault (b'xxx' , b'foo' ), b'foo' )
9595 self .assertEqual (f [b'xxx' ], b'foo' )
96+ self .assertEqual (f .setdefault (b'g' , b'bar' ), b"indented" )
97+ self .assertEqual (f [b'g' ], b"indented" )
98+ self .assertNotEqual (f [b'g' ], b'bar' )
99+ with self .assertRaises (TypeError ):
100+ f .setdefault (b'key_without_default' )
101+ with self .assertRaises (TypeError ):
102+ f .setdefault (b'g' , b'value' , b'extra' )
103+ if self .module .__name__ in ('dbm.dumb' , 'dbm.gnu' , 'dbm.ndbm' ):
104+ with self .assertRaises (TypeError ):
105+ f .setdefault (b'new_key' , 123 )
106+ f .setdefault (b'g' , 123 )
107+ if self .module .__name__ == "dbm.sqlite3" :
108+ f .setdefault (b'new_key' , 123 )
109+ self .assertEqual (f [b'new_key' ], b'123' )
110+ f .setdefault (b'g' , 123 )
111+ self .assertNotEqual (f [b'g' ], b'123' )
96112 f .close ()
97113
98114 def test_anydbm_read (self ):
@@ -105,6 +121,11 @@ def test_anydbm_read(self):
105121 self .assertIsNone (f .get (b'xxx' ))
106122 with self .assertRaises (KeyError ):
107123 f [b'xxx' ]
124+ with self .assertRaises (dbm .error ):
125+ f .setdefault (b'readonly_key' , b'readonly_value' )
126+ f .setdefault (b'a' , b'foo' )
127+ self .assertEqual (f [b'a' ], b'Python:' )
128+ self .assertNotEqual (f [b'a' ], b'foo' )
108129 f .close ()
109130
110131 def test_anydbm_keys (self ):
@@ -124,9 +145,7 @@ def test_empty_value(self):
124145 self .assertIn (b'empty' , f )
125146 self .assertEqual (f [b'empty' ], b'' )
126147 self .assertEqual (f .get (b'empty' ), b'' )
127- # setdefault raises TypeError when missing default argument
128- with self .assertRaises (TypeError ):
129- f .setdefault (b'empty' )
148+ self .assertEqual (f .setdefault (b'empty' , b'x' ), b'' )
130149 f .close ()
131150
132151 def test_anydbm_access (self ):
0 commit comments