Show More
@@ -1,5 +1,7 b'' | |||||
1 | from IPython.utils.dir2 import dir2 |
|
1 | from IPython.utils.dir2 import dir2 | |
2 |
|
2 | |||
|
3 | import pytest | |||
|
4 | ||||
3 |
|
5 | |||
4 | class Base(object): |
|
6 | class Base(object): | |
5 | x = 1 |
|
7 | x = 1 | |
@@ -35,24 +37,31 b' def test_SubClass_with_trait_names_attr():' | |||||
35 | trait_names = 44 |
|
37 | trait_names = 44 | |
36 |
|
38 | |||
37 | res = dir2(SubClass()) |
|
39 | res = dir2(SubClass()) | |
38 |
assert |
|
40 | assert "trait_names" in res | |
39 |
|
41 | |||
40 |
|
42 | |||
41 | def test_misbehaving_object_without_trait_names(): |
|
43 | def test_misbehaving_object_without_trait_names(): | |
42 | # dir2 shouldn't raise even when objects are dumb and raise |
|
44 | # dir2 shouldn't raise even when objects are dumb and raise | |
43 | # something other than AttribteErrors on bad getattr. |
|
45 | # something other than AttribteErrors on bad getattr. | |
44 |
|
46 | |||
45 |
class MisbehavingGetattr |
|
47 | class MisbehavingGetattr: | |
46 | def __getattr__(self): |
|
48 | def __getattr__(self, attr): | |
47 | raise KeyError("I should be caught") |
|
49 | raise KeyError("I should be caught") | |
48 |
|
50 | |||
49 | def some_method(self): |
|
51 | def some_method(self): | |
50 |
|
|
52 | return True | |
51 |
|
53 | |||
52 | class SillierWithDir(MisbehavingGetattr): |
|
54 | class SillierWithDir(MisbehavingGetattr): | |
53 | def __dir__(self): |
|
55 | def __dir__(self): | |
54 | return ['some_method'] |
|
56 | return ['some_method'] | |
55 |
|
57 | |||
56 | for bad_klass in (MisbehavingGetattr, SillierWithDir): |
|
58 | for bad_klass in (MisbehavingGetattr, SillierWithDir): | |
57 |
|
|
59 | obj = bad_klass() | |
58 | assert('some_method' in res) |
|
60 | ||
|
61 | assert obj.some_method() | |||
|
62 | ||||
|
63 | with pytest.raises(KeyError): | |||
|
64 | obj.other_method() | |||
|
65 | ||||
|
66 | res = dir2(obj) | |||
|
67 | assert "some_method" in res |
General Comments 0
You need to be logged in to leave comments.
Login now