[pypy-svn] r16737 - in pypy/release/0.7.x/pypy/module/__builtin__: . test

arigo at codespeak.net arigo at codespeak.net
Sat Aug 27 12:59:53 CEST 2005


Author: arigo
Date: Sat Aug 27 12:59:51 2005
New Revision: 16737

Modified:
   pypy/release/0.7.x/pypy/module/__builtin__/app_inspect.py
   pypy/release/0.7.x/pypy/module/__builtin__/test/test_builtin.py
Log:
Another corner case and fix for CPython's test_builtin.


Modified: pypy/release/0.7.x/pypy/module/__builtin__/app_inspect.py
==============================================================================
--- pypy/release/0.7.x/pypy/module/__builtin__/app_inspect.py	(original)
+++ pypy/release/0.7.x/pypy/module/__builtin__/app_inspect.py	Sat Aug 27 12:59:51 2005
@@ -106,6 +106,8 @@
                         % len(args))
     if len(args) == 0:
         local_names = _caller_locals().keys() # 2 stackframes away
+        if not isinstance(local_names, list):
+            raise TypeError("expected locals().keys() to be a list")
         local_names.sort()
         return local_names
 
@@ -116,6 +118,8 @@
     if isinstance(obj, types.ModuleType):
         try:
             result = obj.__dict__.keys()
+            if not isinstance(result, list):
+                raise TypeError("expected __dict__.keys() to be a list")
             result.sort()
             return result
         except AttributeError:

Modified: pypy/release/0.7.x/pypy/module/__builtin__/test/test_builtin.py
==============================================================================
--- pypy/release/0.7.x/pypy/module/__builtin__/test/test_builtin.py	(original)
+++ pypy/release/0.7.x/pypy/module/__builtin__/test/test_builtin.py	Sat Aug 27 12:59:51 2005
@@ -58,6 +58,14 @@
             b = 67
         assert nosp(dir(X)) == ['a', 'b', 'c']
 
+    def test_dir_in_broken_locals(self):
+        class C:
+            def __getitem__(self, item):
+                raise KeyError(item)
+            def keys(self):
+                return 'a'    # not a list!
+        raises(TypeError, eval, "dir()", {}, C())
+
     def test_vars(self):
         def f():
             return vars()



More information about the Pypy-commit mailing list