Skip to content

Commit

Permalink
Added test_dir2 for the dir2 (bonus) tests
Browse files Browse the repository at this point in the history
Signed-off-by: Tim Couper <drtimcouper@gmail.com>
  • Loading branch information
drtimcouper committed Mar 27, 2012
1 parent cf95840 commit e1b3c3d
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 3 deletions.
3 changes: 2 additions & 1 deletion IPython/core/completer.py
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ def attr_matches(self, text):
#io.rprint('Completer->attr_matches, txt=%r' % text) # dbg
# Another option, seems to work great. Catches things like ''.<tab>
m = re.match(r"(\S+(\.\w+)*)\.(\w*)$", text)

if m:
expr, attr = m.group(1, 3)
elif self.greedy:
Expand All @@ -345,7 +346,7 @@ def attr_matches(self, text):
expr, attr = m2.group(1,2)
else:
return []

try:
obj = eval(expr, self.namespace)
except:
Expand Down
3 changes: 1 addition & 2 deletions IPython/core/tests/test_completer.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
from IPython.external.decorators import knownfailureif
from IPython.utils.tempdir import TemporaryDirectory
from IPython.utils.generics import complete_object
from IPython.testing.globalipapp import get_ipython

#-----------------------------------------------------------------------------
# Test functions
Expand Down Expand Up @@ -241,4 +240,4 @@ def test_get__all__entries_no__all__ok():
class A(object):
pass
words = completer.get__all__entries(A())
nt.assert_equal(words, [])
nt.assert_equal(words, [])
51 changes: 51 additions & 0 deletions IPython/utils/tests/test_dir2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import nose.tools as nt
from IPython.utils.dir2 import dir2


class Base(object):
x = 1
z = 23


def test_base():
res = dir2(Base())
assert ('x' in res)
assert ('z' in res)
assert ('y' not in res)
assert ('__class__' in res)
nt.assert_equal(res.count('x'), 2) # duplicates
nt.assert_equal(res.count('__class__'), 4) # duplicates

def test_SubClass():

class SubClass(Base):
y = 2

res = dir2(SubClass())
assert ('y' in res)
nt.assert_equal(res.count('y'), 2) # duplicates,
nt.assert_equal(res.count('x'), 3) # duplicates, but fewer than above!


def test_SubClass_with_trait_names_method():

class SubClass(Base):
y = 2
def trait_names(self):
return ['t', 'umbrella']

res = dir2(SubClass())
assert('trait_names' in res)
assert('umbrella' in res)
nt.assert_equal(res.count('t'), 1)


def test_SubClass_with_trait_names_attr():
# usecase: trait_names is used in a class describing psychological classification

class SubClass(Base):
y = 2
trait_names = 44

res = dir2(SubClass())
assert('trait_names' in res)

0 comments on commit e1b3c3d

Please sign in to comment.