144 lines
4.6 KiB
Python
144 lines
4.6 KiB
Python
|
"""Some tests for the wildcard utilities."""
|
||
|
|
||
|
#-----------------------------------------------------------------------------
|
||
|
# Library imports
|
||
|
#-----------------------------------------------------------------------------
|
||
|
# Stdlib
|
||
|
import unittest
|
||
|
|
||
|
# Our own
|
||
|
from IPython.utils import wildcard
|
||
|
|
||
|
#-----------------------------------------------------------------------------
|
||
|
# Globals for test
|
||
|
#-----------------------------------------------------------------------------
|
||
|
|
||
|
class obj_t(object):
|
||
|
pass
|
||
|
|
||
|
root = obj_t()
|
||
|
l = ["arna","abel","ABEL","active","bob","bark","abbot"]
|
||
|
q = ["kate","loop","arne","vito","lucifer","koppel"]
|
||
|
for x in l:
|
||
|
o = obj_t()
|
||
|
setattr(root,x,o)
|
||
|
for y in q:
|
||
|
p = obj_t()
|
||
|
setattr(o,y,p)
|
||
|
root._apan = obj_t()
|
||
|
root._apan.a = 10
|
||
|
root._apan._a = 20
|
||
|
root._apan.__a = 20
|
||
|
root.__anka = obj_t()
|
||
|
root.__anka.a = 10
|
||
|
root.__anka._a = 20
|
||
|
root.__anka.__a = 20
|
||
|
|
||
|
root._APAN = obj_t()
|
||
|
root._APAN.a = 10
|
||
|
root._APAN._a = 20
|
||
|
root._APAN.__a = 20
|
||
|
root.__ANKA = obj_t()
|
||
|
root.__ANKA.a = 10
|
||
|
root.__ANKA._a = 20
|
||
|
root.__ANKA.__a = 20
|
||
|
|
||
|
#-----------------------------------------------------------------------------
|
||
|
# Test cases
|
||
|
#-----------------------------------------------------------------------------
|
||
|
|
||
|
class Tests (unittest.TestCase):
|
||
|
def test_case(self):
|
||
|
ns=root.__dict__
|
||
|
tests=[
|
||
|
("a*", ["abbot","abel","active","arna",]),
|
||
|
("?b*.?o*",["abbot.koppel","abbot.loop","abel.koppel","abel.loop",]),
|
||
|
("_a*", []),
|
||
|
("_*anka", ["__anka",]),
|
||
|
("_*a*", ["__anka",]),
|
||
|
]
|
||
|
for pat,res in tests:
|
||
|
res.sort()
|
||
|
a=sorted(wildcard.list_namespace(ns,"all",pat,ignore_case=False,
|
||
|
show_all=False).keys())
|
||
|
self.assertEqual(a,res)
|
||
|
|
||
|
def test_case_showall(self):
|
||
|
ns=root.__dict__
|
||
|
tests=[
|
||
|
("a*", ["abbot","abel","active","arna",]),
|
||
|
("?b*.?o*",["abbot.koppel","abbot.loop","abel.koppel","abel.loop",]),
|
||
|
("_a*", ["_apan"]),
|
||
|
("_*anka", ["__anka",]),
|
||
|
("_*a*", ["__anka","_apan",]),
|
||
|
]
|
||
|
for pat,res in tests:
|
||
|
res.sort()
|
||
|
a=sorted(wildcard.list_namespace(ns,"all",pat,ignore_case=False,
|
||
|
show_all=True).keys())
|
||
|
self.assertEqual(a,res)
|
||
|
|
||
|
|
||
|
def test_nocase(self):
|
||
|
ns=root.__dict__
|
||
|
tests=[
|
||
|
("a*", ["abbot","abel","ABEL","active","arna",]),
|
||
|
("?b*.?o*",["abbot.koppel","abbot.loop","abel.koppel","abel.loop",
|
||
|
"ABEL.koppel","ABEL.loop",]),
|
||
|
("_a*", []),
|
||
|
("_*anka", ["__anka","__ANKA",]),
|
||
|
("_*a*", ["__anka","__ANKA",]),
|
||
|
]
|
||
|
for pat,res in tests:
|
||
|
res.sort()
|
||
|
a=sorted(wildcard.list_namespace(ns,"all",pat,ignore_case=True,
|
||
|
show_all=False).keys())
|
||
|
self.assertEqual(a,res)
|
||
|
|
||
|
def test_nocase_showall(self):
|
||
|
ns=root.__dict__
|
||
|
tests=[
|
||
|
("a*", ["abbot","abel","ABEL","active","arna",]),
|
||
|
("?b*.?o*",["abbot.koppel","abbot.loop","abel.koppel","abel.loop",
|
||
|
"ABEL.koppel","ABEL.loop",]),
|
||
|
("_a*", ["_apan","_APAN"]),
|
||
|
("_*anka", ["__anka","__ANKA",]),
|
||
|
("_*a*", ["__anka","__ANKA","_apan","_APAN"]),
|
||
|
]
|
||
|
for pat,res in tests:
|
||
|
res.sort()
|
||
|
a=sorted(wildcard.list_namespace(ns,"all",pat,ignore_case=True,
|
||
|
show_all=True).keys())
|
||
|
a.sort()
|
||
|
self.assertEqual(a,res)
|
||
|
|
||
|
def test_dict_attributes(self):
|
||
|
"""Dictionaries should be indexed by attributes, not by keys. This was
|
||
|
causing Github issue 129."""
|
||
|
ns = {"az":{"king":55}, "pq":{1:0}}
|
||
|
tests = [
|
||
|
("a*", ["az"]),
|
||
|
("az.k*", ["az.keys"]),
|
||
|
("pq.k*", ["pq.keys"])
|
||
|
]
|
||
|
for pat, res in tests:
|
||
|
res.sort()
|
||
|
a = sorted(wildcard.list_namespace(ns, "all", pat, ignore_case=False,
|
||
|
show_all=True).keys())
|
||
|
self.assertEqual(a, res)
|
||
|
|
||
|
def test_dict_dir(self):
|
||
|
class A(object):
|
||
|
def __init__(self):
|
||
|
self.a = 1
|
||
|
self.b = 2
|
||
|
def __getattribute__(self, name):
|
||
|
if name=="a":
|
||
|
raise AttributeError
|
||
|
return object.__getattribute__(self, name)
|
||
|
|
||
|
a = A()
|
||
|
adict = wildcard.dict_dir(a)
|
||
|
assert "a" not in adict # change to assertNotIn method in >= 2.7
|
||
|
self.assertEqual(adict["b"], 2)
|