def test_walk_identity_preserves(self): for coll in [ None, 1, "aap", [1, 2, 3], { "a": "b", 1: 2 }, (4, 5, 6), set([7, 8, 9]) ]: res = walk(identity, identity, deepcopy(coll)) res2 = walk(inner=identity, outer=identity, coll=deepcopy(coll)) self.assertEquals(type(res), type(coll)) self.assertEquals(res, coll) self.assertEquals(res2, coll)
def test_walk_fns_inner(self): log_inner = [] def inner(e): log_inner.append(e) return e + 10 self.assertEquals([11, 12], walk(inner, identity, [1, 2])) self.assertEquals([1, 2], log_inner)
def test_walk_fns_outer(self): log_outer = [] def outer(e): log_outer.append(e) return "replaced" self.assertEquals("replaced", walk(identity, outer, [1, 2])) self.assertEquals([[1, 2]], log_outer)
def test_walk_outer_after_inner(self): log = [] def inner(e): log.append(("in", e)) return e + 10 def outer(e): log.append(("out", e)) return set(e) self.assertEquals({11, 12}, walk(inner, outer, [1, 2])) self.assertEquals([("in", 1), ("in", 2), ("out", [11, 12])], log)
def test_walk_supports_Mapping(self): class MyMapping(Mapping): def __getitem__(self, key): return 'aValue' def __iter__(self): yield 'aKey' def __len__(self): return 1 m = MyMapping() res = walk(inner=lambda (k, v): (k, '~' + v), outer=identity, coll=m) self.assertEquals({'aKey': '~aValue'}, res)
def test_walk_builds_new_coll(self): coll = [1, 2] res = walk(identity, identity, coll) self.assertEquals([1, 2], res) self.assertFalse(res is coll)