"""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)