[Python-checkins] python/dist/src/Lib/test test_builtin.py, 1.31,
1.32 test_compile.py, 1.21, 1.22
rhettinger at users.sourceforge.net
rhettinger at users.sourceforge.net
Mon Aug 2 10:30:10 CEST 2004
Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25880/Lib/test
Modified Files:
test_builtin.py test_compile.py
Log Message:
Completed the patch for Bug #215126.
* Fixes an incorrect variable in a PyDict_CheckExact.
* Allow general mapping locals arguments for the execfile() function
and exec statement.
* Add tests.
Index: test_builtin.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_builtin.py,v
retrieving revision 1.31
retrieving revision 1.32
diff -C2 -d -r1.31 -r1.32
*** test_builtin.py 6 Jul 2004 13:44:41 -0000 1.31
--- test_builtin.py 2 Aug 2004 08:30:07 -0000 1.32
***************
*** 283,286 ****
--- 283,291 ----
self.assertEqual(eval('locals()', g, m), m)
self.assertRaises(TypeError, eval, 'a', m)
+ class A:
+ "Non-mapping"
+ pass
+ m = A()
+ self.assertRaises(TypeError, eval, 'a', g, m)
# Verify that dict subclasses work as well
***************
*** 337,340 ****
--- 342,365 ----
execfile(TESTFN, globals, locals)
self.assertEqual(locals['z'], 2)
+
+ class M:
+ "Test mapping interface versus possible calls from execfile()."
+ def __init__(self):
+ self.z = 10
+ def __getitem__(self, key):
+ if key == 'z':
+ return self.z
+ raise KeyError
+ def __setitem__(self, key, value):
+ if key == 'z':
+ self.z = value
+ return
+ raise KeyError
+
+ locals = M()
+ locals['z'] = 0
+ execfile(TESTFN, globals, locals)
+ self.assertEqual(locals['z'], 2)
+
unlink(TESTFN)
self.assertRaises(TypeError, execfile)
Index: test_compile.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_compile.py,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** test_compile.py 17 Jul 2004 21:46:25 -0000 1.21
--- test_compile.py 2 Aug 2004 08:30:07 -0000 1.22
***************
*** 45,48 ****
--- 45,105 ----
pass
+ def test_exec_with_general_mapping_for_locals(self):
+
+ class M:
+ "Test mapping interface versus possible calls from eval()."
+ def __getitem__(self, key):
+ if key == 'a':
+ return 12
+ raise KeyError
+ def __setitem__(self, key, value):
+ self.results = (key, value)
+ def keys(self):
+ return list('xyz')
+
+ m = M()
+ g = globals()
+ exec 'z = a' in g, m
+ self.assertEqual(m.results, ('z', 12))
+ try:
+ exec 'z = b' in g, m
+ except NameError:
+ pass
+ else:
+ self.fail('Did not detect a KeyError')
+ exec 'z = dir()' in g, m
+ self.assertEqual(m.results, ('z', list('xyz')))
+ exec 'z = globals()' in g, m
+ self.assertEqual(m.results, ('z', g))
+ exec 'z = locals()' in g, m
+ self.assertEqual(m.results, ('z', m))
+ try:
+ exec 'z = b' in m
+ except TypeError:
+ pass
+ else:
+ self.fail('Did not validate globals as a real dict')
+
+ class A:
+ "Non-mapping"
+ pass
+ m = A()
+ try:
+ exec 'z = a' in g, m
+ except TypeError:
+ pass
+ else:
+ self.fail('Did not validate locals as a mapping')
+
+ # Verify that dict subclasses work as well
+ class D(dict):
+ def __getitem__(self, key):
+ if key == 'a':
+ return 12
+ return dict.__getitem__(self, key)
+ d = D()
+ exec 'z = a' in g, d
+ self.assertEqual(d['z'], 12)
+
def test_complex_args(self):
More information about the Python-checkins
mailing list